[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]
{
Get the serial number of a disk
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º º°
º AVONTURE CHRISTOPHE º°
º AVC SOFTWARE º°
º BOULEVARD EDMOND MACHTENS 157/53 º°
º B-1080 BRUXELLES º°
º BELGIQUE º°
º º°
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
}
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 , Ch2 : Byte;
Ch3 , Ch4 : Byte;
DInfo : DiskInfo;
First, 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.
[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]