Fix: Fixing Linker and bootloader errors.
This commit is contained in:
parent
1934e66796
commit
babc45f96b
19
boot.asm
19
boot.asm
@ -13,25 +13,26 @@ section .text
|
|||||||
[bits 32]
|
[bits 32]
|
||||||
_start:
|
_start:
|
||||||
mov esp, kernel_stack_top
|
mov esp, kernel_stack_top
|
||||||
|
cli ; Clear interrupts
|
||||||
|
|
||||||
; Load the gdt_ptr
|
; Load the gdt_ptr
|
||||||
lgdt [gdt_ptr]
|
lgdt [gdt_ptr]
|
||||||
|
|
||||||
mov cr3, pml4_table
|
mov cr3, pml4_table
|
||||||
|
|
||||||
mov rax, cr4
|
mov eax, cr4
|
||||||
or rax, 0x20 ; Enable PAE
|
or eax, 0x20 ; Enable PAE
|
||||||
mov cr4, rax
|
mov cr4, eax
|
||||||
|
|
||||||
mov ecx, 0xC0000080 ; IA32_EFER MSR
|
mov ecx, 0xC0000080 ; IA32_EFER MSR
|
||||||
rdmsr
|
rdmsr
|
||||||
or rax, 0x00000100 ; Set LME (Long Mode Enable) bit
|
or eax, 0x00000100 ; Set LME (Long Mode Enable) bit
|
||||||
wrmsr
|
wrmsr
|
||||||
|
|
||||||
; Enable long mode
|
; Enable long mode
|
||||||
mov rax, cr0
|
mov eax, cr0
|
||||||
or rax, 0x80000000 ; Set the Long Mode Enable (LME) bit
|
or eax, 0x80000000 ; Set the Long Mode Enable (LME) bit
|
||||||
mov cr0, rax
|
mov cr0, eax
|
||||||
|
|
||||||
; Jump to 64-bit code Segment
|
; Jump to 64-bit code Segment
|
||||||
jmp 0x08:long_mode_start
|
jmp 0x08:long_mode_start
|
||||||
@ -49,8 +50,8 @@ gdt_ptr:
|
|||||||
gdt_start: ; Start of the actual GDT entries
|
gdt_start: ; Start of the actual GDT entries
|
||||||
; Entry 0: Null Descriptor
|
; Entry 0: Null Descriptor
|
||||||
dq 0x0000000000000000
|
dq 0x0000000000000000
|
||||||
; Entry 1: 64-bit Code Segment Descriptor
|
dq 0x00AF9A000000FFFF
|
||||||
; Entry 2: 64-bit Data Segment Descriptor
|
dq 0x00AF92000000FFFF
|
||||||
gdt_end:
|
gdt_end:
|
||||||
|
|
||||||
pml4_table:
|
pml4_table:
|
||||||
|
|||||||
2
kernel.c
2
kernel.c
@ -3,7 +3,7 @@
|
|||||||
void kmain(void) {
|
void kmain(void) {
|
||||||
// Kernel main function
|
// Kernel main function
|
||||||
// Set VGA memory address
|
// Set VGA memory address
|
||||||
unsigned short *VGA_mem = (unsigned short *)0xB8000;
|
volatile unsigned short *VGA_mem = (unsigned short *)0xB8000;
|
||||||
|
|
||||||
VGA_mem[0] = (0x07 << 8) | 'S';
|
VGA_mem[0] = (0x07 << 8) | 'S';
|
||||||
VGA_mem[1] = (0x07 << 8) | 'O';
|
VGA_mem[1] = (0x07 << 8) | 'O';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user