|
|
|
|
@ -46,7 +46,7 @@ bits 16
|
|
|
|
|
mov di, 0x00
|
|
|
|
|
mov ah, 0x08
|
|
|
|
|
int 0x13
|
|
|
|
|
jc panic
|
|
|
|
|
jc .panic
|
|
|
|
|
and cl, 0x3f ; sectors per track
|
|
|
|
|
mov [bp + 1], cl
|
|
|
|
|
movzx bx, dh
|
|
|
|
|
@ -70,7 +70,7 @@ bits 16
|
|
|
|
|
mov bx, 0x7e00
|
|
|
|
|
mov dl, [bp] ; drive number
|
|
|
|
|
int 0x13
|
|
|
|
|
jc panic
|
|
|
|
|
jc .panic
|
|
|
|
|
|
|
|
|
|
; head = temp % number of heads
|
|
|
|
|
; cylinder = temp / number of heads
|
|
|
|
|
@ -80,6 +80,12 @@ bits 16
|
|
|
|
|
mov ax, 0x0003
|
|
|
|
|
int 0x10
|
|
|
|
|
|
|
|
|
|
mov cx, 8
|
|
|
|
|
mov si, .gpt_magic
|
|
|
|
|
mov di, 0x7e00
|
|
|
|
|
repe cmpsb
|
|
|
|
|
jne .panic
|
|
|
|
|
|
|
|
|
|
; mov word fs:[0x0000], 0xc048
|
|
|
|
|
; mov word fs:[0x0002], 0xc069
|
|
|
|
|
mov al, [0x7e00]
|
|
|
|
|
@ -90,7 +96,7 @@ bits 16
|
|
|
|
|
mov byte fs:[0x0004], al
|
|
|
|
|
hlt
|
|
|
|
|
|
|
|
|
|
panic:
|
|
|
|
|
.panic:
|
|
|
|
|
mov ax, 0x0003
|
|
|
|
|
int 0x10
|
|
|
|
|
mov ax, 0xb800
|
|
|
|
|
@ -118,6 +124,9 @@ panic:
|
|
|
|
|
; - Boot from UEFI
|
|
|
|
|
; - Boot on non-GPT partitioned disk
|
|
|
|
|
|
|
|
|
|
.gpt_magic:
|
|
|
|
|
db "EFI PART"
|
|
|
|
|
|
|
|
|
|
; MBR bootstrap field is 440 bytes long
|
|
|
|
|
%if ($ - $$) > 440
|
|
|
|
|
%error "exceeded mbr bootstrap field size"
|
|
|
|
|
|