diff --git a/boot0.s b/boot0.s index a5d2c8c..79109c7 100644 --- a/boot0.s +++ b/boot0.s @@ -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"