diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-11 20:53:06 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-11 20:53:06 +0200 |
| commit | 6edeba8fe208fb019aec00fdc72b97407a8078d3 (patch) | |
| tree | 965376727a7519fd20f73a946c01157151098ec6 /src/bringelle.c | |
| parent | 3212145e94e0c68a5da96306545c116292dfbe85 (diff) | |
Enable paging
Diffstat (limited to 'src/bringelle.c')
| -rw-r--r-- | src/bringelle.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/bringelle.c b/src/bringelle.c index 8faaecc..340e884 100644 --- a/src/bringelle.c +++ b/src/bringelle.c @@ -1,8 +1,10 @@ #include "libc/stdio.h" -#include "utils/pic.h" +#include "int/pic.h" #include "boot/multiboot.h" #include "utils/mem.h" #include "utils/gdt.h" +#include "utils/paging.h" + char show_tics=0; @@ -21,11 +23,14 @@ void bringelle(){ // Kernel boot sequence pic_enable_interrupt(); print("Interrupts enabled\n"); - print("Kernel started !\n"); + paging_enable(); + print("Paging enable!\n"); + print("Kernel started !"); + + show_tics=1; // Utask print("Launch user task "); - show_tics=1; memcpy((void*)utask,(void*)0x300000, 100); // 100 bytes seems reasonable to load utask asm ( "cli \n\t" // Ensure we do not get interrupted @@ -33,20 +38,22 @@ void bringelle(){ "movl %%eax, %0 \n\t" // Save kernel ss segment into the TSS "movl %%esp, %1 \n\t" // Save kernel esp into the TSS BEFORE setting up the stack "pushl $0x33 \n\t" // Push task ss which is 0x30 along with prlv which is 0x3 - "pushl $0x400000 \n\t" // Push task esp + "pushl $0x30FFFF \n\t" // Push task esp "pushfl \n\t" // Retrieve flags "popl %%eax \n\t" "orl $0x200, %%eax \n\t" // Enable interrupt for the user task "and $0xffffbfff, %%eax \n\t" // Clear the NT flags "push %%eax \n\t" // Push task flags "push $0x23 \n\t" // Push task cs which is 0x20 along with prlv which is 0x3 - "push $0 \n\t" // Push task entry point + "push $0x300000 \n\t" // Push task entry point "mov $0x2B, %%eax \n\t" // GDT entry 0x28 along with prlv which is 0x3 "mov %%eax, %%ds \n\t" // Setting up user data segment "iret \n\t" // Launch user task : "=m" (TSS.ss0), "=m" (TSS.esp0) ); + + while(1); } @@ -63,3 +70,7 @@ void clock(){ } +void page_fault(){ + print("Page fault!"); +} + |
