Subversion Repositories Kolibri OS

Rev

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

  1. kbd_read:
  2.     push    ecx edx
  3.  
  4.     mov     ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's
  5.   kr_loop:
  6.     in      al,0x64
  7.     test    al,1
  8.     jnz     kr_ready
  9.     loop    kr_loop
  10.     mov     ah,1
  11.     jmp     kr_exit
  12.   kr_ready:
  13.     push    ecx
  14.     mov     ecx,32
  15.   kr_delay:
  16.     loop    kr_delay
  17.     pop     ecx
  18.     in      al,0x60
  19.     xor     ah,ah
  20.   kr_exit:
  21.     pop     edx ecx
  22.     ret
  23.  
  24.  
  25. kbd_write:
  26.  
  27.     push    ecx edx
  28.  
  29.     mov     dl,al
  30.     in      al,0x60
  31.     mov     ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's
  32.   kw_loop:
  33.     in      al,0x64
  34.     test    al,2
  35.     jz      kw_ok
  36.     loop    kw_loop
  37.     mov     ah,1
  38.     jmp     kw_exit
  39.   kw_ok:
  40.     mov     al,dl
  41.     out     0x60,al
  42.     mov     ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's
  43.   kw_loop3:
  44.     in      al,0x64
  45.     test    al,2
  46.     jz      kw_ok3
  47.     loop    kw_loop3
  48.     mov     ah,1
  49.     jmp     kw_exit
  50.   kw_ok3:
  51.     mov     ah,8
  52.   kw_loop4:
  53.     mov     ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's
  54.   kw_loop5:
  55.     in      al,0x64
  56.     test    al,1
  57.     jnz     kw_ok4
  58.     loop    kw_loop5
  59.     dec     ah
  60.     jnz     kw_loop4
  61.   kw_ok4:
  62.     xor     ah,ah
  63.   kw_exit:
  64.     pop     edx ecx
  65.     ret
  66.  
  67.  
  68. kbd_cmd:
  69.  
  70.     mov     ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's
  71.   c_wait:
  72.     in      al,0x64
  73.     test    al,2
  74.     jz      c_send
  75.     loop    c_wait
  76.     jmp     c_error
  77.   c_send:
  78.     mov     al,bl
  79.     out     0x64,al
  80.     mov     ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's
  81.   c_accept:
  82.     in      al,0x64
  83.     test    al,2
  84.     jz      c_ok
  85.     loop    c_accept
  86.   c_error:
  87.     mov     ah,1
  88.     jmp     c_exit
  89.   c_ok:
  90.     xor     ah,ah
  91.   c_exit:
  92.     ret
  93.  
  94. mouse_cmd:
  95.     mov  [mouse_cmd_byte], al
  96.     mov  [mouse_nr_resends], 5
  97.  .resend:
  98.     mov  bl, 0xd4
  99.     call kbd_cmd
  100.     cmp  ah,1
  101.     je   .fail
  102.  
  103.     mov  al, [mouse_cmd_byte]
  104.     call kbd_write
  105.     cmp  ah, 1
  106.     je   .fail
  107.  
  108.     call mouse_read
  109.  
  110.     cmp  al, 0xFA
  111.     jne  .noack
  112.     clc
  113.     ret
  114.   .noack:
  115.     cmp  al, 0xFE       ; resend
  116.     jne  .noresend
  117.     dec  [mouse_nr_resends]
  118.     jnz  .resend
  119.   .noresend:
  120.   .fail:
  121.     stc
  122.     ret
  123.  
  124.  
  125. mouse_read:
  126.     mov  [mouse_nr_tries], 100
  127.   .repeat:
  128.     call kbd_read
  129.           cmp  ah, 1
  130.           jne  .fin
  131.           mov  esi, 10
  132.     call Sleep
  133.     dec  [mouse_nr_tries]
  134.     jnz  .repeat
  135.  
  136.     stc
  137.     ret
  138.  
  139.   .fin:
  140.     clc
  141.     ret
  142.