Subversion Repositories Kolibri OS

Rev

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

  1. $Revision: 473 $
  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.         mov     [irq_owner+4*4], 1      ; IRQ4 owner is System
  25.         mov     eax, [RESERVED_PORTS]
  26.         inc     eax
  27.         mov     [RESERVED_PORTS], eax
  28.         shl     eax, 4
  29.         mov     [RESERVED_PORTS+eax+0], dword 1
  30.         mov     [RESERVED_PORTS+eax+4], dword 0x3F8
  31.         mov     [RESERVED_PORTS+eax+8], dword 0x3FF
  32.         mov    esi,boot_setmouse_type+22
  33.         call  boot_log
  34.      @@:
  35.         sub    [COMPortBaseAddr],100h
  36.         call   MSMouseSearch
  37.         cmp    AL,'M'
  38.         jne    @f
  39.         mov    [com2_mouse_detected],1
  40.         mov     [irq_owner+3*4], 1      ; IRQ3 owner is System
  41.         mov     eax, [RESERVED_PORTS]
  42.         inc     eax
  43.         mov     [RESERVED_PORTS], eax
  44.         shl     eax, 4
  45.         mov     [RESERVED_PORTS+eax+0], dword 1
  46.         mov     [RESERVED_PORTS+eax+4], dword 0x2F8
  47.         mov     [RESERVED_PORTS+eax+8], dword 0x2FF
  48.         mov    esi,boot_setmouse_type+44
  49.         call  boot_log
  50.      @@:
  51.         popa
  52.         jmp     end_detecting_mouse
  53.  
  54. MSMouseSearch:
  55.         ; ╧╬╚╤╩ ╠█╪╚ ╫┼╨┼╟ COM-╧╬╨╥█
  56. MouseSearch:
  57.         ; ╙ёЄрэртыштрхь ёъюЁюёЄ№
  58.         ; яЁшхьр/яхЁхфрўш 1200 сюф
  59.         mov     DX,[COMPortBaseAddr]
  60.         add     DX,3
  61.         in      AL,DX
  62.         or      AL,80h  ;єёЄрэютшЄ№ сшЄ DLAB
  63.         out     DX,AL
  64.         mov     DX,[COMPortBaseAddr]
  65.         mov     AL,60h  ;1200 сюф
  66.         out     DX,AL
  67.         inc     DX
  68.         mov     AL,0
  69.         out     DX,AL
  70.         ; ╙ёЄрэютшЄ№ фышэє ёыютр 7 сшЄ, 1 ёЄюяют√щ сшЄ,
  71.         ; ўхЄэюёЄ№ эх ъюэЄЁюышЁютрЄ№
  72.         mov     DX,[COMPortBaseAddr]
  73.         add     DX,3
  74.         mov     AL,00000010b
  75.         out     DX,AL
  76.         ; ╟ряЁхЄшЄ№ тёх яЁхЁ√трэш
  77.         mov     DX,[COMPortBaseAddr]
  78.         inc     DX
  79.         mov     AL,0
  80.         out     DX,AL
  81. ; ╧ЁютхЁшЄ№, ўЄю єёЄЁющёЄтю яюфъы■ўхэю ш  ты хЄё
  82. ; ь√°№■ Єшяр MSMouse
  83.         ; ╬Єъы■ўшЄ№ яшЄрэшх ь√°ш ш яЁхЁ√трэш
  84.         mov     DX,[COMPortBaseAddr]
  85.         add     EDX,4   ;ЁхушёЄЁ єяЁртыхэш  ьюфхьюь
  86.         mov     AL,0    ;ёсЁюёшЄ№ DTR, RTS ш OUT2
  87.         out     DX,AL
  88.         ; ╬цшфрЄ№ 5 "Єшъют" (0,2 ё)
  89.         mov     ecx, 0xFFFF
  90.         loop    $
  91.         ; ┬ъы■ўшЄ№ яшЄрэшх ь√°ш
  92.         mov     al, 1
  93.         out     dx, al
  94.         mov     ecx, 0xFFFF
  95.         loop    $
  96.         ; ╬ўшёЄшЄ№ ЁхушёЄЁ фрээ√ї
  97.         sub     edx, 4
  98.         in      AL,DX
  99.         add     edx, 4
  100.         mov     AL,11b  ;єёЄрэютшЄ№ DTR ш RTS
  101.         out     DX,AL
  102.         mov     ecx, 0x1FFFF
  103. ; ╓шъы юяЁюёр яюЁЄр
  104. WaitData:
  105.         ; ╬цшфрЄ№ х∙х 10 "Єшъют"
  106.          dec  ecx
  107.          cmp  ecx,0
  108.          je     NoMouse
  109.         ; ╧ЁютхЁшЄ№ эрышўшх шфхэЄшЇшърЎшюээюую срщЄр
  110.         mov     DX,[COMPortBaseAddr]
  111.         add     DX,5
  112.         in      AL,DX
  113.         test    AL,1   ;─рээ√х уюЄют√?
  114.         jz      WaitData
  115.         ; ┬тхёЄш фрээ√х
  116.         mov     DX,[COMPortBaseAddr]
  117.         in      AL,DX
  118. NoMouse:
  119.         ret
  120.  
  121. iglobal
  122. COMPortBaseAddr dw 3F8h
  123. ;COMPortNum dw 0
  124. endg
  125.  
  126. iglobal
  127. boot_setmouse_type  db   'Detected - PS2  mouse',0
  128.                     db   'Detected - COM1 mouse',0
  129.                     db   'Detected - COM2 mouse',0
  130. endg
  131.  
  132. end_detecting_mouse:
  133.  
  134.