unit timer18;
interface
function Clock : longint;
{время, прошедшее с запуска программы в 1/18 с}
procedure ResetTime; {сброс всех показаний времени в 0}
function GetFPS : single;
{текущее число кадров в секунду}
{необходимо вызывать 1 раз в каждом кадре}
implementation
var
ZeroClock : longint; {время запуска программы}
LastFPSclock : longint; {-»- последнего запроса FPS}
Days : longint; {номер дня}
LastClock : longint; {время предыдущего запроса}
NumberFrames : integer; {счетчик кадров}
FPS : single; {число кадров в секунду}
function Clock : longint;
{время, прошедшее с запуска программы в 1/18 с}
var t : longint;
begin
t := meml[Seg0040:$6c] - ZeroClock;
if t < LastClock then begin {переход на след. сутки}
inc(Days);
end;
LastClock := t;
Clock := t + days*1573040; {1 сутки - 1573040}
end;
procedure ResetTime; {сброс всех показаний времени в 0}
begin
ZeroClock := meml[Seg0040:$6c];
LastFPSclock := 0;
NumberFrames := 0;
FPS := 0;
Days := 0;
LastClock := 0;
end;
function GetFPS : single;
{текущее число кадров в секунду}
var
c : longint;
e : single;
begin
inc(NumberFrames);
c := Clock;
if (c - LastFPSclock) >= 18 then begin
{интервал времени измерения не меньше 1 с}
FPS := NumberFrames / (c - LastFPSclock) * 18.2;
NumberFrames := 0;
LastFPSclock := c;
end;
GetFPS := FPS;
end;
begin
ResetTime;
end.