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/03.gdt | |
| parent | 11e780fd0f7bed3594de9a7170fadc88c4d48be8 (diff) | |
Promene
Diffstat (limited to 'include/03.gdt')
| -rw-r--r-- | include/03.gdt/deo6 | 9 | ||||
| -rw-r--r-- | include/03.gdt/deo8 | 5 | ||||
| -rw-r--r-- | include/03.gdt/gdt.c | 36 | ||||
| -rw-r--r-- | include/03.gdt/gdt.h | 26 | ||||
| -rw-r--r-- | include/03.gdt/gdt1.c | 2 | ||||
| -rw-r--r-- | include/03.gdt/gdt1.h | 2 | ||||
| -rw-r--r-- | include/03.gdt/gdt2.c (renamed from include/03.gdt/deo4) | 0 | ||||
| -rw-r--r-- | include/03.gdt/gdt2.h (renamed from include/03.gdt/deo1) | 0 | ||||
| -rw-r--r-- | include/03.gdt/gdt3.c (renamed from include/03.gdt/deo5) | 0 | ||||
| -rw-r--r-- | include/03.gdt/gdt3.h (renamed from include/03.gdt/deo2) | 0 | ||||
| -rw-r--r-- | include/03.gdt/gdt4.c | 10 | ||||
| -rw-r--r-- | include/03.gdt/gdt4.h (renamed from include/03.gdt/deo3) | 0 | ||||
| -rw-r--r-- | include/03.gdt/gdt5.c (renamed from include/03.gdt/deo7) | 2 | ||||
| -rw-r--r-- | include/03.gdt/gdt5.h | 3 | ||||
| -rw-r--r-- | include/03.gdt/gdt6.c | 5 | ||||
| -rw-r--r-- | include/03.gdt/gdt6.h | 1 | ||||
| -rw-r--r-- | include/03.gdt/gdt7.c (renamed from include/03.gdt/deo9) | 0 |
17 files changed, 61 insertions, 40 deletions
diff --git a/include/03.gdt/deo6 b/include/03.gdt/deo6 deleted file mode 100644 index 8d6a1f0..0000000 --- a/include/03.gdt/deo6 +++ /dev/null @@ -1,9 +0,0 @@ -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; -} diff --git a/include/03.gdt/deo8 b/include/03.gdt/deo8 deleted file mode 100644 index a122d84..0000000 --- a/include/03.gdt/deo8 +++ /dev/null @@ -1,5 +0,0 @@ - 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/gdt.c b/include/03.gdt/gdt.c index e3d2b4c..76ae9dd 100644 --- a/include/03.gdt/gdt.c +++ b/include/03.gdt/gdt.c @@ -1,46 +1,32 @@ +#include<source/gdt.h> #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) +void init_gdt_entry(size_t num, uint16_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].base2=(uint8_t)((base & 0xff0000) >> 16); gdt[num].access=access; gdt[num].limit_flags=limit_flags; - gdt[num].base3=(base & 0xff000000) >> 24; + gdt[num].base3=(uint8_t)((base & 0xff000000) >> 24); } -void init_gdt_table() +void init_gdt_table(void) { 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 + init_gdt_entry(0,0,0,0,0); // null segment + init_gdt_entry(1,0xffff,0,0x9a,0xcf); // code segment + init_gdt_entry(2,0xffff,0,0x92,0xcf); // data segment + init_gdt_entry(3,0xffff,0,0xfa,0xcf); // user mode code segment + init_gdt_entry(4,0xffff,0,0xf2,0xcf); // user mode data segment load_gdt(&gdtp); } diff --git a/include/03.gdt/gdt.h b/include/03.gdt/gdt.h new file mode 100644 index 0000000..f31a982 --- /dev/null +++ b/include/03.gdt/gdt.h @@ -0,0 +1,26 @@ +#ifndef SOURCE_GDT_H +#define SOURCE_GDT_H + +#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)); + +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags); +void init_gdt_table(void); + +#endif diff --git a/include/03.gdt/gdt1.c b/include/03.gdt/gdt1.c new file mode 100644 index 0000000..dfd3835 --- /dev/null +++ b/include/03.gdt/gdt1.c @@ -0,0 +1,2 @@ +#include<source/gdt.h> +#include<types.h> diff --git a/include/03.gdt/gdt1.h b/include/03.gdt/gdt1.h new file mode 100644 index 0000000..07fcf62 --- /dev/null +++ b/include/03.gdt/gdt1.h @@ -0,0 +1,2 @@ +#ifndef SOURCE_GDT_H +#define SOURCE_GDT_H diff --git a/include/03.gdt/deo4 b/include/03.gdt/gdt2.c index 1abf809..1abf809 100644 --- a/include/03.gdt/deo4 +++ b/include/03.gdt/gdt2.c diff --git a/include/03.gdt/deo1 b/include/03.gdt/gdt2.h index c45e28b..c45e28b 100644 --- a/include/03.gdt/deo1 +++ b/include/03.gdt/gdt2.h diff --git a/include/03.gdt/deo5 b/include/03.gdt/gdt3.c index ba7c6e2..ba7c6e2 100644 --- a/include/03.gdt/deo5 +++ b/include/03.gdt/gdt3.c diff --git a/include/03.gdt/deo2 b/include/03.gdt/gdt3.h index cbc5e1d..cbc5e1d 100644 --- a/include/03.gdt/deo2 +++ b/include/03.gdt/gdt3.h diff --git a/include/03.gdt/gdt4.c b/include/03.gdt/gdt4.c new file mode 100644 index 0000000..ebff5cb --- /dev/null +++ b/include/03.gdt/gdt4.c @@ -0,0 +1,10 @@ +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags) +{ + gdt[num].limit=limit; + gdt[num].base1=(base & 0xffff); + gdt[num].base2=(uint8_t)((base & 0xff0000) >> 16); + gdt[num].access=access; + gdt[num].limit_flags=limit_flags; + gdt[num].base3=(uint8_t)((base & 0xff000000) >> 24); +} diff --git a/include/03.gdt/deo3 b/include/03.gdt/gdt4.h index e708661..e708661 100644 --- a/include/03.gdt/deo3 +++ b/include/03.gdt/gdt4.h diff --git a/include/03.gdt/deo7 b/include/03.gdt/gdt5.c index d69d009..c41ef42 100644 --- a/include/03.gdt/deo7 +++ b/include/03.gdt/gdt5.c @@ -1,4 +1,4 @@ -void init_gdt_table() +void init_gdt_table(void) { gdtp.size=sizeof(gdt)-1; gdtp.offset=(uint32_t)&gdt; diff --git a/include/03.gdt/gdt5.h b/include/03.gdt/gdt5.h new file mode 100644 index 0000000..430309c --- /dev/null +++ b/include/03.gdt/gdt5.h @@ -0,0 +1,3 @@ +void init_gdt_entry(size_t num, uint16_t limit, uint32_t base, uint8_t access, + uint8_t limit_flags); +void init_gdt_table(void); diff --git a/include/03.gdt/gdt6.c b/include/03.gdt/gdt6.c new file mode 100644 index 0000000..974a942 --- /dev/null +++ b/include/03.gdt/gdt6.c @@ -0,0 +1,5 @@ + init_gdt_entry(0,0,0,0,0); // null segment + init_gdt_entry(1,0xffff,0,0x9a,0xcf); // code segment + init_gdt_entry(2,0xffff,0,0x92,0xcf); // data segment + init_gdt_entry(3,0xffff,0,0xfa,0xcf); // user mode code segment + init_gdt_entry(4,0xffff,0,0xf2,0xcf); // user mode data segment diff --git a/include/03.gdt/gdt6.h b/include/03.gdt/gdt6.h new file mode 100644 index 0000000..69331c3 --- /dev/null +++ b/include/03.gdt/gdt6.h @@ -0,0 +1 @@ +#endif diff --git a/include/03.gdt/deo9 b/include/03.gdt/gdt7.c index 89736a5..89736a5 100644 --- a/include/03.gdt/deo9 +++ b/include/03.gdt/gdt7.c |
