diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2022-01-31 11:16:38 +0100 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2022-01-31 14:03:24 +0100 |
| commit | 03035c98b4ba3297b837e96080e78e0aac1e86db (patch) | |
| tree | 55b5f69f83bc8b77ec229062f702c0a4f960e87f /include/04.idt/idt.c | |
| parent | 11e780fd0f7bed3594de9a7170fadc88c4d48be8 (diff) | |
Promene
Diffstat (limited to 'include/04.idt/idt.c')
| -rw-r--r-- | include/04.idt/idt.c | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/include/04.idt/idt.c b/include/04.idt/idt.c deleted file mode 100644 index 843c9da..0000000 --- a/include/04.idt/idt.c +++ /dev/null @@ -1,108 +0,0 @@ -#include<types.h> -#include<irq.h> -#include<asm.h> - -#define INTERRUPT_GATE_32 0x8E - -#define KERNEL_CODE 0x08 -#define KERNEL_DATA 0x10 - -#define PIC1_COMMAND_PORT 0x20 -#define PIC1_DATA_PORT 0x21 -#define PIC2_COMMAND_PORT 0xA0 -#define PIC2_DATA_PORT 0xA1 - -struct idt_entry -{ - uint16_t offset1; - uint16_t selector; - uint8_t zero; - uint8_t type_attr; - uint16_t offset2; -} __attribute__((packed)); - -struct idt_pointer -{ - uint16_t size; - uint32_t offset; -} __attribute__((packed)); - - -extern void load_idt(struct idt_pointer *idtp); -extern void keyboard_irq(); - -struct idt_entry idt[256]; -struct idt_pointer idtp; - -void init_idt_entry(size_t num, uint32_t offset, uint16_t selector, uint8_t type_attr) -{ - idt[num].offset1=(offset & 0xffff); - idt[num].selector=selector; - idt[num].zero=0; - idt[num].type_attr=type_attr; - idt[num].offset2=(offset & 0xffff0000)>>16; -} - -void add_idt_entry(size_t num,uint32_t offset) -{ - init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32); -} - -void init_pic() -{ - ioport_out(PIC1_COMMAND_PORT, 0x11); - ioport_out(PIC2_COMMAND_PORT, 0x11); - ioport_out(PIC1_DATA_PORT, 0x20); - ioport_out(PIC2_DATA_PORT, 0x28); - ioport_out(PIC1_DATA_PORT, 0x04); - ioport_out(PIC2_DATA_PORT, 0x02); - ioport_out(PIC1_DATA_PORT, 0x01); - ioport_out(PIC2_DATA_PORT, 0x01); - ioport_out(PIC1_DATA_PORT, 0xff); - ioport_out(PIC2_DATA_PORT, 0xff); - ioport_out(PIC1_DATA_PORT, 0xFC); -} - -void init_idt_table() -{ - init_pic(); - add_idt_entry(0,(uint32_t)irq0); - add_idt_entry(1,(uint32_t)irq1); - add_idt_entry(2,(uint32_t)irq2); - add_idt_entry(3,(uint32_t)irq3); - add_idt_entry(4,(uint32_t)irq4); - add_idt_entry(5,(uint32_t)irq5); - add_idt_entry(6,(uint32_t)irq6); - add_idt_entry(7,(uint32_t)irq7); - add_idt_entry(8,(uint32_t)irq8); - add_idt_entry(9,(uint32_t)irq9); - add_idt_entry(10,(uint32_t)irq10); - add_idt_entry(11,(uint32_t)irq11); - add_idt_entry(12,(uint32_t)irq12); - add_idt_entry(13,(uint32_t)irq13); - add_idt_entry(14,(uint32_t)irq14); - add_idt_entry(15,(uint32_t)irq15); - add_idt_entry(16,(uint32_t)irq16); - add_idt_entry(17,(uint32_t)irq17); - add_idt_entry(18,(uint32_t)irq18); - add_idt_entry(19,(uint32_t)irq19); - add_idt_entry(20,(uint32_t)irq20); - add_idt_entry(21,(uint32_t)irq21); - add_idt_entry(22,(uint32_t)irq22); - add_idt_entry(23,(uint32_t)irq23); - add_idt_entry(24,(uint32_t)irq24); - add_idt_entry(25,(uint32_t)irq25); - add_idt_entry(26,(uint32_t)irq26); - add_idt_entry(27,(uint32_t)irq27); - add_idt_entry(28,(uint32_t)irq28); - add_idt_entry(29,(uint32_t)irq29); - add_idt_entry(30,(uint32_t)irq30); - add_idt_entry(31,(uint32_t)irq31); - add_idt_entry(32,(uint32_t)timer_irq); - add_idt_entry(33,(uint32_t)keyboard_irq); - - idtp.size=sizeof(struct idt_entry)*256-1; - idtp.offset=(uint32_t)&idt; - - load_idt(&idtp); -} |
