YACBA/bootloader.asm
Lain Iwakura 5e333cffc1
upload
2025-06-22 20:03:39 +03:00

99 lines
1.5 KiB
NASM

[BITS 16]
[ORG 0x7C00]
KERNEL_OFFSET equ 0x1000
STACK_BASE equ 0x9000
start:
cli
xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, STACK_BASE
sti
mov [boot_drive], dl
mov si, banner
call print_string
call load_kernel
call switch_to_pm
jmp $
load_kernel:
mov si, loading_msg
call print_string
mov bx, KERNEL_OFFSET
mov dh, 15
mov dl, [boot_drive]
call disk_load
mov si, loaded_msg
call print_string
ret
disk_load:
pusha
push dx
mov ah, 0x02
mov al, dh
mov cl, 0x02
mov ch, 0x00
mov dh, 0x00
int 0x13
jc disk_error
pop dx
cmp al, dh
jne sectors_error
popa
ret
disk_error:
mov si, disk_error_msg
call print_string
jmp disk_loop
sectors_error:
mov si, sectors_error_msg
call print_string
disk_loop:
jmp $
print_string:
lodsb
cmp al, 0
je done
mov ah, 0x0e
int 0x10
jmp print_string
done:
ret
%include "gdt.asm"
%include "print32.asm"
%include "switch_pm.asm"
[BITS 32]
BEGIN_PM:
mov ebx, KERNEL_OFFSET
call ebx
jmp $
boot_drive db 0
banner db 'ColdBoot v1.0 - Starting...', 0x0D, 0x0A, 0
loading_msg db 'Loading kernel...', 0x0D, 0x0A, 0
loaded_msg db 'Kernel loaded, switching to 32-bit...', 0x0D, 0x0A, 0
disk_error_msg db 'Disk read error!', 0x0D, 0x0A, 0
sectors_error_msg db 'Sectors read error!', 0x0D, 0x0A, 0
times 510 - ($-$$) db 0
dw 0xaa55