diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2021-11-01 23:59:59 +0100 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2021-11-01 23:59:59 +0100 |
| commit | 2a56405579be6dc341c503420e40cb30c5144a35 (patch) | |
| tree | 6548a001ead2a2df6068e2157a1b15adbe174aff /src/c/paging.c | |
| parent | 89f7f1b114c1bbea3ad62808bf3653e1d2337d1f (diff) | |
Temporary heap fix
Diffstat (limited to 'src/c/paging.c')
| -rw-r--r-- | src/c/paging.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/src/c/paging.c b/src/c/paging.c index b256b74..becc79d 100644 --- a/src/c/paging.c +++ b/src/c/paging.c @@ -18,34 +18,29 @@ void set_pd() } } -uint32_t first_page_table[1024] __attribute__((aligned(4096))); +uint32_t page_table[1024][1024] __attribute__((aligned(4096))); -void set_pt() +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. - unsigned int i; //we will fill all 1024 entries in the table, mapping 4 megabytes - for(i = 0; i < 1024; i++) + 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 ;) - first_page_table[i] = (i * 0x1000) | 3; // attributes: supervisor level, read/write, present. + page_table[num][i] = (address + i * 0x1000) | 3; // attributes: supervisor level, read/write, present. } -} -void put_pt() -{ + page_directory[num] = ((uint32_t)page_table[num]) | 3; // attributes: supervisor level, read/write, present - page_directory[0] = ((uint32_t)first_page_table) | 3; } void set_paging() { set_pd(); - set_pt(); - put_pt(); + for(size_t i=0;i<1024;i++) set_pt(i,0x00400000 * i); // all 4GB mapped loadPageDirectory(page_directory); enablePaging(); } |
