git-svn-id: https://spexeah.com:8443/svn/Asuro@655 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
18
src/cpu.pas
18
src/cpu.pas
@ -78,6 +78,7 @@ type
|
||||
end;
|
||||
TClockSpeed = record
|
||||
Hz : uint32;
|
||||
KHz : uint32;
|
||||
MHz : uint32;
|
||||
GHz : uint32;
|
||||
end;
|
||||
@ -154,19 +155,24 @@ end;
|
||||
procedure getCPUClockSpeed;
|
||||
var
|
||||
t1, t2 : TDateTime;
|
||||
c1, c2 : uint64;
|
||||
c : uint32;
|
||||
|
||||
|
||||
begin
|
||||
c:= 0;
|
||||
t1:= getDateTime;
|
||||
t2:= getDateTime;
|
||||
while (t1.Seconds = t2.Seconds) do begin
|
||||
inc(c);
|
||||
if CPUID.Capabilities0^.TSC then begin
|
||||
t1:= getDateTime;
|
||||
t2:= getDateTime;
|
||||
c1:= getTSC;
|
||||
while (t1.Seconds = t2.Seconds) do begin
|
||||
t2:= getDateTime;
|
||||
end;
|
||||
c2:= getTSC;
|
||||
c:= c2 - c1;
|
||||
end;
|
||||
CPUID.ClockSpeed.Hz:= c;
|
||||
CPUID.ClockSpeed.MHz:= CPUID.ClockSpeed.Hz div 1000;
|
||||
CPUID.ClockSpeed.KHz:= CPUID.ClockSpeed.Hz div 1000;
|
||||
CPUID.ClockSpeed.MHz:= CPUID.ClockSpeed.KHz div 1000;
|
||||
CPUID.ClockSpeed.GHz:= CPUID.ClockSpeed.MHz div 1000;
|
||||
end;
|
||||
|
||||
|
@ -49,6 +49,7 @@ procedure sleep(seconds : uint32);
|
||||
function get16bitcounter : uint16;
|
||||
function get32bitcounter : uint32;
|
||||
function get64bitcounter : uint64;
|
||||
function getTSC : uint64;
|
||||
|
||||
function BCDToUint8(bcd : uint8) : uint8;
|
||||
|
||||
@ -358,6 +359,23 @@ begin
|
||||
get64bitcounter:= bios_data_area.Counters.c64;
|
||||
end;
|
||||
|
||||
function getTSC : uint64;
|
||||
var
|
||||
hi, lo : uint32;
|
||||
|
||||
begin
|
||||
asm
|
||||
PUSH EAX
|
||||
PUSH EDX
|
||||
RDTSC
|
||||
MOV hi, EDX
|
||||
MOV lo, EAX
|
||||
POP EDX
|
||||
POP EAX
|
||||
end;
|
||||
getTSC:= (hi SHL 32) OR lo;
|
||||
end;
|
||||
|
||||
procedure BSOD(fault : pchar; info : pchar);
|
||||
var
|
||||
trace : pchar;
|
||||
|
Reference in New Issue
Block a user