Contributor: CAREY W. STARZINGER { > Has anyone any ideas how to interrogate an IDE drive to get > its setup parameters, ie. number of cylinders, heads and > sectors, as some of the more recent BIOS's seem to be able to do? Read cylinder 0, head 0, sector 1 which is the first sector on the hard drive. This sector contains the partition table. The partition table contains this information. This could be done faster in ASM code but for the interests of the purists in this echo, I will use the registers and set it up in Pascal. This example was used in a large program that did many other things and that is why there is no parameter passing to the procedure and the device is global. Sample Code to read the partition table: } Uses CRT, DOS; var buffermbr : array[ 0 .. 512 ] of byte; { Buffer for Master Boot Record } regs : registers; { Predefined data type } device : word; s : string; Procedure readpart; begin with regs do begin ah := $02; { Read sector service request } al := $01; { Number of sectors to read } ch := $00; { Cylinder number or track number for floppies } cl := $01; { Sector Number, bits 6,7 -two high bits of 10 bit cylinder number } dh := $00; { Head Number } dl := device; { Specifies which drive C=80h, D=81H, etc } es := seg( buffermbr ); bx := ofs( buffermbr ); end; intr( $13, regs ) end; { The below main body has been stripped of the code to verify the number of parameters that were entered as well as the validity of the parameter string entered ( 'c', 'd', etc. ). } begin clrscr; s := paramstr( 1 ); s[ 1 ] := upcase( s[ 1 ] ); if s[ 1 ] = 'C' then begin device := $80; end else begin device := Ord( s[ 1 ] ) - Ord( 'A' ); if device > 1 then device := $80 + ( device - 2 ); end; readpart; end. { Partition Table Information and location: Format of hard disk master boot record: . Offset Size Description . 000h 446 BYTEs Master bootstrap loader code . 1BEh 16 BYTEs partition record for partition 1 ( Byte definition below ) . 1CEh 16 BYTEs partition record for partition 2 . 1DEh 16 BYTEs partition record for partition 3 . 1EEh 16 BYTEs partition record for partition 4 . 1FEh WORD signature, AA55h indicates valid BIOS extension block . Format of partition record: Offset Size Description 00h BYTE boot indicator (80h = active, 00H = inactive ) 01h BYTE partition start head 02h BYTE partition start sector (bits 0-5) 03h BYTE partition start track (bits 8,9 in bits 6,7 of sector) 04h BYTE operating system indicator (see below) 05h BYTE partition end head 06h BYTE partition end sector (bits 0-5) 07h BYTE partition end track (bits 8,9 in bits 6,7 of sector) 08h DWORD sectors preceding partition 0Ch DWORD length of partition in sectors Robert, you can use whatever information you need from this table. I also use a routine to read the CMOS setup data but there is varience between manufacturers and it is a lot more difficult to decode the information you are looking for. I just stripped this code out and have not run it as a stand-alone program. Let me know how it worked for you and if you need any more assistance with it, just drop me a message. }