Mail Archives: djgpp/2002/06/11/21:00:15
wonderful help guys. thx
now tell me one more thing, where can i find 9on the web, a tutorial or
article on such a subject
"J. L." <jlsgarrido AT hotmail DOT com> wrote in message
news:OE62WSGmHP7DBdmkTXd00012964 AT hotmail DOT com...
>
> ----- 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 -