19 lines
460 B
C
19 lines
460 B
C
#include "memory.h"
|
|
|
|
void init_page_table(uint32_t page_table[1024], uint16_t start)
|
|
{
|
|
for (uint16_t i = start; i < 1024; i++)
|
|
page_table[i] = (i << 12) | 0x03;
|
|
}
|
|
|
|
int16_t create_page_table(uint16_t pd_index)
|
|
{
|
|
void *frame = alloc_frames(PAGE_SIZE);
|
|
if (!frame)
|
|
return -1;
|
|
page_directory[pd_index] = ((uint32_t)frame & PAGE_MASK) | 0x03;
|
|
uint32_t *page_table = (uint32_t *)((PT_START + pd_index) * 1024);
|
|
init_page_table(page_table, 0);
|
|
return 0;
|
|
}
|