+#ifndef INTR_H_\r
+#define INTR_H_\r
+\r
+#define INTERRUPT __interrupt __far\r
+\r
+#define IRQ_TO_INTR(x) ((x) + 8)\r
+\r
+/* PIC command and data ports */\r
+#define PIC1_CMD 0x20\r
+#define PIC1_DATA 0x21\r
+#define PIC2_CMD 0xa0\r
+#define PIC2_DATA 0xa1\r
+/* PIC operation command word 2 bits */\r
+#define OCW2_EOI (1 << 5)\r
+\r
+unsigned char get_irq_mask(int pic);\r
+#pragma aux get_irq_mask = \\r
+ "cmp bx, 0" \\r
+ "jnz getpic2" \\r
+ "in al, 0x21" \\r
+ "jmp getend" \\r
+ "getpic2:" \\r
+ "in al, 0xa1" \\r
+ "getend:" \\r
+ value[al] parm[ebx];\r
+\r
+void mask_irq(int irq);\r
+#pragma aux mask_irq = \\r
+ "mov dx, 0x21" \\r
+ "cmp ax, 8" \\r
+ "jb skip_mask_pic2" \\r
+ "mov dx, 0xa1" \\r
+ "sub ax, 8" \\r
+ "skip_mask_pic2:" \\r
+ "mov cl, al" \\r
+ "mov ah, 1" \\r
+ "shl ah, cl" \\r
+ "in al, dx" \\r
+ "or al, ah" \\r
+ "out dx, al" \\r
+ parm[eax] modify[cl dx];\r
+\r
+void unmask_irq(int irq);\r
+#pragma aux unmask_irq = \\r
+ "mov dx, 0x21" \\r
+ "cmp ax, 8" \\r
+ "jb skip_unmask_pic2" \\r
+ "mov dx, 0xa1" \\r
+ "sub ax, 8" \\r
+ "skip_unmask_pic2:" \\r
+ "mov cl, al" \\r
+ "mov ah, 1" \\r
+ "shl ah, cl" \\r
+ "not ah" \\r
+ "in al, dx" \\r
+ "and al, ah" \\r
+ "out dx, al" \\r
+ parm[eax] modify[cl dx];\r
+\r
+#endif /* INTR_H_ */\r