📄 tools.~inc
字号:
// Save CPUid Flags button
procedure TMainFrm.TextRepBTBMouseEnter(Sender: TObject);
begin
TextRepBTB.Color:=$00D2BCAA;
end;
procedure TMainFrm.TextRepBTBMouseLeave(Sender: TObject);
begin
TextRepBTB.Color:=$00EADBCF;
end;
procedure TMainFrm.TextRepBTMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
TextRepBTB.Color:=$00EADBCF;
TextRepBT.Font.Color:=$00733A02
end;
procedure TMainFrm.MakeTextReport(isDialog: boolean);
var
fSaveDialog: tSaveDialog;
fTextFile: TextFile;
i, j: byte;
str, RepFile: string;
ifExec: boolean;
function IntToHexForm(val: integer; index: byte): string;
var
i: byte;
begin
result:=(format('%x',[val]));
for i:=1 to index-Length(result) do
insert('0', result, 0);
end;
function AppendToFull(val: string; index: byte): string;
var
i: byte;
begin
result:=val;
for i:=1 to index-length(val)+1 do
result:=result+' ';
end;
begin
RepFile:=ExtractFilePath(ParamSTR(0))+'\OSCIReport.txt';
if isDialog then
begin
fSaveDialog:=tSaveDialog.Create(Self);
fSaveDialog.Filter:='Text File (*.txt)|*.txt';
fSaveDialog.FileName:='OSCIReport';
ifExec:=fSaveDialog.Execute;
RepFile:=fSaveDialog.FileName;
if Copy(RepFile, length(RepFile)-3,4)<>'.txt' then RepFile:=RepFile+'.txt';
end;
if (ifExec) or (not isDialog) then
begin
AssignFile(fTextFile, RepFile);
Rewrite(fTextFile);
Writeln(fTextFile,'OverSoft CPU Informer version '+VersionSignature);
Writeln(fTextFile,'----------------------------------');
writeln(fTextFile);
writeln(fTextFile,'Text report');
writeln(fTextFile,'-----------');
writeln(fTextFile);
writeln(fTextFile);
for i:=0 to CPUInfo[CurrentCpuNum].CPUCount-1 do
begin
writeln(fTextFile, AppendToFull('CPU Number:', 24)+IntToStr(i+1));
if (CPUInfo[i].CPUfeatures{[i]}.APIC=1) and (CPUInfo[i].CPUCount>1) then writeln(fTextFile, AppendToFull('Apic ID:', 24)+IntToStr(CPUInfo[i].CPUid_m{[i]}.std_apic));
if CPUInfo[i].nameinfo{[i]}.cpuname<>'' then writeln(fTextFile, AppendToFull('CPU Name:', 24)+CPUInfo[i].nameinfo{[i]}.cpuname);
if CPUInfo[i].CPUid_m{[i]}.ext_cpu_name<>'' then writeln(fTextFile, AppendToFull('Extended Name:', 24)+CPUInfo[i].CPUid_m{[i]}.ext_cpu_name);
if CPUInfo[i].nameinfo{[i]}.rating<> '' then writeln(fTextFile, AppendToFull('P-Rating:', 24)+CPUInfo[i].nameinfo{[i]}.rating);
if CPUInfo[i].nameinfo{[i]}.codename<>'' then writeln(fTextFile, AppendToFull('Core CodeName:', 24)+CPUInfo[i].nameinfo{[i]}.codename);
if CPUInfo[i].nameinfo{[i]}.technological.process<>'' then writeln(fTextFile, AppendToFull('Tech. Process:', 24)+CPUInfo[i].nameinfo{[i]}.technological.process);
if CPUInfo[i].nameinfo{[i]}.platform_descr<>'' then writeln(fTextFile, AppendToFull('Platform:', 24)+CPUInfo[i].nameinfo{[i]}.platform_descr);
if CPUInfo[i].CPUid_m{[i]}.std_brand<>0 then writeln(fTextFile, AppendToFull('BrandID:', 24)+IntToStr(CPUInfo[i].CPUid_m{[i]}.std_brand));
writeln(fTextFile, AppendToFull('Family/Model/Stepping:', 24)+Format('%x', [CPUInfo[i].CPUid_m{[i]}.std_family])+'/'+Format('%x', [CPUInfo[i].CPUid_m{[i]}.std_model])+'/'+Format('%x', [CPUInfo[i].CPUid_m{[i]}.std_stepping]));
writeln(fTextFile, AppendToFull('Level 1 Data:', 24)+IntToStr(CPUInfo[i].level1{[i]}.dcache.size)+' KBytes');
if not CPUInfo[i].level1{[i]}.icache.is_trace then writeln(fTextFile, AppendToFull('Level 1 Instructions:', 24)+IntToStr(CPUInfo[i].level1{[i]}.icache.size)+' KBytes')
else writeln(fTextFile, AppendToFull('Level 1 Trace:', 24)+IntToStr(CPUInfo[i].level1{[i]}.icache.size)+' K礝ps');
if CPUInfo[i].level2{[i]}.is_l2_cache then
case CPUInfo[i].level2{[i]}.CachePerCPU of
0,1: writeln(fTextFile, AppendToFull('Level 2:', 24)+IntToStr(CPUInfo[i].level2{[i]}.cache.size)+' KBytes');
else
writeln(fTextFile, AppendToFull('Level 2:', 24)+IntToStr(CPUInfo[i].level2{[i]}.CachePerCPU)+'x'+IntToStr(CPUInfo[i].level2{[i]}.cache.size)+' KBytes'); ;
end;
if CPUInfo[i].level3{[i]}.is_l3_cache then writeln(fTextFile, AppendToFull('Level 3:', 24)+IntToStr(CPUInfo[i].level3{[i]}.cache.size)+' KBytes');
if CPUInfo[i].Clocks{[i]}.lpCpuFrequency<>0 then writeln(fTextFile, AppendToFull('CPU Frequency', 24)+FormatFloat('0.0 MHz', CPUInfo[i].Clocks{[i]}.lpCpuFrequency));
if CPUInfo[i].Clocks{[i]}.Multiplier<>0 then writeln(fTextFile, AppendToFull('Multiplier', 24)+FormatFloat('x 0.0', CPUInfo[i].Clocks{[i]}.Multiplier));
if CPUInfo[i].Clocks{[i]}.Bus<>0 then
if (CPUInfo[i].FlagBrand{[i]}=amd) and (CPUInfo[i].CPUid_m{[i]}.std_family=15) then writeln(fTextFile, AppendToFull('HTT:', 24)+FormatFloat('0.0 MHz', CPUInfo[i].Clocks{[i]}.Bus))
else writeln(fTextFile, AppendToFull('FSB:', 24)+FormatFloat('0.0 MHz', CPUInfo[i].Clocks{[i]}.Bus));
if CPUInfo[i].Clocks{[i]}.FSB<>0 then writeln(fTextFile, AppendToFull('Bus Speed', 24)+FormatFloat('0.0 MHz', CPUInfo[i].Clocks{[i]}.FSB));
writeln(fTextFile);
end;
writeln(fTextFile);
writeln(fTextFile, 'Motherboard Info:');
writeln(fTextFile, '----------------');
if fPCIInfo.NorthBridge.Detected then writeln(fTextFile, AppendToFull('Northbridge:', 24)+fPCIInfo.NorthBridge.DeviceDescr);
if fPCIInfo.SouthBridge.Detected then writeln(fTextFile, AppendToFull('Southbridge', 24)+fPCIInfo.SouthBridge.DeviceDescr);
if Monitoring.ChipCount>=1 then writeln(fTextFile, AppendToFull('SuperIO Sensor', 24)+Monitoring.ChipNameStr+' on '+Monitoring.BusAccessStr);
writeln(fTextFile);
writeln(fTextFile);
writeln(fTextFile, 'CPU ID flags:');
writeln(fTextFile, '-------------');
writeln(fTextFile, ' eax ebx ecx edx');
for i:=0 to 5 do
begin
Write(fTextFile, 'Function '+(IntToHexForm($00000000+i, 8))+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Standart[i].regEAX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Standart[i].regEBX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Standart[i].regECX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Standart[i].regEDX, 8));
Writeln(fTextFile);
end;
for i:=0 to 8 do
begin
Write(fTextFile, 'Function '+(IntToHexForm($80000000+i, 8))+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Extended[i].regEAX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Extended[i].regEBX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Extended[i].regECX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Extended[i].regEDX, 8));
Writeln(fTextFile);
end;
for i:=0 to 7 do
begin
Write(fTextFile, 'Function '+(IntToHexForm($80860000+i, 8))+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Transmeta[i].regEAX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Transmeta[i].regEBX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Transmeta[i].regECX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Transmeta[i].regEDX, 8));
Writeln(fTextFile);
end;
for i:=0 to 1 do
begin
Write(fTextFile, 'Function '+(IntToHexForm($C0000000+i, 8))+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Centaur[i].regEAX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Centaur[i].regEBX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Centaur[i].regECX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Centaur[i].regEDX, 8));
Writeln(fTextFile);
end;
for i:=$E to $F do
begin
Write(fTextFile, 'Function '+(IntToHexForm($8FFFFFF0+i, 8))+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Mystery[i].regEAX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Mystery[i].regEBX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Mystery[i].regECX, 8)+' ');
Write(fTextFile, IntToHexForm(CPUInfo[CurrentCpuNum].CPUdata{[CurrentCpuNum]}.Mystery[i].regEDX, 8));
Writeln(fTextFile);
end;
writeln(fTextFile);
writeln(fTextFile);
writeln(fTextFile, 'PCI dump:');
writeln(fTextFile, '---------');
writeln(fTextFile);
fPCIInfo.ScanPCIBus;
if Low(fPCIInfo.PCIDevices)<=High(fPCIInfo.PCIDevices) then
for i:=Low(fPCIInfo.PCIDevices) to High(fPCIInfo.PCIDevices) do
begin
str:='Bus: '+format('%x', [fPCIInfo.PCIDevices[i].dwBus])+' Dev: '+format('%x', [fPCIInfo.PCIDevices[i].dwDev])+' Func: '+format('%x', [fPCIInfo.PCIDevices[i].dwFunc]);
writeln(fTextFile, str);
str:='Device Class: '+fPCIInfo.PCIDevices[i].ClassDescr;
writeln(fTextFile, str);
str:='';
for j:=0 to $FF do
begin
if j mod 16 = 0 then begin writeln(fTextFile, str); str:=''; end;
str:=str+IntToHexForm(fPCIInfo.PCIDevices[i].DeviceDump[j], 2)+' ';
end;
writeln(fTextFile);
writeln(fTextFile);
end;
CloseFile(fTextFile);
end;
if isDialog then fSaveDialog.Destroy;
end;
procedure TMainFrm.TextRepBTMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
TextRepBTB.Color:=$00D2BCAA;
MakeTextReport(true);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -