nothing works but time to update
This commit is contained in:
61
boot.asm
Normal file
61
boot.asm
Normal file
@@ -0,0 +1,61 @@
|
||||
[bits 16]
|
||||
section .text
|
||||
global _start
|
||||
|
||||
_start:
|
||||
mov [BOOT_DRIVE], dl ; Save the boot drive number provided by BIOS
|
||||
|
||||
mov bp, 0x9000
|
||||
mov sp, bp
|
||||
|
||||
call load_kernel ; Load extra sectors from the disk
|
||||
call switch_to_pm ; Transition to 32-bit mode
|
||||
jmp $
|
||||
|
||||
%include "gdt.asm"
|
||||
|
||||
[bits 16]
|
||||
load_kernel:
|
||||
mov bx, 0x7e00 ; Destination memory address for kernel code
|
||||
mov dh, 30 ; Number of sectors to read
|
||||
mov dl, [BOOT_DRIVE]
|
||||
mov ah, 0x02 ; BIOS read sectors function
|
||||
mov al, dh
|
||||
mov ch, 0x00
|
||||
mov dh, 0x00
|
||||
mov cl, 0x02 ; Start reading from the second sector
|
||||
|
||||
int 0x13 ; Trigger BIOS disk interrupt
|
||||
|
||||
jc disk_error
|
||||
ret
|
||||
|
||||
disk_error:
|
||||
jmp $
|
||||
|
||||
[bits 16]
|
||||
switch_to_pm:
|
||||
cli
|
||||
lgdt [gdt_descriptor]
|
||||
mov eax, cr0
|
||||
or eax, 0x1
|
||||
mov cr0, eax
|
||||
jmp CODE_SEG:init_pm
|
||||
|
||||
[bits 32]
|
||||
extern main
|
||||
init_pm:
|
||||
mov ax, DATA_SEG
|
||||
mov ds, ax
|
||||
mov ss, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
|
||||
mov ebp, 0x90000
|
||||
mov esp, ebp
|
||||
|
||||
call main
|
||||
jmp $
|
||||
|
||||
BOOT_DRIVE db 0
|
||||
Reference in New Issue
Block a user