From 0bff8199e4a800d5ea1bd422dcf06643d6daf008 Mon Sep 17 00:00:00 2001 From: Aleksa Vučković Date: Mon, 10 Jan 2022 22:15:15 +0100 Subject: include/setup.sh --- include/09.paging/deo1 | 1 + include/09.paging/deo2 | 2 ++ include/09.paging/deo3 | 1 + include/09.paging/deo4 | 12 ++++++++++++ include/09.paging/deo5 | 1 + include/09.paging/deo6 | 4 ++++ include/09.paging/deo7 | 7 +++++++ include/09.paging/deo8 | 3 +++ include/09.paging/deo9 | 7 +++++++ include/09.paging/paging.c | 46 ++++++++++++++++++++++++++++++++++++++++++++ include/09.paging/paging00.c | 1 - include/09.paging/paging01.c | 3 --- include/09.paging/paging02.c | 12 ------------ include/09.paging/paging03.c | 1 - include/09.paging/paging04.c | 15 --------------- include/09.paging/paging05.c | 7 ------- 16 files changed, 84 insertions(+), 39 deletions(-) create mode 100644 include/09.paging/deo1 create mode 100644 include/09.paging/deo2 create mode 100644 include/09.paging/deo3 create mode 100644 include/09.paging/deo4 create mode 100644 include/09.paging/deo5 create mode 100644 include/09.paging/deo6 create mode 100644 include/09.paging/deo7 create mode 100644 include/09.paging/deo8 create mode 100644 include/09.paging/deo9 create mode 100644 include/09.paging/paging.c delete mode 100644 include/09.paging/paging00.c delete mode 100644 include/09.paging/paging01.c delete mode 100644 include/09.paging/paging02.c delete mode 100644 include/09.paging/paging03.c delete mode 100644 include/09.paging/paging04.c delete mode 100644 include/09.paging/paging05.c (limited to 'include/09.paging') diff --git a/include/09.paging/deo1 b/include/09.paging/deo1 new file mode 100644 index 0000000..c45e28b --- /dev/null +++ b/include/09.paging/deo1 @@ -0,0 +1 @@ +#include diff --git a/include/09.paging/deo2 b/include/09.paging/deo2 new file mode 100644 index 0000000..b56d18e --- /dev/null +++ b/include/09.paging/deo2 @@ -0,0 +1,2 @@ +extern void loadPageDirectory(uint32_t*); +extern void enablePaging(); 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/deo5 b/include/09.paging/deo5 new file mode 100644 index 0000000..57f997d --- /dev/null +++ b/include/09.paging/deo5 @@ -0,0 +1 @@ +uint32_t page_table[1024][1024] __attribute__((aligned(4096))); 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/deo9 b/include/09.paging/deo9 new file mode 100644 index 0000000..d99797b --- /dev/null +++ b/include/09.paging/deo9 @@ -0,0 +1,7 @@ +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/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 + +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/paging00.c b/include/09.paging/paging00.c deleted file mode 100644 index c45e28b..0000000 --- a/include/09.paging/paging00.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/include/09.paging/paging01.c b/include/09.paging/paging01.c deleted file mode 100644 index 0789338..0000000 --- a/include/09.paging/paging01.c +++ /dev/null @@ -1,3 +0,0 @@ -extern void loadPageDirectory(uint32_t*); -extern void enablePaging(); -uint32_t page_directory[1024] __attribute__((aligned(4096))); 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/paging03.c b/include/09.paging/paging03.c deleted file mode 100644 index 57f997d..0000000 --- a/include/09.paging/paging03.c +++ /dev/null @@ -1 +0,0 @@ -uint32_t page_table[1024][1024] __attribute__((aligned(4096))); 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 -} diff --git a/include/09.paging/paging05.c b/include/09.paging/paging05.c deleted file mode 100644 index d99797b..0000000 --- a/include/09.paging/paging05.c +++ /dev/null @@ -1,7 +0,0 @@ -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(); -} -- cgit v1.2.3