initial commit
[dos_auplay] / src / intr.h
1 #ifndef INTR_H_\r
2 #define INTR_H_\r
3 \r
4 #define INTERRUPT       __interrupt __far\r
5 \r
6 #define IRQ_TO_INTR(x)  ((x) + 8)\r
7 \r
8 /* PIC command and data ports */\r
9 #define PIC1_CMD        0x20\r
10 #define PIC1_DATA       0x21\r
11 #define PIC2_CMD        0xa0\r
12 #define PIC2_DATA       0xa1\r
13 /* PIC operation command word 2 bits */\r
14 #define OCW2_EOI        (1 << 5)\r
15 \r
16 unsigned char get_irq_mask(int pic);\r
17 #pragma aux get_irq_mask = \\r
18                 "cmp bx, 0" \\r
19                 "jnz getpic2" \\r
20                 "in al, 0x21" \\r
21                 "jmp getend" \\r
22                 "getpic2:" \\r
23                 "in al, 0xa1" \\r
24                 "getend:" \\r
25                 value[al] parm[ebx];\r
26 \r
27 void mask_irq(int irq);\r
28 #pragma aux mask_irq = \\r
29                 "mov dx, 0x21" \\r
30                 "cmp ax, 8" \\r
31                 "jb skip_mask_pic2" \\r
32                 "mov dx, 0xa1" \\r
33                 "sub ax, 8" \\r
34                 "skip_mask_pic2:" \\r
35                 "mov cl, al" \\r
36                 "mov ah, 1" \\r
37                 "shl ah, cl" \\r
38                 "in al, dx" \\r
39                 "or al, ah" \\r
40                 "out dx, al" \\r
41                 parm[eax] modify[cl dx];\r
42 \r
43 void unmask_irq(int irq);\r
44 #pragma aux unmask_irq = \\r
45                 "mov dx, 0x21" \\r
46                 "cmp ax, 8" \\r
47                 "jb skip_unmask_pic2" \\r
48                 "mov dx, 0xa1" \\r
49                 "sub ax, 8" \\r
50                 "skip_unmask_pic2:" \\r
51                 "mov cl, al" \\r
52                 "mov ah, 1" \\r
53                 "shl ah, cl" \\r
54                 "not ah" \\r
55                 "in al, dx" \\r
56                 "and al, ah" \\r
57                 "out dx, al" \\r
58                 parm[eax] modify[cl dx];\r
59 \r
60 #endif  /* INTR_H_ */\r