Fehler in TURBO-PASCAL 7  

Auf schnellen Rechnern (etwa ab Pentium II 266 MHz) kommt es zu Problemen mit in Turbo-Pascal erstellten Programmen, die die UNIT CRT benutzen.

Grund:
Da der Systemtimer nur alle 55ms tickt, hat Borland eine eigene Delay-Routine erstellt. Diese ist softwaremig als Warteschleife programmiert. Damit bei verschieden schnellen Rechnern exakte Zeiten erzeugt werden, misst die CRT-Unit bei ihrer Initialisierung die Prozessorgeschwindigkeit, indem sie zwischen zwei Ticks des 
Systemtimers einen 32-Bit-Zhler hochzhlt. Der durch 55 geteilte Zhlerstand ist ein Ma fr die Prozessor-geschwindigkeit und wird spter von der Delay-Routine verwendet.

Leider wurde die Division nur mit 16-Bit programmiert und so kommt es bei der Division bei schnellen Rechnern zu eine berlauf und dies fhrt zu einem Abbruch des Programms mit der (nicht zutreffenden) Fehlermeldung: Division by Zero.
Der Fehler taucht auf, sobald CRT eingebunden wird, also auch, wenn der Delay-Befehl nicht verwendet wird.

Abhilfe:
Nach einem Vorschlag aus c't-7/97 kann man den Fehler durch einen Patch kurieren.

Jede mit Turbo-Pascal 7 kompilierte EXE-Datei, die CRT benutzt, enthlt die Bytefolge F7 D0 F7 D2 B9 37 00 F7 F1.
Man ersetzt nun in der EXE-Datei 37 durch 7E, teilt also durch 110, dadurch passt das Ergebnis auch bei schnellen Rechnern in ein 16-Bit-Register. Nachteil: Delay liefert nun zu kurze Zeiten.

Beim Kompilieren bindet Turbo-Pascal die Routinen aus TURBO.TPL ein.
Dort findet man deshalb dieselbe Byte-Folge und kann den Patch auch dort ausfhren. Dann sind alle knftig compilierten Programme bereits korrigiert.

-------------------------------------------------------------------------------------------
Das im Download eingebundene Programm "Patcher" kann bereits mit TP7 kompilierte Programme patchen. Damit knnen auch viele ltere Programme geheilt werden. (Es gibt z.B. eine Menge alter Matheprogramme, die mit TP7 erstellt wurden).
--------------------------------------------------------------------------------------------
