Subversion Repositories Kolibri OS

Rev

Rev 33 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;**************************************************
  2. ;*      ╧╬╚╤╩ ╠█╪╚ ╧╬ ╧╬╤╦┼─╬┬└╥┼╦▄═█╠ ╧╬╨╥└╠     *
  3. ;* ╧ЁюЎхфєЁр яюфуюЄртыштрхЄ уыюсры№э√х яхЁхьхээ√х *
  4. ;* COMPortNum ш COMPortBaseAddr фы  яюфяЁюуЁрьь√  *
  5. ;* єёЄрэютъш юсЁрсюЄўшър яЁхЁ√трэш                *
  6. ;**************************************************
  7. ; └тЄюЁ шёїюфэюую ЄхъёЄр ╩єыръют ┬ырфшьшЁ ├хээрф№хтшў.
  8. ; └фряЄрЎш  ш фюЁрсюЄър Mario79
  9.  
  10. Detect_COM_Mouse:
  11.         pusha
  12.         call   MSMouseSearch
  13.         cmp    AL,'M'
  14.         jne    @f
  15.         mov    [com1_mouse_detected],1
  16.         pusha
  17.  
  18.         mov   eax,4
  19.         shl   eax,2
  20.         mov   [irq_owner+eax],byte 1
  21.  
  22.         inc   dword [0x2d0000]
  23.         mov   edi,[0x2d0000]
  24.         shl   edi,4
  25.         mov   [0x2d0000+edi+0],dword 1
  26.         mov   [0x2d0000+edi+4],dword 0x3f0
  27.         mov   [0x2d0000+edi+8],dword 0x3ff
  28.  
  29.         popa
  30.         mov    esi,boot_setmouse_type+22
  31.         call  boot_log
  32.      @@:
  33.         sub    [COMPortBaseAddr],100h
  34.         call   MSMouseSearch
  35.         cmp    AL,'M'
  36.         jne    @f        
  37.         mov    [com2_mouse_detected],1
  38.         pusha
  39.  
  40.         mov   eax,3
  41.         shl   eax,2
  42.         mov   [irq_owner+eax],byte 1
  43.        
  44.         inc   dword [0x2d0000]
  45.         mov   edi,[0x2d0000]
  46.         shl   edi,4
  47.         mov   [0x2d0000+edi+0],dword 1
  48.         mov   [0x2d0000+edi+4],dword 0x2f0
  49.         mov   [0x2d0000+edi+8],dword 0x2ff        
  50.  
  51.         popa
  52.         mov    esi,boot_setmouse_type+44
  53.         call  boot_log
  54.      @@:
  55.         popa
  56.         jmp     end_detecting_mouse
  57.  
  58. MSMouseSearch:
  59.         ; ╧╬╚╤╩ ╠█╪╚ ╫┼╨┼╟ COM-╧╬╨╥█
  60. MouseSearch:
  61.         ; ╙ёЄрэртыштрхь ёъюЁюёЄ№
  62.         ; яЁшхьр/яхЁхфрўш 1200 сюф
  63.         mov     DX,[COMPortBaseAddr]
  64.         add     DX,3
  65.         in      AL,DX
  66.         or      AL,80h  ;єёЄрэютшЄ№ сшЄ DLAB
  67.         out     DX,AL
  68.         mov     DX,[COMPortBaseAddr]
  69.         mov     AL,60h  ;1200 сюф
  70.         out     DX,AL
  71.         inc     DX
  72.         mov     AL,0
  73.         out     DX,AL
  74.         ; ╙ёЄрэютшЄ№ фышэє ёыютр 7 сшЄ, 1 ёЄюяют√щ сшЄ,
  75.         ; ўхЄэюёЄ№ эх ъюэЄЁюышЁютрЄ№
  76.         mov     DX,[COMPortBaseAddr]
  77.         add     DX,3
  78.         mov     AL,00000010b
  79.         out     DX,AL
  80.         ; ╟ряЁхЄшЄ№ тёх яЁхЁ√трэш 
  81.         mov     DX,[COMPortBaseAddr]
  82.         inc     DX
  83.         mov     AL,0
  84.         out     DX,AL
  85. ; ╧ЁютхЁшЄ№, ўЄю єёЄЁющёЄтю яюфъы■ўхэю ш  ты хЄё 
  86. ; ь√°№■ Єшяр MSMouse
  87.         ; ╬Єъы■ўшЄ№ яшЄрэшх ь√°ш ш яЁхЁ√трэш 
  88.         mov     DX,[COMPortBaseAddr]
  89.         add     DX,4    ;ЁхушёЄЁ єяЁртыхэш  ьюфхьюь
  90.         mov     AL,0    ;ёсЁюёшЄ№ DTR, RTS ш OUT2
  91.         out     DX,AL
  92.         ; ╬цшфрЄ№ 5 "Єшъют" (0,2 ё)
  93.         mov  ecx,0xffff
  94. dT_1:
  95.         dec  ecx
  96.         cmp ecx,0
  97.         jne dT_1
  98.         mov  ecx,0xffff
  99.         ; ┬ъы■ўшЄ№ яшЄрэшх ь√°ш
  100.         mov     AL,11b  ;єёЄрэютшЄ№ DTR ш RTS
  101.         out     DX,AL
  102.         ; ╬ўшёЄшЄ№ ЁхушёЄЁ фрээ√ї
  103.         mov     DX,[COMPortBaseAddr]
  104.         in      AL,DX
  105. ; ╓шъы юяЁюёр яюЁЄр
  106. WaitData:
  107.         ; ╬цшфрЄ№ х∙х 10 "Єшъют"
  108.          dec  ecx
  109.          cmp  ecx,0
  110.          je     NoMouse
  111.         ; ╧ЁютхЁшЄ№ эрышўшх шфхэЄшЇшърЎшюээюую срщЄр
  112.         mov     DX,[COMPortBaseAddr]
  113.         add     DX,5
  114.         in      AL,DX
  115.         test    AL,1   ;─рээ√х уюЄют√?
  116.         jz      WaitData
  117.         ; ┬тхёЄш фрээ√х
  118.         mov     DX,[COMPortBaseAddr]
  119.         in      AL,DX
  120. NoMouse:
  121.         ret
  122.  
  123. iglobal
  124. COMPortBaseAddr dw 3F8h
  125. ;COMPortNum dw 0
  126. endg
  127.  
  128. iglobal
  129. boot_setmouse_type  db   'Detected - PS2  mouse',0
  130.                     db   'Detected - COM1 mouse',0
  131.                     db   'Detected - COM2 mouse',0
  132. endg
  133.  
  134. end_detecting_mouse:
  135.  
  136.