PC boot: dl register and drive number

Posted by kikou on Stack Overflow See other posts from Stack Overflow or by kikou
Published on 2012-06-24T01:44:22Z Indexed on 2012/06/24 3:16 UTC
Read the original article Hit count: 158

Filed under:
|
|
|
|

I read somewhere in the internet that, before jumping to 0x7c00, the BIOS loads into %dl the "drive number" of the booted device. But what is this "drive number"? Each device attached to the computer is assigned a number by the BIOS? If so, how can I know which number is a given device assigned to?

Reading GRUB's source code I found when %dl has bits 0x80 and 0x70 set, it overwrites the whole register with 0x80. Why is that? Here is the code:

jmp 3f      /* grub-setup may overwrite this jump */
testb $0x80, %dl
jz 2f
3:
/* Ignore %dl different from 0-0x0f and 0x80-0x8f.  */
testb $0x70, %dl
jz 1f
2:     
movb $0x80, %dl
1:

By the way. Is there any detailed resource on the boot process of PC's in the web? Specially about what the BIOS does before giving the control to the bootloader and also the standard codes used to communicate with it (like that "drive numer"). I was hoping to write my own bootloader and everything I found is a bit too vague, not technical enough to the point of informing of the exact state of the computer when my bootloader starts to run.

© Stack Overflow or respective owner

Related posts about assembly

Related posts about x86