Subversion Repositories Kolibri OS

Rev

Rev 56 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
116 poddubny 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/
4
; respectively
5
 
33 mario79 6
MouseSearch_PS2:
116 poddubny 7
        jmp .begin
33 mario79 8
 
116 poddubny 9
.kb_cmd_c:
10
        call    kb_cmd
11
.check:
12
        cmp     ah, 1
13
        je      @f
14
        ret
15
@@:
16
        add     esp, 4  ; return address
17
        jmp     .DataInputError
33 mario79 18
 
116 poddubny 19
.kb_write_c:
20
        call    kb_write
21
        jmp     .check
33 mario79 22
 
116 poddubny 23
.kb_read_c:
24
        call    kb_read
25
        jmp     .check
33 mario79 26
 
116 poddubny 27
;--------------------------------------------
28
.begin:
29
        pushad
33 mario79 30
 
116 poddubny 31
        mov     bl, 0xAD        ; disable keyboard interface
32
        call    .kb_cmd_c
33 mario79 33
 
116 poddubny 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
54
 
55
        ; reset completed successfully
56
 
57
        ; enable mouse interrupt - IRQ12
58
        mov     bl, 0x20        ; read command byte
59
        call    .kb_cmd_c
60
        call    .kb_read_c
61
        or      al, 10b         ; set mouse IRQ bit
62
        push    eax
63
        mov     bl, 0x60        ; write command byte
64
        call    .kb_cmd_c
65
        pop     eax
66
        call    .kb_write_c
67
 
68
        mov     bl, 0xd4        ; to mouse
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
 
76
;       jmp     @f
77
;.set_sample_rate:
78
;       push    eax
79
;       mov     bl, 0xd4        ; to mouse
80
;       call    .kb_cmd_c
81
;       mov     al, 0xF3        ; set sample rate
82
;       call    .kb_write_c
83
;       call    .kb_read_c      ; ack
84
;       pop     eax
85
;       call    .kb_write_c
86
;       call    .kb_read_c      ; ack
87
; @@:
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
95
;       call    .kb_cmd_c
96
;       mov     al, 0xF2        ; read device type
97
;       call    .kb_write_c
98
;       call    .kb_read_c      ; ack
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
105
; .no_scroll:
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
112
        call    boot_log
113
 
114
        jmp     .finish
115
 
116
 
117
.DataInputError:
118
.no_ack:
119
.dead_mouse:
120
.unknown_device:
121
        mov     [ps2_mouse_detected],0
122
        mov     bl, 0xA7 ; disable mouse interface
123
        call    kb_cmd
124
        mov     bl, 0xAE ; enable keyboard interface
125
        call    kb_cmd
126
 
127
.finish:
128
        popad