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 |