55 lines
997 B
NASM
55 lines
997 B
NASM
[org 0x7C00]
|
|
bits 16
|
|
|
|
KERNEL_OFFSET equ 0x1000
|
|
|
|
start:
|
|
cli
|
|
mov [BOOT_DRIVE], dl
|
|
|
|
xor ax, ax
|
|
mov ds, ax
|
|
mov es, ax
|
|
mov ss, ax
|
|
mov sp, 0x7C00
|
|
sti
|
|
|
|
call load_kernel
|
|
|
|
jmp KERNEL_OFFSET
|
|
|
|
; -----------------------
|
|
; Зчитування kernel
|
|
; -----------------------
|
|
|
|
load_kernel:
|
|
mov bx, KERNEL_OFFSET ; куди завантажити
|
|
mov dh, 5 ; кількість секторів (тимчасово 5)
|
|
|
|
mov dl, [BOOT_DRIVE]
|
|
mov ah, 0x02 ; BIOS read sector
|
|
mov al, dh ; скільки секторів
|
|
mov ch, 0x00 ; cylinder
|
|
mov dh, 0x00 ; head
|
|
mov cl, 0x02 ; сектор 2 (після bootloader)
|
|
int 0x13
|
|
|
|
jc disk_error
|
|
ret
|
|
|
|
disk_error:
|
|
mov si, error_msg
|
|
.print:
|
|
lodsb
|
|
cmp al, 0
|
|
je $
|
|
mov ah, 0x0E
|
|
int 0x10
|
|
jmp .print
|
|
|
|
BOOT_DRIVE db 0
|
|
error_msg db "Disk read error!", 0
|
|
|
|
times 510 - ($ - $$) db 0
|
|
dw 0xAA55
|