Wartezeiten in Programmen unter Turbopascal

Sofern man zwischen zwei Aktionen in einem PC-Programm darauf angewiesen ist, eine bestimmte Zeit Pause zu machen, zum Beispiel um auf ein Ereignis zu warten, gibt es in Turbopascal die Bibliotheksfunktion "DELAY". Leider funktioniert diese bei Turbopascal 6 nur bis zu einer Taktfrequenz des Rechners von etwa 35 MHz. Als Lösung für schnellere PCs, wie sie heute üblich sind, habe ich folgende kleine Routine geschrieben, die unter Mithilfe des HW-Timer-Bausteins arbeitet:

procedure TimDelay (t : word);
var
  dummy, start : byte;
begin
  while t > 0 do begin
    DEC (t);
    dummy := Port [$40];
    start := Port [$40];
    repeat
      dummy := Port [$40];
    until byte(start - Port [$40]) >= 9;
  end;
end;
        

Demonstieren kann man die Funktion mit einem kleinen Programm, das in deltest.zip als ausführbares Programm samt Quellcode enthalten ist. Das Programm wurde unter DOS (bzw. DOS-Modus von Windows 9x) erfolgreich getestet vom 386/16 MHz über Pentium bis (zur Zeit) zum P3/500MHz (auf den schnellen Rechnern auch im DOS-Fenster unter Windows 9x, wobei die Funktion und insbesondere die zu erzielende Genauigkeit der Wartezeit durch parallellaufende Prozesse beeinträchtigt werden kann).


 

Rainer Müller

Stand vom 22.03.2005