- NEW96 ------------------------------------------------------------ New-1997 -
Msg : 120 of 120 Addr Date
From : Serg Karpov 2:5024/7.77 23.06.97
Subj : Серийный номер IDE винта
-------------------------------------------------------------------------------
Hello Sergey!
Monday June 16 1997 09:30, Sergey Moutsynov wrote to All:
SM> Hello All!
SM> Hи у кого не завалялось примерчика на asm, чтобы он выдавал $subj%?
SM> Советы - типа, декомпилируй и пользуйся, не катят, т.к. нету времени
SM> разгадывать всякие головоломки, да и опыта нету то-же.
SM> Был бы очень признателен, если бы исходник делал то-же, что и ideinfo,
SM> к примеру.
Пользуйся, а на ассемблер сам переведешь... если надо...
SM> Sergey
I wish You success!
Serg Karpov .
Monday June 23 1997 11:01
--- GEcho 1.11+/GoldED
* Origin: Союз ЛАЦЕПУПОВ ... Вступайте ... (2:5024/7.77)
{> Cut here. FileName= IDEHDD.PAS }
{From : Serg Karpov 2:5024/7.77 23.06.97
Subj : Серийный номер IDE винта
}
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.
|