Finish GDT code
This commit is contained in:
parent
913c2d2844
commit
7c3dc4cacc
|
@ -17,22 +17,6 @@ stack_bottom:
|
||||||
.skip 16384
|
.skip 16384
|
||||||
stack_top:
|
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
|
# start function - calls kernel_main
|
||||||
.section .text
|
.section .text
|
||||||
.global _start
|
.global _start
|
||||||
|
@ -49,4 +33,23 @@ _start:
|
||||||
1: hlt
|
1: hlt
|
||||||
jmp 1b
|
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 <stdbool.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
//#include <string.h>
|
||||||
|
|
||||||
#include "kernel/tty.h"
|
#include "kernel/tty.h"
|
||||||
#include "kernel/utils.h"
|
#include "kernel/utils.h"
|
||||||
|
|
|
@ -47,4 +47,5 @@ void gdt_install() {
|
||||||
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);
|
gdt_set_gate(2, 0, 0xFFFFFFFF, 0x92, 0xCF);
|
||||||
|
|
||||||
//Apply changes
|
//Apply changes
|
||||||
gdt_flush();
|
gdt_flush();
|
||||||
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
int kernel_main(void) {
|
int kernel_main(void) {
|
||||||
//Prepare the GDT
|
//Prepare the GDT
|
||||||
gdt_install()
|
gdt_install();
|
||||||
//Prepare the screen, and blank it out.
|
//Prepare the screen, and blank it out.
|
||||||
screen_initialize();
|
screen_initialize();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user