diff --git a/boot/boot.asm b/boot/boot.asm index f463ae1..bc1bd27 100644 --- a/boot/boot.asm +++ b/boot/boot.asm @@ -1,8 +1,47 @@ -bits 16 -org 0x7c00 +[org 0x7c00] +[bits 16] + +CODE_SEG equ gdt_code - gdt_start + +cli +lgdt [gdt_descriptor] +mov eax, cr0 +or eax, 1 +mov cr0, eax +jmp CODE_SEG:start_protected_mode +jmp $ + +gdt_start: + gdt_null: + dd 0x0 + dd 0x0 + + gdt_code: + dw 0xffff + dw 0x0 + db 0x0 + db 0b10011010 + db 0b11001111 + db 0x0 + + gdt_data: + dw 0xffff + dw 0x0 + db 0x0 + db 0b10010010 + db 0b11001111 + db 0x0 + +gdt_end: + +gdt_descriptor: + dw gdt_end - gdt_start - 1 + dd gdt_start + +[bits 32] +start_protected_mode: + jmp $ -halt: - jmp halt times 510-($-$$) db 0 -db 0x55, 0xaa \ No newline at end of file +dw 0xaa55 \ No newline at end of file