aboutsummaryrefslogtreecommitdiff
path: root/include/03.gdt
diff options
context:
space:
mode:
authorAleksa Vučković <aleksav013@gmail.com>2022-01-10 22:15:15 +0100
committerAleksa Vučković <aleksav013@gmail.com>2022-01-10 22:43:56 +0100
commit0bff8199e4a800d5ea1bd422dcf06643d6daf008 (patch)
tree15108a0073d66afc026c0a2225474c2d61e71b34 /include/03.gdt
parent97d99fa196d4b732cfd6635dcb8b0a9c9228c88d (diff)
include/setup.sh
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/deo41
-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/deo74
-rw-r--r--include/03.gdt/deo85
-rw-r--r--include/03.gdt/deo92
-rw-r--r--include/03.gdt/gdt.c46
-rw-r--r--include/03.gdt/gdt05.c13
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);
-}