Subversion Repositories Kolibri OS

Rev

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

  1. ;   check mouse
  2. ;
  3. ;
  4. ;   FB00  ->   FB0F   mouse memory 00 chunk count - FB0A-B x - FB0C-D y
  5. ;   FB10  ->   FB17   mouse color mem
  6. ;   FB21              x move
  7. ;   FB22              y move
  8. ;   FB30              color temp
  9. ;   FB28              high bits temp
  10. ;   FB4A  ->   FB4D   FB4A-B x-under - FB4C-D y-under
  11. ;   FC00  ->   FCFE   com1/ps2 buffer
  12. ;   FCFF              com1/ps2 buffer count starting from FC00
  13.  
  14. uglobal
  15.   mousecount  dd  0x0
  16.   mousedata   dd  0x0
  17. endg
  18.  
  19. include 'm_ps2.inc'
  20. include 'm_com1.inc'
  21. include 'm_com2.inc'
  22.  
  23.  
  24. ;test_mario79:
  25. ;        push   esi
  26. ;        push   eax
  27. ;        mov    [write_error_to],process_test_m79+43
  28. ;        movzx  eax,al  ;[DevErrorCode]
  29. ;        call   writehex
  30. ;        mov    esi,process_test_m79
  31. ;        call   sys_msg_board_str
  32. ;        pop    eax
  33. ;        pop    esi
  34. ;        ret
  35. ;process_test_m79 db 'K : Process - test Mario79 error    00000000',13,10,0
  36.  
  37. draw_mouse_under:
  38.        
  39.         ; return old picture
  40.  
  41.         pushad
  42.      
  43.         xor    ecx,ecx
  44.         xor    edx,edx
  45.  
  46.         ;cli    ; !!!****
  47.         align  4
  48.       mres:
  49.  
  50.         movzx  eax,word [0xfb4a]
  51.         movzx  ebx,word [0xfb4c]
  52.  
  53.         add    eax,ecx
  54.         add    ebx,edx
  55.  
  56.         push   ecx
  57.         push   edx
  58.         push   eax
  59.         push   ebx
  60.  
  61.         mov    eax,edx
  62.         shl    eax,6
  63.         shl    ecx,2
  64.         add    eax,ecx
  65.         add    eax,mouseunder
  66.         mov    ecx,[eax]
  67.  
  68.         pop    ebx
  69.         pop    eax
  70.  
  71.         ;;;push   edi
  72.         mov    edi, 1 ;force
  73.         call   [putpixel]
  74.         ;;;pop    edi
  75.  
  76.         pop    edx
  77.         pop    ecx
  78.  
  79.         inc    ecx
  80.         cmp    ecx, 16
  81.         jnz    mres
  82.         xor    ecx, ecx
  83.         inc    edx
  84.         cmp    edx, 24
  85.         jnz    mres
  86.         ;sti    ; !!!****
  87.  
  88.         popad
  89.        
  90.         ret
  91.  
  92. save_draw_mouse:
  93.         pushad
  94.         ; save & draw
  95.  
  96.         mov    [0xfb4a],ax
  97.         mov    [0xfb4c],bx
  98.         push   eax
  99.         push   ebx
  100.         mov    ecx,0
  101.         mov    edx,0
  102.  
  103.         ;cli ; !!!****
  104.         align  4
  105.       drm:
  106.  
  107.         push   eax
  108.         push   ebx
  109.         push   ecx
  110.         push   edx
  111.  
  112.         ; helloworld
  113.         push  ecx
  114. ;        push   eax ebx ecx
  115.         add    eax,ecx  ; save picture under mouse
  116.         add    ebx,edx
  117.         push   ecx
  118.         call   getpixel
  119.         mov    [0xfb30],ecx
  120.         pop    ecx
  121.         mov    eax,edx
  122.         shl    eax,6
  123.         shl    ecx,2
  124.         add    eax,ecx
  125.         add    eax,mouseunder
  126.         mov    ebx,[0xfb30]
  127.         mov    [eax],ebx
  128. ;        pop    ecx ebx eax
  129.         pop  ecx
  130.  
  131.         mov    edi,edx       ; y cycle
  132.         shl    edi,4       ; *16 bytes per row
  133.         add    edi,ecx       ; x cycle
  134.         mov    esi, edi
  135.         add    edi, esi
  136.         add    edi, esi       ; *3
  137.         add    edi,[0xf200]      ; we have our str address
  138.         mov    esi, edi
  139.         add    esi, 16*24*3
  140.         push   ecx
  141.         mov    ecx, [0xfb30]
  142.         call   combine_colors
  143.         mov    [0xfb10], ecx
  144.         pop    ecx
  145.  
  146.  
  147.         pop    edx
  148.         pop    ecx
  149.         pop    ebx
  150.         pop    eax
  151.  
  152.         add    eax,ecx       ; we have x coord+cycle
  153.         add    ebx,edx       ; and y coord+cycle
  154.  
  155. ;        push   ecx edi
  156.         push   ecx
  157.         mov    ecx, [0xfb10]
  158.         mov    edi, 1
  159.         call   [putpixel]
  160.         pop    ecx
  161. ;        pop    edi ecx
  162.  
  163. ;      mnext:
  164.  
  165.         mov    ebx,[esp+0]      ; pure y coord again
  166.         mov    eax,[esp+4]      ; and x
  167.  
  168.         inc    ecx          ; +1 cycle
  169.         cmp    ecx,16       ; if more than 16
  170.         jnz    drm
  171.         xor    ecx, ecx
  172.         inc    edx
  173.         cmp    edx,24
  174.         jnz    drm
  175.  
  176.         pop    ebx
  177.         pop    eax
  178.  
  179.         ;sti ; !!!****
  180.         popad
  181.         ret
  182.  
  183.  
  184. combine_colors:
  185.  
  186.       ; in
  187.       ; ecx - color ( 00 RR GG BB )
  188.       ; edi - ref to new color byte
  189.       ; esi - ref to alpha byte
  190.       ;
  191.       ; out
  192.       ; ecx - new color ( roughly (ecx*[esi]>>8)+([edi]*[esi]>>8) )
  193.  
  194.       push eax
  195.       push ebx
  196.       push edx
  197.       push ecx
  198.       xor ecx, ecx
  199.          ; byte 2
  200.       mov eax, 0xff
  201.       sub al, [esi+0]
  202.       mov ebx, [esp]
  203.       shr ebx, 16
  204.       and ebx, 0xff
  205.       mul ebx
  206.       shr eax, 8
  207.       add ecx, eax
  208. ;      xor eax, eax
  209. ;      xor ebx, ebx
  210. ;      mov al, [edi+0]
  211. ;      mov bl, [esi+0]
  212.     movzx eax, byte [edi+0]
  213.     movzx ebx, byte [esi+0]
  214.       mul ebx
  215.       shr eax, 8
  216.       add ecx, eax
  217.       shl ecx, 8
  218.          ; byte 1
  219.       mov eax, 0xff
  220.       sub al, [esi+1]
  221.       mov ebx, [esp]
  222.       shr ebx, 8
  223.       and ebx, 0xff
  224.       mul ebx
  225.       shr eax, 8
  226.       add ecx, eax
  227. ;      xor eax, eax
  228. ;      xor ebx, ebx
  229. ;      mov al, [edi+1]
  230. ;      mov bl, [esi+1]
  231.     movzx eax, byte [edi+1]
  232.     movzx ebx, byte [esi+1]
  233.       mul ebx
  234.       shr eax, 8
  235.       add ecx, eax
  236.       shl ecx, 8
  237.          ; byte 2
  238.       mov eax, 0xff
  239.       sub al, [esi+2]
  240.       mov ebx, [esp]
  241.       and ebx, 0xff
  242.       mul ebx
  243.       shr eax, 8
  244.       add ecx, eax
  245. ;      xor eax, eax
  246. ;      xor ebx, ebx
  247. ;      mov al, [edi+2]
  248. ;      mov bl, [esi+2]
  249.     movzx eax, byte [edi+2]
  250.     movzx ebx, byte [esi+2]
  251.       mul ebx
  252.       shr eax, 8
  253.       add ecx, eax
  254.  
  255.       pop eax
  256.       pop edx
  257.       pop ebx
  258.       pop eax
  259.       ret
  260.  
  261.  
  262. __sys_disable_mouse:
  263.  
  264.       cli
  265.       pushad
  266.       cmp  dword [0xf204],dword 0
  267.       jne  no_mouse_disable
  268.  
  269.       cmp  [0x3000],dword 1
  270.       je   disable_m
  271.  
  272.       mov  edx,[0x3000]
  273.       shl  edx,5
  274.       add  edx,window_data
  275.  
  276.       movzx  eax, word [0xfb0a]
  277.       movzx  ebx, word [0xfb0c]
  278.  
  279.       mov  ecx,[0xfe00]
  280.       inc  ecx
  281.       imul  ecx,ebx
  282.       add  ecx,eax
  283.       add  ecx, display_data
  284.  
  285.       movzx eax, byte [edx+twdw+0xe]
  286.  
  287.       movzx ebx, byte [ecx]
  288.       cmp   eax,ebx
  289.       je    yes_mouse_disable
  290.       movzx ebx, byte [ecx+16]
  291.       cmp   eax,ebx
  292.       je    yes_mouse_disable
  293.  
  294. ;      mov   ebx,[0xfe00]
  295. ;      inc   ebx
  296. ;      imul  ebx,10
  297. ;      add   ecx,ebx
  298. ;      movzx ebx, byte [ecx]
  299. ;      cmp   eax,ebx
  300. ;      je    yes_mouse_disable
  301.  
  302.       mov   ebx,[0xfe00]
  303.       inc   ebx
  304.       imul  ebx,10
  305.       add   ecx,ebx
  306.       movzx ebx, byte [ecx]
  307.       cmp   eax,ebx
  308.       je    yes_mouse_disable
  309.  
  310.       movzx ebx, byte [ecx+16]
  311.       cmp   eax,ebx
  312.       je    yes_mouse_disable
  313.  
  314.       jmp   no_mouse_disable
  315.  
  316.     yes_mouse_disable:
  317.  
  318.       mov  edx,[0x3000]
  319.       shl  edx,5
  320.       add  edx,window_data
  321.  
  322.       movzx  eax, word [0xfb0a]
  323.       movzx  ebx, word [0xfb0c]
  324.  
  325.       mov  ecx,[edx+0]   ; mouse inside the area ?
  326.       add  eax,14
  327.       cmp  eax,ecx
  328.       jb   no_mouse_disable
  329.       sub  eax,14
  330.  
  331.       add  ecx,[edx+8]
  332.       cmp  eax,ecx
  333.       jg   no_mouse_disable
  334.  
  335.       mov  ecx,[edx+4]
  336.       add  ebx,20
  337.       cmp  ebx,ecx
  338.       jb   no_mouse_disable
  339.       sub  ebx,20
  340.  
  341.       add  ecx,[edx+12]
  342.       cmp  ebx,ecx
  343.       jg   no_mouse_disable
  344.  
  345.     disable_m:
  346.       cmp  dword [0xf204],dword 0
  347.       jne  @f
  348.        call draw_mouse_under
  349. ;    @@:
  350.       mov  [0xf204],dword 1
  351. ;       inc  dword [0xf204]
  352.     @@:
  353.    
  354.     no_mouse_disable:
  355.       popad
  356.       sti
  357.       ret
  358.  
  359. __sys_draw_pointer:
  360.         cli
  361.         pushad
  362.      m_pause_1:
  363.         cmp   [mouse_pause],0
  364.         je    @f
  365. ;        call    change_task
  366. ;        jmp  m_pause_1
  367.         jmp   nodmp
  368.      @@:
  369. ;        cli
  370.         cmp    dword [0xf204],dword 0  ; mouse visible ?
  371.         je     chms00
  372.  
  373.         mov     [0xf204], dword 0
  374.         movzx  ebx,word [0xfb0c]
  375.         movzx  eax,word [0xfb0a]
  376.         call   save_draw_mouse
  377.  
  378.       nodmu2:
  379.         popad
  380.         sti
  381.         ret
  382.  
  383.       chms00:
  384.  
  385.         movzx  ecx,word [0xfb4a]
  386.         movzx  edx,word [0xfb4c]
  387.  
  388.         movzx  ebx,word [0xfb0c]
  389.         movzx  eax,word [0xfb0a]
  390.  
  391.         cmp    eax,ecx
  392.         jne    redrawmouse
  393.  
  394.         cmp    ebx,edx
  395.         jne    redrawmouse
  396.  
  397.         jmp    nodmp
  398.  
  399.       redrawmouse:
  400.        
  401.         call   draw_mouse_under
  402.         call   save_draw_mouse
  403.  
  404.     nodmp:
  405.  
  406.         popad
  407.         sti
  408.         ret
  409.