PROGRAM6629.PAS

{* Серийный номер, Метка тома и тип FAT диска *}

Unit PROGRAM6629;
Interface
Implementation
Begin
 writeln('Серийный номер, Метка тома и тип FAT диска');
End.

Program pas;

Uses PROGRAM6629.pas; {* Эту строку можно удалить *}
{From : John Vostrenko                   Subj : Серийный номер, Метка тома и тип FAT диска  }
Const {* Постоянные значения *}
  Hexa : Array [0..15] Of Char = ('0''1''2''3''4''5''6''7''8''9''A''B''C''D''E''F');
Type {* Используемые типы *}
  DiskInfo = Record                { Work area }
  Info_Level  : Word; { Always zero }
  Serial_Num  : LongInt; { Serial number Of the specified disk }
  Volume_Name : String[11]; 'NO_NAME' Or volume name }
  File_Sys    : String[8]; 'FAT12' Or 'FAT16' }
  End;
Var {* В работе нам потребуются переменные: *}
  Ch1    : Byte;
  Ch2    : Byte;
  Ch3    : Byte;
  Ch4    : Byte;
  DInfo  : DiskInfo;
  First  : Word;
  Second : Word;
Function Word2Hex(Number : Word) : String;
Begin
Ch1 := (Number Shr 8) Shr 4;
Ch2 := (Number Shr 8) - (Ch1 Shl 4);
Ch3 := (Number And $FF) Shr 4;
Ch4 := (Number And $FF) - (Ch3 Shl 4);
Word2Hex := Hexa[Ch1] + Hexa[Ch2] + Hexa[Ch3] + Hexa[Ch4];
End;
Begin
Asm         Mov Ax, Seg DInfo         Mov Ds, Ax         Mov Dx, Offset DInfo           { Load Adress Of my target table }
Mov Ax, 6900h                  { Get Serial Number }
Mov Bl, 0                      { Drive : 0 default, 1 A:, 2 B:, ... }
Xor Bh, Bh                     { Always 0 under DOS }
Int 21h                        { Only
If you have DOS 4.0 + }

  Mov Ax, Word Ptr [DInfo.Serial_Num + 2]         Mov First, Ax                  { First  word Of the serial number }
Mov Ax, Word Ptr DInfo.Serial_Num         Mov Second, Ax                 { Second word Of the serial number }
End;
Writeln('Serial number Of this disk :  ', Word2Hex(First), ' - ', Word2Hex(Second));
End......