Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. void _load_interrupt_descriptor_table() {
  2. uint32_t idt_size;
  3.  
  4. struct {
  5. uint16_t number;
  6. uint32_t base;
  7. } __attribute__((packed)) _idt_pointer;
  8.  
  9. idt_size = IDT_number * sizeof(struct interrupt_descriptor_table);
  10.  
  11. memset(&_idt, 0, idt_size);
  12.  
  13. _idt_pointer.number = idt_size - 1;
  14. _idt_pointer.base = (uint32_t)&_idt;
  15.  
  16. __asm__ __volatile__(
  17. "lidt %0"
  18. :
  19. : "m" (_idt_pointer)
  20. );
  21. }
  22.  
  23. set_interrupt_handler(0x20, (uint32_t)&timer_int_handler, 0x08, 0x8E);
  24.  
  25. struct interrupt_frame {
  26. uint16_t ip;
  27. uint16_t cs;
  28. uint16_t flags;
  29. uint16_t sp;
  30. uint16_t ss;
  31. };
  32.  
  33. __attribute__((interrupt)) void timer_int_handler(struct interrupt_frame* frame) {
  34. driver_tty_output_string("Timer interrupt handler!n");
  35. }
  36.  
  37. cc -m32 -std=c89 -nostdlib -nostdinc -fno-builtin -fno-stack-protector -g -Wall -pedantic -I include/ -I include/libc/ -c -o kernel/interrupts.o kernel/interrupts.c
  38. kernel/interrupts.c:93:58: warning: ‘interrupt’ attribute directive ignored [-Wattributes]
  39. __attribute__((interrupt)) void timer_int_handler(struct interrupt_frame* frame) {
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement