diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2022-01-02 22:56:02 +0100 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2022-01-02 22:56:02 +0100 |
| commit | e2b78d20b80d89321d8d9df3ab8ade8407642dfc (patch) | |
| tree | 148cb3bc894b974ae91290e493046120d04987b0 /include/03.gdt | |
| parent | ead31873b971044cd3ecb7e40ae03bdb2e6f7642 (diff) | |
Adding code
Diffstat (limited to 'include/03.gdt')
| -rw-r--r-- | include/03.gdt/gdt00.c | 1 | ||||
| -rw-r--r-- | include/03.gdt/gdt01.c | 9 | ||||
| -rw-r--r-- | include/03.gdt/gdt02.c | 5 | ||||
| -rw-r--r-- | include/03.gdt/gdt03.c | 3 | ||||
| -rw-r--r-- | include/03.gdt/gdt04.c | 9 | ||||
| -rw-r--r-- | include/03.gdt/gdt05.c | 13 |
6 files changed, 40 insertions, 0 deletions
diff --git a/include/03.gdt/gdt00.c b/include/03.gdt/gdt00.c new file mode 100644 index 0000000..c45e28b --- /dev/null +++ b/include/03.gdt/gdt00.c @@ -0,0 +1 @@ +#include<types.h> diff --git a/include/03.gdt/gdt01.c b/include/03.gdt/gdt01.c new file mode 100644 index 0000000..cbc5e1d --- /dev/null +++ b/include/03.gdt/gdt01.c @@ -0,0 +1,9 @@ +struct gdt_entry +{ + uint16_t limit; + uint16_t base1; + uint8_t base2; + uint8_t access; + uint8_t limit_flags; + uint8_t base3; +} __attribute__((packed)); diff --git a/include/03.gdt/gdt02.c b/include/03.gdt/gdt02.c new file mode 100644 index 0000000..e708661 --- /dev/null +++ b/include/03.gdt/gdt02.c @@ -0,0 +1,5 @@ +struct gdt_pointer +{ + uint16_t size; + uint32_t offset; +} __attribute__((packed)); diff --git a/include/03.gdt/gdt03.c b/include/03.gdt/gdt03.c new file mode 100644 index 0000000..94c8cd3 --- /dev/null +++ b/include/03.gdt/gdt03.c @@ -0,0 +1,3 @@ +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/gdt04.c new file mode 100644 index 0000000..8d6a1f0 --- /dev/null +++ b/include/03.gdt/gdt04.c @@ -0,0 +1,9 @@ +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/gdt05.c b/include/03.gdt/gdt05.c new file mode 100644 index 0000000..d525a13 --- /dev/null +++ b/include/03.gdt/gdt05.c @@ -0,0 +1,13 @@ +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); +} |
