diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/entry.asm | 73 | ||||
-rw-r--r-- | src/inc/boot.h | 6 | ||||
-rw-r--r-- | src/main.c | 4 |
3 files changed, 38 insertions, 45 deletions
diff --git a/src/entry.asm b/src/entry.asm index 00b5874..67b5ffd 100644 --- a/src/entry.asm +++ b/src/entry.asm @@ -77,8 +77,8 @@ %define GDT_EXECUTABLE 0b00001000 ; Can be executed %define GDT_READWRITE 0b00000010 ; Read/write access for code/data %define GDT_ACCESSED 0b00000001 ; Whether segment is accessed -%define GDT_GRANULARITY (0x80 | 0x0f) ; Page granularity (4KiB) -%define GDT_SIZE (0x40 | 0x0f) ; Use 32 bit selectors +%define GDT_GRANULARITY (0x80 | 0x00) ; Page granularity (4KiB) +%define GDT_SIZE (0x40 | 0x00) ; Use 32 bit selectors %define GDT_DATA_OFFSET 0x10 ; Offset to GDT data segment ; Kernel constants @@ -371,15 +371,13 @@ protected_mode_enter: mov gs, ax lgdt [gdt_desc] ; Load GDT - mov ax, 0x28 - ltr ax ; Set protected mode via cr0 mov eax, cr0 or eax, 1 ; Set bit 0 mov cr0, eax - jmp 08h:protected_mode ; JUMP! + jmp (gdt_code - gdt):protected_mode ; JUMP! bits 32 ; Woah, so big! protected_mode: @@ -392,6 +390,9 @@ protected_mode: mov esp, STACK_POINTER ; Move stack pointer + mov ax, gdt_tss - gdt ; Load TSS + ltr ax + mov eax, vid_info ; Pass VBE struct to kernel push eax ; Push as second kernel parameter @@ -399,37 +400,6 @@ protected_mode: lea eax, [edx] call eax -; TSS -tss_entry: - dd 0 ; Previous TSS - dd STACK_POINTER ; esp0 - dd GDT_DATA_OFFSET ; ss0 - dd 0 ; esp1 - dd 0 ; ss1 - dd 0 ; esp2 - dd 0 ; ss2 - dd 0 ; cr3 - dd 0 ; eip - dd 0 ; eflags - dd 0 ; eax - dd 0 ; ecx - dd 0 ; edx - dd 0 ; ebx - dd 0 ; esp - dd 0 ; ebp - dd 0 ; esi - dd 0 ; edi - dd 0x13 ; es - dd 0x0b ; cs - dd 0x13 ; ss - dd 0x13 ; ds - dd 0x13 ; fs - dd 0x13 ; gs - dd 0 ; ldt - dw 0 ; trap - dw 0 ; iomap base -tss_entry_end: - ; GDT align 32 gdt: ; GDTs start @@ -476,6 +446,37 @@ gdt_desc: dw gdt_end - gdt - 1 dd gdt +; TSS +tss_entry: + dd 0 ; Previous TSS + dd STACK_POINTER ; esp0 + dd gdt_data - gdt ; ss0 (data offset) + dd 0 ; esp1 + dd 0 ; ss1 + dd 0 ; esp2 + dd 0 ; ss2 + dd 0 ; cr3 + dd 0 ; eip + dd 0 ; eflags + dd 0 ; eax + dd 0 ; ecx + dd 0 ; edx + dd 0 ; ebx + dd 0 ; esp + dd 0 ; ebp + dd 0 ; esi + dd 0 ; edi + dd 0 ; es + dd 0 ; cs + dd 0 ; ss + dd 0 ; ds + dd 0 ; fs + dd 0 ; gs + dd 0 ; ldt + dw 0 ; trap + dw 0 ; iomap base +tss_entry_end: + times 1024 - ($ - $$) db 0 ; Start at LBA 2 diff --git a/src/inc/boot.h b/src/inc/boot.h index 30ddfb7..1a41c32 100644 --- a/src/inc/boot.h +++ b/src/inc/boot.h @@ -8,9 +8,3 @@ struct vid_info { u32 mode; struct vbe *info; }; - -struct mem_info { - u64 base; - u64 len; - u64 type; -}; @@ -17,7 +17,7 @@ u32 HEAP = 0x00200000; u32 HEAP_START; -void kernel_main(struct mem_info *mem_info, struct vid_info *vid_info) +void kernel_main(struct vid_info *vid_info) { HEAP_START = HEAP; // For malloc function @@ -38,8 +38,6 @@ void kernel_main(struct mem_info *mem_info, struct vid_info *vid_info) // Enable drivers sti(); - mem_info++; // TODO: Use the mmap (or remove)! - ls_root(); gui_init(FONT_PATH); |