All pastes #946812 Raw Edit

pikhq

public c v1 · immutable
·published 2008-03-17 23:26 UTC
rendered paste body
#include "idt.h"#include "kstdio.h"idt_t IDT[256];extern void asm_load_idt(idt_pointer_t *);extern void inthandler_default(void);extern int *isr;void idt_load_gate(int num, void *pointer, short gdt_selector, unsigned char attrib){        if(num == 0) {                kputdec(num);                kputhex((int)pointer);                kputhex((int)gdt_selector);                kputhex((int)attrib);                kputc('\n');        }        IDT[num].pointer_low = (short)pointer & 0xFFFF;        IDT[num].pointer_high = ((int)pointer >> 16) & 0xFFFF;        IDT[num].gdt_selector = gdt_selector;        IDT[num].attrib = attrib;}void idt_init(void){        for(int i = 0; i <= 18; i++) {                idt_load_gate(i, isr[i], 0x08, IDT_ATTRIB_PRESENT | IDT_ATTRIB_KERNELMODE | IDT_GATE_INTERRUPT);                kputhex(isr[i]);                kputc('\n');        }        for(int i = 19; i <= 255; i++) {                idt_load_gate(i, inthandler_default, 0x08, IDT_ATTRIB_PRESENT | IDT_ATTRIB_KERNELMODE | IDT_GATE_INTERRUPT);        }        idt_pointer_t idt_point;        idt_point.size = sizeof(IDT) - 1;        idt_point.pointer = &IDT;        asm_load_idt(&idt_point);}void int_handler(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax, int interrupt, int error){        if((interrupt == 255) && (error == 255))                kputs("Unsupported interrupt.\n");        kputs("Recieved interrupt #");        kputdec(interrupt);        kputs(", with error #");        kputdec(error);        kputc('\n');}