diff options
Diffstat (limited to 'include/03.gdt')
| -rw-r--r-- | include/03.gdt/deo1 (renamed from include/03.gdt/gdt00.c) | 0 | ||||
| -rw-r--r-- | include/03.gdt/deo2 (renamed from include/03.gdt/gdt01.c) | 0 | ||||
| -rw-r--r-- | include/03.gdt/deo3 (renamed from include/03.gdt/gdt02.c) | 0 | ||||
| -rw-r--r-- | include/03.gdt/deo4 | 1 | ||||
| -rw-r--r-- | include/03.gdt/deo5 (renamed from include/03.gdt/gdt03.c) | 1 | ||||
| -rw-r--r-- | include/03.gdt/deo6 (renamed from include/03.gdt/gdt04.c) | 0 | ||||
| -rw-r--r-- | include/03.gdt/deo7 | 4 | ||||
| -rw-r--r-- | include/03.gdt/deo8 | 5 | ||||
| -rw-r--r-- | include/03.gdt/deo9 | 2 | ||||
| -rw-r--r-- | include/03.gdt/gdt.c | 46 | ||||
| -rw-r--r-- | include/03.gdt/gdt05.c | 13 |
11 files changed, 58 insertions, 14 deletions
diff --git a/include/03.gdt/gdt00.c b/include/03.gdt/deo1 index c45e28b..c45e28b 100644 --- a/include/03.gdt/gdt00.c +++ b/include/03.gdt/deo1 diff --git a/include/03.gdt/gdt01.c b/include/03.gdt/deo2 index cbc5e1d..cbc5e1d 100644 --- a/include/03.gdt/gdt01.c +++ b/include/03.gdt/deo2 diff --git a/include/03.gdt/gdt02.c b/include/03.gdt/deo3 index e708661..e708661 100644 --- a/include/03.gdt/gdt02.c +++ b/include/03.gdt/deo3 diff --git a/include/03.gdt/deo4 b/include/03.gdt/deo4 new file mode 100644 index 0000000..1abf809 --- /dev/null +++ b/include/03.gdt/deo4 @@ -0,0 +1 @@ +extern void load_gdt(struct gdt_pointer *gdtp); diff --git a/include/03.gdt/gdt03.c b/include/03.gdt/deo5 index 94c8cd3..ba7c6e2 100644 --- a/include/03.gdt/gdt03.c +++ b/include/03.gdt/deo5 @@ -1,3 +1,2 @@ -extern void load_gdt(struct gdt_pointer *gdtp); struct gdt_entry gdt[5]; struct gdt_pointer gdtp; diff --git a/include/03.gdt/gdt04.c b/include/03.gdt/deo6 index 8d6a1f0..8d6a1f0 100644 --- a/include/03.gdt/gdt04.c +++ b/include/03.gdt/deo6 diff --git a/include/03.gdt/deo7 b/include/03.gdt/deo7 new file mode 100644 index 0000000..d69d009 --- /dev/null +++ b/include/03.gdt/deo7 @@ -0,0 +1,4 @@ +void init_gdt_table() +{ + gdtp.size=sizeof(gdt)-1; + gdtp.offset=(uint32_t)&gdt; diff --git a/include/03.gdt/deo8 b/include/03.gdt/deo8 new file mode 100644 index 0000000..a122d84 --- /dev/null +++ b/include/03.gdt/deo8 @@ -0,0 +1,5 @@ + init_gdt_entry(0,0,0,0,0); // null segment + init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment + init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment + init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment + init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment diff --git a/include/03.gdt/deo9 b/include/03.gdt/deo9 new file mode 100644 index 0000000..89736a5 --- /dev/null +++ b/include/03.gdt/deo9 @@ -0,0 +1,2 @@ + load_gdt(&gdtp); +} diff --git a/include/03.gdt/gdt.c b/include/03.gdt/gdt.c new file mode 100644 index 0000000..e3d2b4c --- /dev/null +++ b/include/03.gdt/gdt.c @@ -0,0 +1,46 @@ +#include<types.h> + +struct gdt_entry +{ + uint16_t limit; + uint16_t base1; + uint8_t base2; + uint8_t access; + uint8_t limit_flags; + uint8_t base3; +} __attribute__((packed)); + +struct gdt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); + +extern void load_gdt(struct gdt_pointer *gdtp); + +struct gdt_entry gdt[5]; +struct gdt_pointer gdtp; + +void init_gdt_entry(size_t num, uint32_t limit, uint32_t base, uint8_t access, uint8_t limit_flags) +{ + gdt[num].limit=limit; + gdt[num].base1=(base & 0xffff); + gdt[num].base2=(base & 0xff0000) >> 16; + gdt[num].access=access; + gdt[num].limit_flags=limit_flags; + gdt[num].base3=(base & 0xff000000) >> 24; +} + +void init_gdt_table() +{ + gdtp.size=sizeof(gdt)-1; + gdtp.offset=(uint32_t)&gdt; + + init_gdt_entry(0,0,0,0,0); // null segment + init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment + init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment + init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment + init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment + + load_gdt(&gdtp); +} diff --git a/include/03.gdt/gdt05.c b/include/03.gdt/gdt05.c deleted file mode 100644 index d525a13..0000000 --- a/include/03.gdt/gdt05.c +++ /dev/null @@ -1,13 +0,0 @@ -void init_gdt_table() -{ - gdtp.size=sizeof(gdt)-1; - gdtp.offset=(uint32_t)&gdt; - - init_gdt_entry(0,0,0,0,0); // null segment - init_gdt_entry(1,0xffffffff,0,0b10011010,0b11001111); // code segment - init_gdt_entry(2,0xffffffff,0,0b10010010,0b11001111); // data segment - init_gdt_entry(3,0xffffffff,0,0b11111010,0b11001111); // user mode code segment - init_gdt_entry(4,0xffffffff,0,0b11110010,0b11001111); // user mode data segment - - load_gdt(&gdtp); -} |
