aboutsummaryrefslogtreecommitdiff
path: root/include/03.gdt
diff options
context:
space:
mode:
Diffstat (limited to 'include/03.gdt')
-rw-r--r--include/03.gdt/deo69
-rw-r--r--include/03.gdt/deo85
-rw-r--r--include/03.gdt/gdt.c36
-rw-r--r--include/03.gdt/gdt.h26
-rw-r--r--include/03.gdt/gdt1.c2
-rw-r--r--include/03.gdt/gdt1.h2
-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.c10
-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.h3
-rw-r--r--include/03.gdt/gdt6.c5
-rw-r--r--include/03.gdt/gdt6.h1
-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