//+---------------------------------------------------------------------------- // // File: interrupts.h // // Module: // // Synopsis: // // Created: sgasch 6 Jul 2003 // //+---------------------------------------------------------------------------- #ifndef _INTERRUPTS_H_ #define _INTERRUPTS_H_ #define NUM_IDT_ENTRIES (256) // Exceptions range from 0x00..0x11 #define FIRST_EXCEPTION 0x00 #define LAST_EXCEPTION 0x11 #define NUM_EXCEPTIONS 18 // External IRQs range from 0x30..0x3F #define FIRST_EXTERNAL_INT 0x30 #define LAST_EXTERNAL_INT 0x3F #define IRQ0 0x30 #define IRQ1 0x31 #define IRQ2 0x39 #define IRQ3 0x33 #define IRQ4 0x34 #define IRQ5 0x35 #define IRQ6 0x36 #define IRQ7 0x37 #define IRQ8 0x38 #define IRQ9 0x39 #define IRQ10 0x3A #define IRQ11 0x3B #define IRQ12 0x3C #define IRQ13 0x3D #define IRQ14 0x3E #define IRQ15 0x3F #define NUM_EXTERNAL_INTS 16 typedef struct _INTERRUPT_GATE { USHORT offsetLow; USHORT segmentSelector; USHORT reserved : 5; USHORT signature : 8; USHORT dpl : 2; USHORT present : 1; USHORT offsetHigh; } INTERRUPT_GATE; typedef union _IDT_ENTRY { INTERRUPT_GATE i; // In theory we could have members for trap gates // and task gates if we wanted. } IDT_ENTRY; // // Defined in intsupport.asm // extern void HalInterruptInitializePICs(void); extern void HalInterruptLoadIDTR(void *uLimitAndBase); extern void HalIoDelay(void); extern BYTE HalInterruptHandlerPreamble; extern BYTE HalInterruptHandlerPreambleBefore; extern BYTE HalInterruptHandlerPreambleAfter; // // Defined in interrupts.c // extern void HalDisableInterrupts(void); extern void HalEnableInterrupts(void); // // Defined in keyboard.c // extern void HalKeyboardInt(INTERRUPT_STATE *is); // // Defined in timer.c // extern void HalTimerInt(INTERRUPT_STATE *is); #endif