Subversion Repositories Kolibri OS

Rev

Rev 56 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 56 Rev 116
Line -... Line 1...
-
 
1
; for information on PS2 mouse/keyboard programming
-
 
2
; refer to http://www.computer-engineering.org/ps2mouse/
-
 
3
; and http://www.computer-engineering.org/ps2keyboard/
1
MouseSearch_PS2:
4
; respectively
Line 2... Line -...
2
 
-
 
3
     pusha
5
 
4
     	mov	bl, 0xAD
6
MouseSearch_PS2:
Line 5... Line 7...
5
     	call	kb_cmd
7
        jmp .begin
6
     
8
 
-
 
9
.kb_cmd_c:
7
     mov     bl,0xa8                 ; enable mouse cmd
10
        call    kb_cmd
-
 
11
.check:
-
 
12
        cmp     ah, 1
-
 
13
        je      @f
-
 
14
        ret
8
     call    kb_cmd
15
@@:
Line 9... Line -...
9
     cmp     ah,1
-
 
10
     je      @@DataInputError
16
        add     esp, 4  ; return address
11
 
-
 
12
     mov     bl,0xd4                 ; for mouse
-
 
13
     call    kb_cmd
-
 
14
     cmp     ah,1
17
        jmp     .DataInputError
15
     je      @@DataInputError 
18
 
16
     mov     al,0xeb                 ; 
-
 
17
     call    kb_write
-
 
18
     cmp     ah,1
-
 
19
     je      @@DataInputError
-
 
20
     call    kb_read                 ; Acknowledge
-
 
21
     call    kb_read
-
 
22
     mov     [ps2_mouse_detected],0
-
 
23
     test    al,18h
-
 
24
     jz      @f
-
 
25
     mov     [ps2_mouse_detected],1
-
 
Line 26... Line -...
26
  @@:   
-
 
27
     call    kb_read                 ; 
19
.kb_write_c:
28
     call    kb_read                 ; 
-
 
29
 
-
 
30
     mov     bl,0x20                 ; get command byte
20
        call    kb_write
31
     call    kb_cmd
21
        jmp     .check
-
 
22
 
-
 
23
.kb_read_c:
-
 
24
        call    kb_read
-
 
25
        jmp     .check
-
 
26
 
-
 
27
;--------------------------------------------
32
     cmp     ah,1
28
.begin:
-
 
29
        pushad
33
     je      @@DataInputError
30
 
-
 
31
        mov     bl, 0xAD        ; disable keyboard interface
-
 
32
        call    .kb_cmd_c
-
 
33
 
-
 
34
        mov     bl, 0xa8        ; enable mouse interface
-
 
35
        call    .kb_cmd_c
-
 
36
 
-
 
37
        mov     bl, 0xd4        ; to mouse
-
 
38
        call    .kb_cmd_c
-
 
39
        mov     al, 0xFF        ; reset
-
 
40
        call    .kb_write_c
-
 
41
        call    .kb_read_c
-
 
42
        cmp     al, 0xFA        ; ack
-
 
43
        jne     .no_ack
-
 
44
 
-
 
45
        ; now the mouse is in Reset Mode
-
 
46
        ; get the Basic Assurance Test completion code
-
 
47
        call    .kb_read_c
-
 
48
        cmp     al, 0xAA
-
 
49
        jne     .dead_mouse
-
 
50
        ; get device ID
-
 
51
        call    .kb_read_c
-
 
52
        cmp     al, 0x00
-
 
53
        jne     .unknown_device
34
     call    kb_read
54
 
-
 
55
        ; reset completed successfully
-
 
56
 
-
 
57
        ; enable mouse interrupt - IRQ12
35
     cmp     ah,1
58
        mov     bl, 0x20        ; read command byte
-
 
59
        call    .kb_cmd_c
36
     je      @@DataInputError
60
        call    .kb_read_c
37
     or      al,3                    ; enable interrupt
61
        or      al, 10b         ; set mouse IRQ bit
38
     mov     bl,0x60                 ; write command
62
        push    eax
39
     push    eax
-
 
40
     call    kb_cmd
-
 
Line 41... Line 63...
41
     pop     eax
63
        mov     bl, 0x60        ; write command byte
42
     call    kb_write
64
        call    .kb_cmd_c
-
 
65
        pop     eax
-
 
66
        call    .kb_write_c
-
 
67
 
43
     cmp     ah,1
68
        mov     bl, 0xd4        ; to mouse
44
     je      @@DataInputError
69
        call    .kb_cmd_c
-
 
70
        mov     al, 0xf4        ; enable data reporting
-
 
71
        call    .kb_write_c
-
 
72
        call    .kb_read_c
-
 
73
        cmp     al, 0xFA
-
 
74
        jne     .no_ack
-
 
75
 
45
 
76
;       jmp     @f
46
     mov     bl,0xd4                 ; for mouse
77
;.set_sample_rate:
-
 
78
;       push    eax
47
     call    kb_cmd
79
;       mov     bl, 0xd4        ; to mouse
48
     cmp     ah,1
80
;       call    .kb_cmd_c
49
     je      @@DataInputError
81
;       mov     al, 0xF3        ; set sample rate
-
 
82
;       call    .kb_write_c
-
 
83
;       call    .kb_read_c      ; ack
-
 
84
;       pop     eax
50
     mov     al,0xf4                 ; enable mouse device
85
;       call    .kb_write_c
-
 
86
;       call    .kb_read_c      ; ack
-
 
87
; @@:
51
     call    kb_write
88
;       mov     eax, 200
-
 
89
;       call    .set_sample_rate
-
 
90
;       mov     eax, 100
-
 
91
;       call    .set_sample_rate
-
 
92
;       mov     eax, 80
-
 
93
;       call    .set_sample_rate
-
 
94
;       mov     bl, 0xd4
52
     cmp     ah,1
95
;       call    .kb_cmd_c
-
 
96
;       mov     al, 0xF2        ; read device type
-
 
97
;       call    .kb_write_c
-
 
98
;       call    .kb_read_c      ; ack
53
     je      @@DataInputError
99
;       call    .kb_read_c      ; mouse ID
-
 
100
;       cmp     al, 0x03
-
 
101
;       jne     .no_scroll
-
 
102
;       mov     [ps2_mouse_scroll], 1
-
 
103
;       ; it'll send 4-byte packets instead of 3-byte ones
-
 
104
;       ; the last byte of a packet represents z-axis movement
Line 54... Line -...
54
     call    kb_read           ; read status return
-
 
55
     cmp     ah,1
-
 
56
     je      @@DataInputError
-
 
57
     cmp     AL,0FAh          
105
; .no_scroll:
58
     jnz     @@DataInputError ;íåò ïîäòâåðæäåíèÿ
106
 
-
 
107
        mov     [ps2_mouse_detected], 1
-
 
108
        mov     bl, 0xAE        ; enable keyboard interface
-
 
109
        call    .kb_cmd_c
-
 
110
 
-
 
111
        mov     esi, boot_setmouse_type
59
 
112
        call    boot_log
-
 
113
 
60
@@DataInputError:
114
        jmp     .finish
-
 
115
 
-
 
116
 
-
 
117
.DataInputError:
-
 
118
.no_ack:
61
     cmp     [ps2_mouse_detected],0
119
.dead_mouse:
62
     je      @f
-
 
Line -... Line 120...
-
 
120
.unknown_device:
-
 
121
        mov     [ps2_mouse_detected],0