Rev 2118 | Rev 2231 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2118 | Rev 2167 | ||
---|---|---|---|
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
7 | 7 | ||
8 | align 4 |
8 | align 4 |
9 | pic_delay: |
- | |
10 | - | ||
11 | jmp pdl1 |
- | |
12 | pdl1: ret |
- | |
13 | - | ||
14 | align 4 |
- | |
15 | rerouteirqs: |
9 | rerouteirqs: |
16 | 10 | ||
17 | cli |
11 | cli |
18 | - | ||
19 | mov al,0x11 ; icw4, edge triggered |
12 | mov al,0x11 ; icw4, edge triggered |
20 | out 0x20,al |
13 | out 0x20,al |
21 | call pic_delay |
- | |
22 | out 0xA0,al |
14 | out 0xA0,al |
23 | call pic_delay |
- | |
24 | 15 | ||
25 | mov al,0x20 ; generate 0x20 + |
16 | mov al,0x20 ; generate 0x20 + |
26 | out 0x21,al |
17 | out 0x21,al |
27 | call pic_delay |
- | |
28 | mov al,0x28 ; generate 0x28 + |
18 | mov al,0x28 ; generate 0x28 + |
29 | out 0xA1,al |
19 | out 0xA1,al |
30 | call pic_delay |
- | |
31 | 20 | ||
32 | mov al,0x04 ; slave at irq2 |
21 | mov al,0x04 ; slave at irq2 |
33 | out 0x21,al |
22 | out 0x21,al |
34 | call pic_delay |
- | |
35 | mov al,0x02 ; at irq9 |
23 | mov al,0x02 ; at irq9 |
36 | out 0xA1,al |
24 | out 0xA1,al |
37 | call pic_delay |
- | |
38 | 25 | ||
39 | mov al,0x01 ; 8086 mode |
26 | mov al,0x01 ; 8086 mode |
40 | out 0x21,al |
27 | out 0x21,al |
41 | call pic_delay |
- | |
42 | out 0xA1,al |
28 | out 0xA1,al |
43 | call pic_delay |
- | |
44 | 29 | ||
45 | mov al,255 ; mask all irq's |
30 | mov al,255 ; mask all irq's |
46 | out 0xA1,al |
31 | out 0xA1,al |
47 | call pic_delay |
- | |
48 | out 0x21,al |
32 | out 0x21,al |
49 | call pic_delay |
- | |
50 | - | ||
51 | mov ecx,0x1000 |
- | |
52 | cld |
- | |
53 | picl1: call pic_delay |
- | |
54 | loop picl1 |
- | |
55 | 33 | ||
56 | mov al,255 ; mask all irq's |
34 | mov al,255 ; mask all irq's |
57 | out 0xA1,al |
35 | out 0xA1,al |
58 | call pic_delay |
- | |
59 | out 0x21,al |
36 | out 0x21,al |
60 | call pic_delay |
- | |
61 | - | ||
62 | ret |
37 | ret |
63 | 38 | ||
64 | 39 | ||
65 | align 4 |
40 | align 4 |
66 | ;proc enable_irq stdcall, irq_line:dword |
41 | ;proc enable_irq stdcall, irq_line:dword |
67 | enable_irq: ; FIXME make fastcall |
42 | enable_irq: ; FIXME make fastcall |
68 | mov ebx, [esp+4] ;irq_line |
43 | mov ebx, [esp+4] ;irq_line |
69 | mov edx, 0x21 |
44 | mov edx, 0x21 |
70 | cmp ebx, 8 |
45 | cmp ebx, 8 |
71 | jb @F |
46 | jb @F |
72 | mov edx, 0xA1 |
47 | mov edx, 0xA1 |
73 | sub ebx,8 |
48 | sub ebx,8 |
74 | @@: |
49 | @@: |
75 | in al,dx |
50 | in al,dx |
76 | btr eax, ebx |
51 | btr eax, ebx |
77 | out dx, al |
52 | out dx, al |
78 | ret 4 |
53 | ret 4 |
79 | 54 | ||
80 | 55 | ||
81 | align 4 |
56 | align 4 |
82 | ;proc irq_eoi fastcall, irq_line:dword |
57 | ;proc irq_eoi fastcall, irq_line:dword |
83 | irq_eoi: |
58 | irq_eoi: |
84 | cmp cl, 8 |
59 | cmp cl, 8 |
85 | mov al, 0x20 |
60 | mov al, 0x20 |
86 | jb @f |
61 | jb @f |
87 | out 0xa0, al |
62 | out 0xa0, al |
88 | @@: |
63 | @@: |
89 | out 0x20, al |
64 | out 0x20, al |
90 | ret |
65 | ret |