diff options
Diffstat (limited to 'include/04.idt')
| -rw-r--r-- | include/04.idt/idt00.c | 3 | ||||
| -rw-r--r-- | include/04.idt/idt01.c | 7 | ||||
| -rw-r--r-- | include/04.idt/idt02.c | 8 | ||||
| -rw-r--r-- | include/04.idt/idt03.c | 5 | ||||
| -rw-r--r-- | include/04.idt/idt04.c | 4 | ||||
| -rw-r--r-- | include/04.idt/idt05.c | 8 | ||||
| -rw-r--r-- | include/04.idt/idt06.c | 4 |
7 files changed, 39 insertions, 0 deletions
diff --git a/include/04.idt/idt00.c b/include/04.idt/idt00.c new file mode 100644 index 0000000..7c174c9 --- /dev/null +++ b/include/04.idt/idt00.c @@ -0,0 +1,3 @@ +#include<types.h> +#include<irq.h> +#include<asm.h> diff --git a/include/04.idt/idt01.c b/include/04.idt/idt01.c new file mode 100644 index 0000000..c2b91e5 --- /dev/null +++ b/include/04.idt/idt01.c @@ -0,0 +1,7 @@ +#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 diff --git a/include/04.idt/idt02.c b/include/04.idt/idt02.c new file mode 100644 index 0000000..dcab25c --- /dev/null +++ b/include/04.idt/idt02.c @@ -0,0 +1,8 @@ +struct idt_entry +{ + uint16_t offset1; + uint16_t selector; + uint8_t zero; + uint8_t type_attr; + uint16_t offset2; +} __attribute__((packed)); diff --git a/include/04.idt/idt03.c b/include/04.idt/idt03.c new file mode 100644 index 0000000..fe1bff5 --- /dev/null +++ b/include/04.idt/idt03.c @@ -0,0 +1,5 @@ +struct idt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); diff --git a/include/04.idt/idt04.c b/include/04.idt/idt04.c new file mode 100644 index 0000000..329ce75 --- /dev/null +++ b/include/04.idt/idt04.c @@ -0,0 +1,4 @@ +extern void load_idt(struct idt_pointer *idtp); +extern void keyboard_irq(); +struct idt_entry idt[256]; +struct idt_pointer idtp; diff --git a/include/04.idt/idt05.c b/include/04.idt/idt05.c new file mode 100644 index 0000000..d11c19e --- /dev/null +++ b/include/04.idt/idt05.c @@ -0,0 +1,8 @@ +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; +} diff --git a/include/04.idt/idt06.c b/include/04.idt/idt06.c new file mode 100644 index 0000000..409dd15 --- /dev/null +++ b/include/04.idt/idt06.c @@ -0,0 +1,4 @@ +void add_idt_entry(size_t num,uint32_t offset) +{ + init_idt_entry(num,offset,KERNEL_CODE,INTERRUPT_GATE_32); +} |
