Subversion Repositories Kolibri OS

Rev

Rev 5044 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
492 kastigar 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