com32/include/interrupt.h

39 lines
680 B
C
Raw Normal View History

2024-01-10 11:13:45 -08:00
#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