Скачать Серийный номер IDE винта

23.06.1997
Скачать файл (1,48 Кб)




uses CRT;
Type
 TIdeInfo = Record
    Config    : word;
    CylsTotal : word;
    Unused    : word;
    HeadTotal : word;
    BPT       : word;
    BPS       : word;
    SPT       : word;
    Vendor    : Array[0..2]  of word;
    Serial    : Array[1..20] of char;
    BufType   : word;
    BufSize   : word;
    ECC       : word;
    Revision  : Array[1..8]  of char;
    Model     : Array[1..40] of char;
 end;
 var
   InfoArray : Array[0..255] of word;
   IdeInfo   : TIdeInfo absolute InfoArray;
   NumDisk   : byte;
   Count     : byte;
 
 
procedure GetIDEInfo( Drive : byte );
var
  I : byte;
 
  begin
    FillChar( InfoArray, sizeof(InfoArray), 0 );
 
    while ( Port[$1F7] and $80 <> 0 ) do;
 
    Port[$3F6] := 2;
    Port[$1F6] := $A0 + ( Drive shl 4);
    Port[$1F7] := $EC;
 
    while ( Port[$1F7] and $80 <> 0 ) do;
 
    for I := 0 to 255 do InfoArray[I] := Swap( PortW[$01F0] );
 
  end;
 
 
begin
  ClrScr;
  NumDisk := Mem[$40:$75];
  for Count :=1 to NumDisk do
  begin
    GetIdeInfo( Count - 1 );
    Writeln('Serial number     : ',IdeInfo.Serial           );
    Writeln('Revision          : ',IdeInfo.Revision         );
    Writeln('Model HDD         : ',IdeInfo.Model            );
    Writeln;
    Writeln('Total cylinders   : ',Swap(IdeInfo.CylsTotal):8);
    Writeln('Total heads       : ',Swap(IdeInfo.HeadTotal):8);
    Writeln('Sectors per track : ',Swap(IdeInfo.SPT):8      );
    Writeln('Byte per sector   : ',Swap(IdeInfo.BPS):8      );
    Writeln('Byte per track    : ',Swap(IdeInfo.BPT):8      );
    Writeln('Size of buffer    : ',Swap(IdeInfo.BufSize):8  );
 
 
  end;
end.