39 lines
680 B
C
39 lines
680 B
C
#ifndef INTERRUPT
|
|
#define INTERRUPT
|
|
|
|
extern uint8_t isr_base[];
|
|
|
|
typedef struct {
|
|
uint16_t lo;
|
|
uint16_t sel;
|
|
uint8_t reserved;
|
|
uint8_t flags;
|
|
uint16_t hi;
|
|
} __attribute__((packed)) idt_gate;
|
|
|
|
typedef struct {
|
|
uint16_t limit;
|
|
idt_gate* base;
|
|
} __attribute__((packed)) idtrc;
|
|
|
|
typedef struct {
|
|
uint32_t ds;
|
|
uint32_t edi, esi, ebp, uesp, ebx, edx, ecx, eax;
|
|
uint32_t ino, err;
|
|
uint32_t eip, cs, eflags, esp, ss;
|
|
} registers;
|
|
|
|
extern idtrc idtr;
|
|
extern idt_gate idt[256];
|
|
|
|
typedef void (*isr)(registers*);
|
|
void regint(uint8_t ino, isr i);
|
|
void set_idt(uint8_t n, uint32_t i);
|
|
void lidt();
|
|
void isr_init();
|
|
void isr_handler(registers* r);
|
|
void noint(registers* r);
|
|
|
|
|
|
#endif
|