Mail Archives: djgpp/2002/06/11/20:08:29
----- Original Message -----
From: "Frank Troy Cook Jr." <fcook1 AT carolina DOT rr DOT com>
Newsgroups: comp.os.msdos.djgpp
To: <djgpp AT delorie DOT com>
Sent: Tuesday, June 11, 2002 5:55 AM
Subject: bit and bytes ... help [ biosdisk ]
> i need to extract drive information returned from a biosdisk call. for
> example:
>
> main()
> {
> int count;
> char buffer[512];
> biosdisk(8, 0x80, 0, 0, 0, 1, buffer);
> for(count=0; count < 4; count++)
> {
> printf("%u ", buffer[count]);
> }
> printf("\n");
> }
>
> i understandfrom the djgpp site that the first 4 bytes return:
> byte 0 = sectors per track (bits 0..5) and top two bits of cylinder (in
bits
> 6..7)
> byte 1 = cyliders (bits 0..7)
> byte 2 = number of drives
> byte 3 = number of heads
> how do i convert this to integer numbers correctly?
>
If I understand the info of libgc... 8)
You must mask, shift and reorder the byte 0 to 3.
#include <stdio.h>
#include <bios.h>
int main(void){
int dummy;
int sect_per_trac, cylinders, num_drives, num_heads;
char buffer[512];
biosdisk(8, 0x80, 0, 0, 0, 1, buffer);
sec_per_tracks=buffer[0]&0x3C;
dummy=(buffer[0]&0xC0 >> 5) << 8;
cylinders=buffer[1]&0xFF + dummy;
num_drives=buffer[2]&0xFF;
num_heads=buffer[3]&0xFF;
/* anything else ...
*/
return 0;
}
> please respond to fcook1SPAMBLOCK AT carolina DOT rr DOT com
>
- Raw text -