Скачать Чтение серийного номера IDE HDD

31.03.1995
Скачать файл (1,35 Кб)




uses WinCrt;
{$ENDIF}
var
  InfoArray : array[0..255] of word;
  IdeInfo  : 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 absolute InfoArray;
  Count : byte;
  i : byte;
begin
  writeln('Информация о дисководах IDE:'^M^J);
{$IFDEF WINDOWS}
  for count := 1 to mem[  $0040:$0075] do begin
{$ELSE}
  for count := 1 to mem[Seg0040:$0075] do begin
{$ENDIF}
    FillChar(InfoArray, SizeOf(InfoArray), 0);
    {Проверить готовность}
    while (port[$1F7] and $80<>0) do ;
    {Запретить прерывания}
    port[$3f6] := 2;
    port[$1f6] := $A0 + ((count-1) shl 4);
    port[$1f7] := $EC;
    {Проверить готовность}
    while (port[$1F7] and $80<>0) do ;
    {Получить информацию}
    for i := 0 to 255 do InfoArray[i] := swap(portw[$1F0]);
    {Hапечатaть информацию}
    writeln('Информация о физическом диске ',count-1,^M^J);
    with IdeInfo do begin
      writeln('Емкость неформатированная :', 9.5367431641E-7* {1/2^20}
        swap(BPT)*swap(CylsTotal)*swap(HeadTotal):5:0, 'Mb');
      writeln('Емкость форматированная   :',
        longint(swap(SPT))*swap(CylsTotal)*swap(HeadTotal) div 2048:5, 'Mb');
      writeln('Число цилиндров           :', swap(CylsTotal):7);
      writeln('Число головок             :', swap(HeadTotal):7);
      writeln('Число секторов на дорожку :', swap(SPT):7);
      writeln('Число байт на дорожку*    :', swap(BPT):7);
      writeln('Число байт на сектор*     :', swap(BPS):7);
      writeln('Размер буфера             :', swap(BufSize):7);
      writeln('Код ECC                   :', swap(ECC):7);
      writeln(' * -- неформатированная емкость', ^M^J);
      writeln('Серийный номер            :', serial);
      writeln('Версия                    :',revision);
      writeln('Модель                    :',model);
    end;
    write('Hажмите любую клавишу...');
{$IFDEF WINDOWS}
    readkey;
{$ELSE}
    asm xor ah,ah ; int 16h end;
{$ENDIF}
    writeln(^M^J);
  end;
end.