keithe@tekgvs.TEK.COM (Keith Ericson) (03/10/88)
Here is a program a co-worker wrote to examine the BIOS table and print out the hard disk drive types. I'll put a uuencoded copy of the executable in the binaries newsgroup. In case you're wondering, the "Control Byte" is 0 for drives with 7 or fewer heads and it's 8 for drives with 8 to 15 heads. Also, I don't understand entries for drives with 8 or more heads AND containing an entry for write precompensation: it's my understanding that the "reduced write current" line is replaced by the third head- select function in those (8-or more head) drives. Anybody know for certain how this works? keith ======================================================================= /* Compiled with Turbo-C V-1.5 */ #include <stdio.h> #include <dos.h> main() { int segm = 0xf000; unsigned baseoff = 0xe401; int cyl; char heads; int precom; char cntrl; int land; char sect; int i; long cap; printf("Drive Cylind. Heads Write Control Landing Sectors Format.\n"); printf("type precomp. byte zone per track. capac.\n"); for(i=0;i<47;i++) { cyl = peek(segm, baseoff+(unsigned)(i*16)); heads = peekb(segm, baseoff+(unsigned)(i*16+2)); precom = peek(segm, baseoff+(unsigned)(i*16+5)); cntrl = peekb(segm,baseoff+(unsigned)(i*16+8)); land = peek(segm, baseoff+(unsigned)(i*16+12)); sect = peekb(segm, baseoff+(unsigned)(i*16+14)); cap = (long)(sect*512)*(long)(heads*cyl); cap /= 1000000L; if(precom != -1) printf("%3d %7d %7d %9d %7d %8d %10d %8dMb\n",i+1,cyl, (int)heads,precom,cntrl,land,(int)sect,(int)cap); else printf("%3d %7d %7d %9s %7d %8d %10d %8dMb\n",i+1,cyl, (int)heads,"none",cntrl,land,(int)sect,(int)cap); } }