diff --git a/kern/i386/pc/startup.S b/kern/i386/pc/startup.S index 18f61d8..a50977c 100644 --- a/kern/i386/pc/startup.S +++ b/kern/i386/pc/startup.S @@ -639,13 +639,46 @@ FUNCTION(grub_chainloader_real_boot) /* set up to pass boot drive */ popl %edx + movl %edx, %edi /* ESI must point to a partition table entry */ popl %esi + call prot_to_real .code16 + + push %dx + call hex_out + push %di + call hex_out + ljmp $0, $GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR + +hex_out: + pushw %bp + movw %sp, %bp + pushaw + movb $0xE, %ah + movw $7, %bx + movw $4, %cx + movw 4(%bp), %dx +1: + rol $4, %dx + movb %dl, %al + andb $0xF, %al + cmpb $10, %al + jb 2f + subb $('0'-'A'+10), %al +2: + addb $'0', %al + int $0x10 + loop 1b + movb $' ', %al + int $0x10 + popaw + popw %bp + ret $2 .code32 #include "../loader.S"