Subversion Repositories Kolibri OS

Rev

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

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