Rev 58 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 58 | Rev 120 | ||
---|---|---|---|
1 | ; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà |
1 | ; Íîìåð ïðèíèìàåìîãî îò ìûøè áàéòà |
2 | MouseByteNumber DB 0 |
2 | MouseByteNumber DB 0 |
3 | ; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ |
3 | ; Òðåõáàéòîâàÿ ñòðóêòóðà äàííûõ, ïåðåäàâàåìàÿ ìûøüþ |
4 | FirstByte DB 0 |
4 | FirstByte DB 0 |
5 | SecondByte DB 0 |
5 | SecondByte DB 0 |
6 | ThirdByte DB 0 |
6 | ThirdByte DB 0 |
7 | - | ||
- | 7 | timer_ticks_com dd 0 |
|
8 | ;*************************************** |
8 | ;*************************************** |
9 | ;* ÍÎÂÛÉ ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ * |
9 | ;* ÍÎÂÛÉ ÎÁÐÀÁÎÒ×ÈÊ ÏÐÅÐÛÂÀÍÈß ÎÒ ÌÛØÈ * |
10 | ;*************************************** |
10 | ;*************************************** |
11 | check_mouse_data_com1: |
11 | check_mouse_data_com1: |
12 | ; cmp [com1_mouse_detected],0 |
12 | ; cmp [com1_mouse_detected],0 |
13 | ; je @@EndMouseInterrupt |
13 | ; je @@EndMouseInterrupt |
14 | ; Ïðîâåðèòü íàëè÷èå äàííûõ |
14 | ; Ïðîâåðèòü íàëè÷èå äàííûõ |
15 | mov DX,3F8h ;[COMPortBaseAddr] |
15 | mov DX,3F8h ;[COMPortBaseAddr] |
16 | add DX,5 ;xFDh |
16 | add DX,5 ;xFDh |
17 | in AL,DX |
17 | in AL,DX |
18 | test AL,1 ;Äàííûå ãîòîâû? |
18 | test AL,1 ;Äàííûå ãîòîâû? |
19 | jz @@Error |
19 | jz @@Error |
20 | ; Ââåñòè äàííûå |
20 | ; Ââåñòè äàííûå |
21 | mov DX,3F8h ;[COMPortBaseAddr] ;xF8h |
21 | mov DX,3F8h ;[COMPortBaseAddr] ;xF8h |
22 | in AL,DX |
22 | in AL,DX |
23 | ; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò |
23 | ; Ñáðîñèòü ñòàðøèé íåçíà÷àùèé áèò |
24 | and AL,01111111b |
24 | and AL,01111111b |
25 | 25 | ||
26 | ; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà |
26 | ; Îïðåäåëèòü ïîðÿäêîâûé íîìåð ïðèíèìàåìîãî áàéòà |
27 | cmp [MouseByteNumber],0 |
27 | cmp [MouseByteNumber],0 |
28 | je @@FirstByte |
28 | je @@FirstByte |
29 | cmp [MouseByteNumber],1 |
29 | cmp [MouseByteNumber],1 |
30 | je @@SecondByte |
30 | je @@SecondByte |
31 | cmp [MouseByteNumber],2 |
31 | cmp [MouseByteNumber],2 |
32 | je @@ThirdByte |
32 | je @@ThirdByte |
33 | jmp @@Error |
33 | jmp @@Error |
34 | 34 | ||
35 | ; Ñîõðàíèòü ïåðâûé áàéò äàííûõ |
35 | ; Ñîõðàíèòü ïåðâûé áàéò äàííûõ |
36 | @@FirstByte: |
36 | @@FirstByte: |
37 | test AL,1000000b ;Ïåðâûé áàéò ïîñûëêè? |
37 | test AL,1000000b ;Ïåðâûé áàéò ïîñûëêè? |
38 | jz @@Error |
38 | jz @@Error |
39 | mov [FirstByte],AL |
39 | mov [FirstByte],AL |
40 | inc [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê |
40 | inc [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê |
41 | jmp @@EndMouseInterrupt |
41 | jmp @@EndMouseInterrupt |
42 | ; Ñîõðàíèòü âòîðîé áàéò äàííûõ |
42 | ; Ñîõðàíèòü âòîðîé áàéò äàííûõ |
43 | @@SecondByte: |
43 | @@SecondByte: |
44 | test AL,1000000b |
44 | test AL,1000000b |
45 | jnz @@Error |
45 | jnz @@Error |
46 | mov [SecondByte],AL |
46 | mov [SecondByte],AL |
47 | inc [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê |
47 | inc [MouseByteNumber] ;óâåëè÷èòü ñ÷åò÷èê |
48 | jmp @@EndMouseInterrupt |
48 | jmp @@EndMouseInterrupt |
49 | ; Ñîõðàíèòü òðåòèé áàéò äàííûõ |
49 | ; Ñîõðàíèòü òðåòèé áàéò äàííûõ |
50 | @@ThirdByte: |
50 | @@ThirdByte: |
51 | test AL,1000000b |
51 | test AL,1000000b |
52 | jnz @@Error |
52 | jnz @@Error |
53 | mov [ThirdByte],AL ;óâåëè÷èòü ñ÷åò÷èê |
53 | mov [ThirdByte],AL ;óâåëè÷èòü ñ÷åò÷èê |
54 | mov [MouseByteNumber],0 |
54 | mov [MouseByteNumber],0 |
55 | ; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ). |
55 | ; (Ïàêåò äàííûõ îò ìûøè ïðèíÿò ïîëíîñòüþ). |
56 | ; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè |
56 | ; Çàïèñàòü íîâîå çíà÷åíèå ñîñòîÿíèÿ êíîïîê ìûøè |
57 | mov al,[FirstByte] ;[0xfb01] |
57 | mov al,[FirstByte] ;[0xfb01] |
58 | mov ah,al |
58 | mov ah,al |
59 | shr al,3 |
59 | shr al,3 |
60 | and al,2 |
60 | and al,2 |
61 | shr ah,5 |
61 | shr ah,5 |
62 | and ah,1 |
62 | and ah,1 |
63 | add al,ah |
63 | add al,ah |
64 | mov [0xfb40],al |
64 | mov [0xfb40],al |
65 | mov [mouse_active],1 |
65 | mov [mouse_active],1 |
66 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X |
66 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî X ê êîîðäèíàòå X |
67 | mov AL,[FirstByte] |
67 | mov AL,[FirstByte] |
68 | shl AL,6 |
68 | shl AL,6 |
69 | or AL,[SecondByte] |
69 | or AL,[SecondByte] |
70 | cbw |
70 | cbw |
71 | shl ax,1 |
71 | call mouse_acceleration_com1 |
72 | add AX,[0xFB0A] ;[XCoordinate] |
72 | add AX,[0xFB0A] ;[XCoordinate] |
73 | ; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè |
73 | ; Êóðñîð íå äîëæåí âûõîäèòü çà ëåâóþ èëè |
74 | ; ïðàâóþ ãðàíèöó ýêðàíà |
74 | ; ïðàâóþ ãðàíèöó ýêðàíà |
75 | js @@X1 |
75 | js @@X1 |
76 | cmp AX,[0xFE00] ;ScreenLength |
76 | cmp AX,[0xFE00] ;ScreenLength |
77 | jb @@X2 |
77 | jb @@X2 |
78 | ; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå |
78 | ; Óñòàíîâèòü êîîðäèíàòó X ïî ïðàâîé ãðàíèöå |
79 | mov AX,[0xFE00] ;ScreenLength-1 |
79 | mov AX,[0xFE00] ;ScreenLength-1 |
80 | dec ax |
80 | dec ax |
81 | jmp @@X2 |
81 | jmp @@X2 |
82 | @@X1: |
82 | @@X1: |
83 | ; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå |
83 | ; Óñòàíîâèòü êîîðäèíàòó X ïî ëåâîé ãðàíèöå |
84 | xor AX,AX |
84 | xor AX,AX |
85 | @@X2: |
85 | @@X2: |
86 | mov [0xFB0A],AX ;[XCoordinate] |
86 | mov [0xFB0A],AX ;[XCoordinate] |
87 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y |
87 | ; Ïðèáàâèòü ïåðåìåùåíèå ïî Y ê êîîðäèíàòå Y |
88 | mov AL,[FirstByte] |
88 | mov AL,[FirstByte] |
89 | and AL,00001100b |
89 | and AL,00001100b |
90 | shl AL,4 |
90 | shl AL,4 |
91 | or AL,[ThirdByte] |
91 | or AL,[ThirdByte] |
92 | cbw |
92 | cbw |
93 | shl ax,1 |
93 | call mouse_acceleration_com1 |
94 | add AX,[0xFB0C] ;[YCoordinate] |
94 | add AX,[0xFB0C] ;[YCoordinate] |
95 | ; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè |
95 | ; Êóðñîð íå äîëæåí âûõîäèòü çà âåðõíþþ èëè |
96 | ; íèæíþþ ãðàíèöó ýêðàíà |
96 | ; íèæíþþ ãðàíèöó ýêðàíà |
97 | js @@Y1 |
97 | js @@Y1 |
98 | cmp AX,[0xFE04] ;ScreenHeigth |
98 | cmp AX,[0xFE04] ;ScreenHeigth |
99 | jb @@Y2 |
99 | jb @@Y2 |
100 | ; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå |
100 | ; Óñòàíîâèòü êîîðäèíàòó X ïî íèæíåé ãðàíèöå |
101 | mov AX,[0xFE04] ;ScreenHeigth-1 |
101 | mov AX,[0xFE04] ;ScreenHeigth-1 |
102 | dec ax |
102 | dec ax |
103 | jmp @@Y2 |
103 | jmp @@Y2 |
104 | @@Y1: |
104 | @@Y1: |
105 | ; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå |
105 | ; Óñòàíîâèòü êîîðäèíàòó X ïî âåðõíåé ãðàíèöå |
106 | xor AX,AX |
106 | xor AX,AX |
107 | @@Y2: |
107 | @@Y2: |
108 | mov [0xFB0C],AX ;[YCoordinate] |
108 | mov [0xFB0C],AX ;[YCoordinate] |
- | 109 | mov eax,[timer_ticks] |
|
- | 110 | mov [timer_ticks_com],eax |
|
109 | jmp @@EndMouseInterrupt |
111 | jmp @@EndMouseInterrupt |
110 | 112 | ||
111 | @@Error: |
113 | @@Error: |
112 | ; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò |
114 | ; Ïðîèçîøåë ñáîé â ïîðÿäêå ïåðåäà÷è èíôîðìàöèè îò |
113 | ; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ |
115 | ; ìûøè, îáíóëèòü ñ÷åò÷èê áàéòîâ ïàêåòà äàííûõ |
114 | mov [MouseByteNumber],0 |
116 | mov [MouseByteNumber],0 |
115 | @@EndMouseInterrupt: |
117 | @@EndMouseInterrupt: |
116 | call ready_for_next_irq |
118 | call ready_for_next_irq |
117 | ret |
119 | ret |
- | 120 | ||
- | 121 | mouse_acceleration_com1: |
|
- | 122 | push eax |
|
- | 123 | mov eax,[timer_ticks] |
|
- | 124 | sub eax,[timer_ticks_com] |
|
- | 125 | cmp eax,[mouse_delay] |
|
- | 126 | pop eax |
|
- | 127 | ja @f |
|
- | 128 | shl ax,1 |
|
- | 129 | @@: |
|
- | 130 | ret |