Fix: Fixing Linker and bootloader errors.

This commit is contained in:
AfonsoCMSousa 2025-11-14 22:35:01 +00:00
parent 1934e66796
commit babc45f96b
2 changed files with 11 additions and 10 deletions

View File

@ -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:

View File

@ -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';