Finish GDT code
This commit is contained in:
parent
913c2d2844
commit
7c3dc4cacc
|
@ -17,22 +17,6 @@ stack_bottom:
|
|||
.skip 16384
|
||||
stack_top:
|
||||
|
||||
# GDT segment register setup
|
||||
.global _gdt_flush
|
||||
.extern _gp
|
||||
_gdt_flush:
|
||||
lgdt (_gp) #load the GDT with the special pointer
|
||||
mov %ax, 0x10 #offset from GDT to data segment
|
||||
mov %ds, ax
|
||||
mov %es, ax
|
||||
mov %fs, ax
|
||||
mov %gs, ax
|
||||
mov %ss, ax
|
||||
jmp 0x08:flush2 #long jump
|
||||
flush2:
|
||||
ret #return to c code
|
||||
|
||||
|
||||
# start function - calls kernel_main
|
||||
.section .text
|
||||
.global _start
|
||||
|
@ -49,4 +33,23 @@ _start:
|
|||
1: hlt
|
||||
jmp 1b
|
||||
|
||||
.size _start, . - _start
|
||||
.size _start, . - _start
|
||||
|
||||
|
||||
# GDT segment register setup
|
||||
.global gdt_flush
|
||||
.extern gp
|
||||
gdt_flush:
|
||||
lgdt (gp) #load the GDT with the special pointer
|
||||
mov %eax,0x10 #offset from GDT to data segment
|
||||
mov %eax, %ds
|
||||
mov %eax, %es
|
||||
mov %eax, %fs
|
||||
mov %eax, %gs
|
||||
mov %eax, %ss
|
||||
|
||||
pushl 12(%esp)
|
||||
push $flush2
|
||||
ljmp *(%esp) #long jump
|
||||
flush2:
|
||||
ret #return to c code
|
|
@ -1,7 +1,7 @@
|
|||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
//#include <string.h>
|
||||
|
||||
#include "kernel/tty.h"
|
||||
#include "kernel/utils.h"
|
||||
|
|
|
@ -47,4 +47,5 @@ void gdt_install() {
|
|||
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);
|
||||
|
||||
//Apply changes
|
||||
gdt_flush();
|
||||
gdt_flush();
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
int kernel_main(void) {
|
||||
//Prepare the GDT
|
||||
gdt_install()
|
||||
gdt_install();
|
||||
//Prepare the screen, and blank it out.
|
||||
screen_initialize();
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user