Contributor: SWAG SUPPORT TEAM        

{
    Subject: How to determine mhz using TP6.0...

It seems to work pretty well, but on a 486/33DX it gave inacurate results...
}

Program CpuSpeed;
Uses
  Crt;
Var
  Speed, DelayCalibrate : Word;
Const
  Offset = 9; { For TP 4.0, it should be 16 }


Procedure WaitForFloppy;
Var
  tickTil     : LongInt;
  TimerTicks  : LongInt Absolute $40 : $6C;
  motorStatus : Byte Absolute $40 : $3F;
begin
  if MotorStatus and $F > 0 then
  begin
    WriteLn('Loading...');
    TickTil := TimerTicks + 91;
    {There are $17FE80 ticks in a day}
    if TickTil > $17FE80 then
      Dec(TickTil, $17FE80);
    Repeat Until (MotorStatus and $F = 0) or (TimerTicks >= TickTil);
  end;
end;

begin
  WaitForFloppy;
  DelayCalibrate := MemW[Seg(CheckSnow): Ofs(CheckSnow)+Offset];
  WriteLn('Delay calibration value is ', DelayCalibrate);
  Speed := ((LongInt(1000) * DelayCalibrate) + 110970) div 438;
  Write('Calculated speed: ', Speed div 100,'.');
  WriteLn((speed div 10) MOD 10, speed MOD 10);
  Write('CPU speed is probably ');
  Case Speed OF
    0..499     : WriteLn('4.77MHz or below');
    500..699   : WriteLn('6MHz');
    700..899   : WriteLn('8MHz');
    900..1099  : WriteLn('10MHz');
    1100..1399 : WriteLn('12MHz');
    1400..1799 : WriteLn('16MHz');
    1800..2199 : WriteLn('20MHz');
    2200..2699 : WriteLn('25MHz');
    2700..3599 : WriteLn('30MHz');
    ELSE
      WriteLn('30MHz or MORE!');
  end;
end.