/* File: PIC.h Purpose: inline functions for interrupt service routines Autor: M. Czamai, PEAK-System Technik GmbH, Darmstadt, Germany Date: 11/2000 */ #ifndef __PIC_H__ #define __PIC_H__ #define MASTER_PIC 0x20 // base adress master PIC #define SLAVE_PIC 0xA0 // base adress slave PIC #define IRQ_MASK 0x01 // offset to mask port #define EOI 0x20 // end of interrupt inline void SendEOI(BYTE bIRQ) { if (bIRQ > 7) outportb(SLAVE_PIC, EOI); outportb(MASTER_PIC, EOI); } inline void DisableIrq(BYTE bIRQ) { WORD wPort; // PIC base adress wPort = (bIRQ <= 7) ? MASTER_PIC : SLAVE_PIC; wPort += IRQ_MASK; // use mask port bIRQ = bIRQ & 0x07; // get PIC number outportb(wPort, inportb(wPort) | ( 1 << bIRQ)); // set bit = lock IRQ } inline void EnableIrq(BYTE bIRQ) { WORD wPort; wPort = (bIRQ <= 7) ? MASTER_PIC : SLAVE_PIC; wPort += IRQ_MASK; bIRQ = bIRQ & 0x07; outportb(wPort, inportb(wPort) & ~( 1 << bIRQ)); // reset bit = allow IRQ } #endif // __PIC_H__