diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2022-01-10 22:15:15 +0100 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2022-01-10 22:43:56 +0100 |
| commit | 0bff8199e4a800d5ea1bd422dcf06643d6daf008 (patch) | |
| tree | 15108a0073d66afc026c0a2225474c2d61e71b34 /include/09.paging | |
| parent | 97d99fa196d4b732cfd6635dcb8b0a9c9228c88d (diff) | |
include/setup.sh
Diffstat (limited to 'include/09.paging')
| -rw-r--r-- | include/09.paging/deo1 (renamed from include/09.paging/paging00.c) | 0 | ||||
| -rw-r--r-- | include/09.paging/deo2 (renamed from include/09.paging/paging01.c) | 1 | ||||
| -rw-r--r-- | include/09.paging/deo3 | 1 | ||||
| -rw-r--r-- | include/09.paging/deo4 | 12 | ||||
| -rw-r--r-- | include/09.paging/deo5 (renamed from include/09.paging/paging03.c) | 0 | ||||
| -rw-r--r-- | include/09.paging/deo6 | 4 | ||||
| -rw-r--r-- | include/09.paging/deo7 | 7 | ||||
| -rw-r--r-- | include/09.paging/deo8 | 3 | ||||
| -rw-r--r-- | include/09.paging/deo9 (renamed from include/09.paging/paging05.c) | 0 | ||||
| -rw-r--r-- | include/09.paging/paging.c | 46 | ||||
| -rw-r--r-- | include/09.paging/paging02.c | 12 | ||||
| -rw-r--r-- | include/09.paging/paging04.c | 15 |
12 files changed, 73 insertions, 28 deletions
diff --git a/include/09.paging/paging00.c b/include/09.paging/deo1 index c45e28b..c45e28b 100644 --- a/include/09.paging/paging00.c +++ b/include/09.paging/deo1 diff --git a/include/09.paging/paging01.c b/include/09.paging/deo2 index 0789338..b56d18e 100644 --- a/include/09.paging/paging01.c +++ b/include/09.paging/deo2 @@ -1,3 +1,2 @@ extern void loadPageDirectory(uint32_t*); extern void enablePaging(); -uint32_t page_directory[1024] __attribute__((aligned(4096))); diff --git a/include/09.paging/deo3 b/include/09.paging/deo3 new file mode 100644 index 0000000..cbfbd25 --- /dev/null +++ b/include/09.paging/deo3 @@ -0,0 +1 @@ +uint32_t page_directory[1024] __attribute__((aligned(4096))); diff --git a/include/09.paging/deo4 b/include/09.paging/deo4 new file mode 100644 index 0000000..6905d35 --- /dev/null +++ b/include/09.paging/deo4 @@ -0,0 +1,12 @@ +void set_pd() +{ + //set each entry to not present + for(size_t i=0;i<1024;i++) + { + // This sets the following flags to the pages: + // Supervisor: Only kernel-mode can access them + // Write Enabled: It can be both read from and written to + // Not Present: The page table is not present + page_directory[i] = 0x00000002; + } +} diff --git a/include/09.paging/paging03.c b/include/09.paging/deo5 index 57f997d..57f997d 100644 --- a/include/09.paging/paging03.c +++ b/include/09.paging/deo5 diff --git a/include/09.paging/deo6 b/include/09.paging/deo6 new file mode 100644 index 0000000..4e670bb --- /dev/null +++ b/include/09.paging/deo6 @@ -0,0 +1,4 @@ +void set_pt(size_t num,uint32_t address) +{ + // holds the physical address where we want to start mapping these pages to. + // in this case, we want to map these pages to the very beginning of memory. diff --git a/include/09.paging/deo7 b/include/09.paging/deo7 new file mode 100644 index 0000000..5898f28 --- /dev/null +++ b/include/09.paging/deo7 @@ -0,0 +1,7 @@ + //we will fill all 1024 entries in the table, mapping 4 megabytes + for(size_t i=0;i<1024;i++) + { + // As the address is page aligned, it will always leave 12 bits zeroed. + // Those bits are used by the attributes ;) + page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present. + } diff --git a/include/09.paging/deo8 b/include/09.paging/deo8 new file mode 100644 index 0000000..b842a0c --- /dev/null +++ b/include/09.paging/deo8 @@ -0,0 +1,3 @@ + page_directory[num] = ((uint32_t)page_table[num]) | 3; + // attributes: supervisor level, read/write, present +} diff --git a/include/09.paging/paging05.c b/include/09.paging/deo9 index d99797b..d99797b 100644 --- a/include/09.paging/paging05.c +++ b/include/09.paging/deo9 diff --git a/include/09.paging/paging.c b/include/09.paging/paging.c new file mode 100644 index 0000000..f08530d --- /dev/null +++ b/include/09.paging/paging.c @@ -0,0 +1,46 @@ +#include<types.h> + +extern void loadPageDirectory(uint32_t*); +extern void enablePaging(); + +uint32_t page_directory[1024] __attribute__((aligned(4096))); + +void set_pd() +{ + //set each entry to not present + for(size_t i=0;i<1024;i++) + { + // This sets the following flags to the pages: + // Supervisor: Only kernel-mode can access them + // Write Enabled: It can be both read from and written to + // Not Present: The page table is not present + page_directory[i] = 0x00000002; + } +} + +uint32_t page_table[1024][1024] __attribute__((aligned(4096))); + +void set_pt(size_t num,uint32_t address) +{ + // holds the physical address where we want to start mapping these pages to. + // in this case, we want to map these pages to the very beginning of memory. + + //we will fill all 1024 entries in the table, mapping 4 megabytes + for(size_t i=0;i<1024;i++) + { + // As the address is page aligned, it will always leave 12 bits zeroed. + // Those bits are used by the attributes ;) + page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present. + } + + page_directory[num] = ((uint32_t)page_table[num]) | 3; + // attributes: supervisor level, read/write, present +} + +void set_paging() +{ + set_pd(); + for(size_t i=0;i<1024;i++) set_pt(i,0x00400000 * i); // all 4GB mapped + loadPageDirectory(page_directory); + enablePaging(); +} diff --git a/include/09.paging/paging02.c b/include/09.paging/paging02.c deleted file mode 100644 index 8c00c89..0000000 --- a/include/09.paging/paging02.c +++ /dev/null @@ -1,12 +0,0 @@ -void set_pd() -{ - //set each entry to not present - for(size_t i=0;i<1024;i++) - { - // This sets the following flags to the pages: - // Supervisor: Only kernel-mode can access them - // Write Enabled: It can be both read from and written to - // Not Present: The page table is not present - page_directory[i] = 0x00000002; - } -} diff --git a/include/09.paging/paging04.c b/include/09.paging/paging04.c deleted file mode 100644 index ad7507f..0000000 --- a/include/09.paging/paging04.c +++ /dev/null @@ -1,15 +0,0 @@ -void set_pt(size_t num,uint32_t address) -{ - // holds the physical address where we want to start mapping these pages to. - // in this case, we want to map these pages to the very beginning of memory. - //we will fill all 1024 entries in the table, mapping 4 megabytes - for(size_t i=0;i<1024;i++) - { - // As the address is page aligned, it will always leave 12 bits zeroed. - // Those bits are used by the attributes ;) - page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present. - } - - page_directory[num] = ((uint32_t)page_table[num]) | 3; - // attributes: supervisor level, read/write, present -} |
