diff --git a/boot.asm b/boot.asm index e204bce..364d769 100644 --- a/boot.asm +++ b/boot.asm @@ -13,25 +13,26 @@ section .text [bits 32] _start: mov esp, kernel_stack_top + cli ; Clear interrupts ; Load the gdt_ptr lgdt [gdt_ptr] mov cr3, pml4_table - mov rax, cr4 - or rax, 0x20 ; Enable PAE - mov cr4, rax + mov eax, cr4 + or eax, 0x20 ; Enable PAE + mov cr4, eax mov ecx, 0xC0000080 ; IA32_EFER MSR rdmsr - or rax, 0x00000100 ; Set LME (Long Mode Enable) bit + or eax, 0x00000100 ; Set LME (Long Mode Enable) bit wrmsr ; Enable long mode - mov rax, cr0 - or rax, 0x80000000 ; Set the Long Mode Enable (LME) bit - mov cr0, rax + mov eax, cr0 + or eax, 0x80000000 ; Set the Long Mode Enable (LME) bit + mov cr0, eax ; Jump to 64-bit code Segment jmp 0x08:long_mode_start @@ -49,8 +50,8 @@ gdt_ptr: gdt_start: ; Start of the actual GDT entries ; Entry 0: Null Descriptor dq 0x0000000000000000 - ; Entry 1: 64-bit Code Segment Descriptor - ; Entry 2: 64-bit Data Segment Descriptor + dq 0x00AF9A000000FFFF + dq 0x00AF92000000FFFF gdt_end: pml4_table: diff --git a/kernel.c b/kernel.c index b248273..73011b6 100644 --- a/kernel.c +++ b/kernel.c @@ -3,7 +3,7 @@ void kmain(void) { // Kernel main function // 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[1] = (0x07 << 8) | 'O';