Nachdem dieser Fehler schon zigmal im Forum diskutiert wurde, hier seine Geschichte und die möglichen Lösungen für Benutzer und Entwickler. Die Grundlagen für diesen Artikel stammen von dieser englischsprachigen Seite von Klaus Hartnegg der Uni Freiburg.
Eine Einleitung
Der Pascal-Compiler von Borland ist zwar gut, aber die Firma kümmert sich schon lange nicht mehr um ihn. So brechen alle mit Turbo/Borland Pascal 7 kompilierten Programme, die die Unit Crt beinhalten auf Rechnern schneller als 200 MHz mit der folgenden Fehlermeldung ab:
Error 200: Division by zero bzw. Runtime error 200 at ...
Angeblich tritt bei mit der Version 6 kompilierten Programmen kein Laufzeitfehler auf, dafür ist die delay-Zeit völlig falsch.
Es existiert keine offizielle Lösung von Borland (bzw. Inprise).
Die Ursache
Der Fehler findet sich in der Inizialisierung der delay-Prozedur, die Teil der Inizialisierung der Crt-Unit ist. Die delay-Inizialisierung wird in jedem Programm aufgerufen, das die Crt-Unit enthält, nicht nur da, wo die delay-Prozedur verwandt wird.
Diese Inizialisierung zählt, wie oft eine einfache Schleife durchlaufen wird, um eine Pause von 55 Millisekunden hervorzurufen. Die Zeit wird hierbei durch das Auslesen des BIOS Time Counters an Speicheradresse 40:6C gemessen, der etwa 18.2 mal pro Sekunde »tickt«, also alle 55 Millisekunden.
Diese Zahl wird dann durch 55 dividiert, um die Anzahl der Schleifendurchläufe pro Millisekunde zu erhalten. Das Ergebnis wird in einer Word-Variable (16 Bit) gespeichert. Der Überlauf dieser Variable ruft den Laufzeitfehler hervor. Die Bedeutung des Fehlers 200 ist eigentlich »Division durch Null«, wird in diesem Fall aber durch den Überlauf erzeugt.
Die Lösungen
Wenn Sie nur die kompilierte exe-Datei besitzen
Fragen Sie den Programmierer nach einer neuen oder neu kompilierten Version.
Das Patch-Programm der Computerzeitschrift c't. Hier besteht das selbe Problem, wie bei allen diesen Patches: Verwendet das zu patchende Programm die delay-Prozedur, läuft diese nicht mit der korrekten Geschwindigkeit ab. Bei Programmen, die ein präzises Timing benötigen, kann das zu Problemen führen. Außerdem wird der Patch vielleicht nicht mehr auf zukünftigen (noch schnelleren) Computern funktionieren. Die im Original-Archiv enthaltenen Runtime Library Patches (RTL, Laufzeitbibliothek) sind allerdings fehlerbehaftet und daher nicht in der hier zum Download angebotenen Version enthalten.
Empfohlenes Archiv mit Patch-Programm und Readme-Datei: tp_patch_ct.zip
Original-Archiv mit fehlerhaften RTL-Patches: ftp://ftp.heise.de/pub/ct/ctsi/bppatch.zip
Benötigen Sie korrektes Timing in Ihren Programmen, können Sie mit dem folgenden Patch experimentieren. Es handelt sich um ein speicherresidentes (TSR) Programm, das den Fehler auffangen soll, wenn das fehlerhafte Programm gestartet wird. Das Programm unterliegt der GNU Library GPL, wird also mit Quelltext geliefert. Vielleicht haben Sie Glück und erzielen den gewünschten Effekt. Vielen Dank an Robert Riebisch für die Verbesserung und den Hinweis auf die Alternative.
Download inkl. Quelltext: http://www.kurnik.pl/~maf/tp7p5fix.zip
Homepage des Autors Marek Futrega: http://www.kurnik.pl/~maf/
Alternative von Veit Kannegieser: http://kannegieser.net/veit/programm/r200fix.arj
Wenn Sie den Sourcecode und den Turbo Pascal Compiler besitzen
Dieser Patch von Klaus Hartnegg fixt die Datei turbo.tpl (und tpp.tpl von Borland Pascal falls nötig, diese Dateien enthalten die RTL). Anders als der Patch im Original-Archiv der c't funktioniert dieser auch mit der Version 7.01 von TP. Führen Sie das Programm in dem Verzeichnis aus, das die turbo.tpl enthält und kompilieren Sie danach Ihre Programme neu. Das Problem sollte beseitigt sein.
Download: tp_patch_fix.zip
Die delay-Prozedur in der folgenden Unit wurde so abgeändert, dass sie ohne Probleme funktionieren sollte. Außerdem enthält die Unit eine »Falle«, die den 200er-Fehler bei Auftreten abfängt, das Programm am Abbruch hindert und normal fortführt. Nebenbei wird versucht, das Verhalten von delay in Multitasking-Umgebungen zu verbessern.
Anwendung: Binden Sie zuerst diese Unit ein, dann die Crt und dann alle weiteren Units. Dann rekompilieren Sie Ihre Programme.
Einsatzbereite kompilierte Unit und Sourcecode: tp_patch_newdelay.zip
Homepage des Autors: http://fjf.gnu.de/bp-progs.html#NewDelay
Nach oben
© 2000-2010 Clemens Weiß | Webplain.de
Link zu dieser Seite | Letzte Änderung: 26. Okt. 2008
Kommentare
Es gibt 29 Kommentare zu »Runtime Error 200«.
Neuen Kommentar posten...
1 Am 03. Sep. 2002 schrieb Christian Lübbe:
Kann mir jemand sagen wohin mit den Patches, weil ich habe sie zwar gedownloaded, aber weiß nicht was ich machen soll. Und Programme schreiben ohne sie ausführen zu können ist WIRKLICH Scheiße!!!
2 Am 04. Sep. 2002 schrieb Clemens Weiß:
@Christian:
Welchen Patch hast du denn runtergeladen? Wahrscheinlich tp_patch_fix.zip. Den musst du in das Verzeichnis mit der turbo.tpl entpacken (meistens \TP\BIN) und dort ausführen (wies im Text steht).
3 Am 04. Nov. 2002 schrieb H2FloH:
hab nen PIII 933MH und musste das letzte byte noch höher setzten , damit das programm läuft ;)
4 Am 09. Nov. 2002 schrieb Dirk:
Auf einem PII mit 400 MHz war die Welt noch in Ordnung. Bei 2,4 GHz scheint das Ende der Fahnenstande erreicht zu sein.
"Programmierer der Welt erhebt euch" und helft mir, damit ich auch weiterhin mit TP arbeiten kann.
5 Am 12. Nov. 2002 schrieb Clemens Weiß:
@Dirk:
Auf [www.merlyn.demon.co.uk] habe ich folgendes gefunden:
----------------------
Pedt Scragg has written a replacement Crt unit, which contains a number of improvements including the RTE200 fix; it is available via PDCU (http://www.pedt.demon.co.uk/crt/) and at Garbo (crt.zip) (ftp://garbo.uwasa.fi/pc/turbopas/crt.zip). Be very sure to install it both fully and correctly, using TPUMOVER (for which see the Tools manual, or TP7/BP7 online Help). The two libraries TURBO.TPL and TPP.TPL are updated independently. TURBO.TPL is used for both TP7 and BP7 real-mode; TPP.TPL is used by BP7 protected-mode.
To check installation, compile (with Options, Compiler, Debugging Information all OFF; or with the source name unchanged), a small test program (BP7: in each mode) both before and after updating the libraries, verify that the first (of each) fails with RTE200, verify with DOS FC that the second (of each) differs from the first, and that the second does not give RTE200.
It appears that this is an ideal solution for those willing to update their issued library TURBO.TPL and/or TPP.TPL files; it should suffice until CPU speeds reach ~ 100 GHz or more. It also cures wrong delays in programs compiled with versions before TP7.
----------------------
Ich kanns nicht ausprobieren, sag mal bescheid, obs funktioniert.
6 Am 05. Dez. 2002 schrieb Hagen Frey:
Ende der Fahnenstange! Liebe Informatiklehrer, steigt bitte gleich zu www.freepascal.org um. Nach 15 Jahren TurboPascal, die letzten drei immer weiter gepatcht, bin seit einem halben Jahr zufriedener FreePascal-Nutzer. Allerdings hat mein Sohn jetzt in IT gerade Turbo-Pascal, da muss ich den alten Patch mal wieder vorkramen.
7 Am 22. Jan. 2003 schrieb da_usa:
hab ein ähnliches prob. allerdigs geht bei mir der patch nicht! ich hab mal was gehört dass man den rechner irgendwie langsamer machen kann, kann mir wer sagen wie des gehn soll und wo ich die software finde??
thx@all
da_usa
8 Am 24. Jul. 2003 schrieb Storm-Master:
Kleiner Tipp wie's jedenfalls bei mir geht:
Ganz oft hintereinander die EXE starten, am besten 8-10 mal mittels Mausklick (zum Markieren des Icons) und Enter (zum Ausführen) auf die EXE gehen. Es werden sich jetzt dutzende Fenster öffnen.
Wenn's nicht geht, alle Fenster wieder schließen und nochmal von neu beginnen. Irgendwann gehts!!! Eins davon wird funktionieren....
"Division by zero" kommt zu Stand, weil das Programm höchstwahrscheinlich die Geschwindigkeit ermitteln will. Bei schnellen Rechnern 500+ MHz kommt soetwas schon vor.
Lösung: Das Programm "slowdown" verlangsamt die EXE. Es gibt aber auch andere gute Tools. Sucht einfach in Google danach.
Weitere Fragen könnt ihr auch per Mail schicken !
cu, Storm-Master
9 Am 07. Aug. 2003 schrieb Christian Hanisch:
Hmmmmm...
Ich denke jeder von euch sollte mal moslo testen.. Um das Runtime Error Problem vorerst zulösen.. Ist wenigstens eine gute Möglichkeit.. Es verlangsamt das Komplierte Turbo Pascal Programm... Und kann damit das Problem so lösen..
Hier einpaar Links dazu.. ;-)))
[www.waszumclique.de]
[www.mogelpower.de]
[unseretollepage.de]
10 Am 24. Okt. 2003 schrieb PoC:
hm also sogar ff liefert kein anderes ergebnis als nen runtime error 200 .....
11 Am 17. Nov. 2003 schrieb dozer:
Auf [www.kreideholen.de] gibt's Patches und das TSR tp7p5fix.exe! Es fängt den Fehler ab und ist damit für 'unpatchbare' Programme geeignet.
12 Am 26. Apr. 2004 schrieb Eike:
Kurze Frage wie muss ich denn jetzt mit der Turbo tpl datei weiter verfahren? Hab die jetzt auf meinen Rechner geladen und dann?
13 Am 28. Mai. 2004 schrieb Franz Bachler:
Eine andere Möglichkeit, um widerspenstige Pascal-Programme zum Laufen zu bringen ist der DOSBOX-Emulator, welcher unter
[dosbox.sourceforge.net]
frei erhältlich ist.
Dieses Programm emuliert einen PC mit MS-DOS in einem Windows-Fenster und dementsprechend "gebremst" ist dann dieser emulierte Rechner.
Und das haut auch bei Pascal-Programmen hin, welche nicht gepatcht werden können, weil sie z. B. mit "WWPACK" komprimiert worden sind. (Übrigens: WWPACK ist selbst von diesem Bug betroffen.)
So konnte ich ein z. B. Atlasprogramm aus dem Jahre 1991 wieder zum Laufen bringen.
14 Am 05. Dez. 2004 schrieb Robert AH Prins:
From V1.63 of the c.l.p.b mFAQ:
**********************************************************************
4.2.2 Replacement CRT units for download
**********************************************************************
Following work on a replacement CRT unit to primarily fix the RTE200
bug in T/BP7, two replacement CRT units are now completed. CRT units
are included for TP V5, 5.5, 6.0 and 7.0x including protected mode
units for BP7.0x. Pedt Scragg's ZIP file also includes precompiled
units for Delphi 1. Robert Prins' unit contains all .OBJ files so
# that users of D1 can roll their own. This unit is included in
# BPL70V20.ZIP.
The replacement CRT units also include code to allow use of extended
keys such as F11 and F12 with ReadKey and, if using other than 40x25
text mode or 80x25,43,50 text mode should not reset text screen to
80x25.
Be aware that the unit by Robert Prins (rpcrt100.zip) contains 386
instructions. It will not run on 8086/88/286 systems, but does not
test for such systems!
Pedt Scragg's unit:
Information at [www.pedt.demon.co.uk] including download
links.
Download directly from:
[www.signpost-design.co.uk]
[ftp.demon.co.uk]
[garbo.uwasa.fi]
Robert Prins' unit:
[garbo.uwasa.fi]
15 Am 18. Mär. 2005 schrieb Chrikra:
Auch by mir kommt der Division by Zero Fehler...
Habe mir den Patch tp_patch_ct geholt udn auch dieses moslo da das andere net ging, aber mir helfen beide nichts wenn ich net GANZ GENAU weiß was ich damit tun muss? Ich muss es entpacken klar... Doch dann? Wohin muss ich es ziehen? Wann muss ich es ausfüphren? Muss ich es unbenennen?
Frage über fragen
16 Am 19. Mär. 2005 schrieb Clemens Weiß:
Zitat:
Wenn du dich auf den c't-Patch beziehst, das Archiv enthält eine Readme-Datei, in der genau steht, was du machen musst...
Moslo kenne ich nicht, ist ja auch nicht meine Empfehlung.
Zitat:
??? Den Patch? Nirgendwohin...
Zitat:
Nur einmal auf der Kommandozeile mit deinem fehlerhaften Programm, dann sollte es funktionieren. Du hast schon verstanden, dass der Patch nur bei schon kompilierten Programmen hilft?
Zitat:
Nein. Aber das Programm musst du nach dem Patchen von *.sar in *.exe umbenennen (wie's in der Readme steht).
17 Am 03. Mai. 2005 schrieb Profanter Stefan:
Wohin muss ich die tp7p5fix.zip entpackten Dateien hineingeben???
18 Am 09. Jun. 2005 schrieb Weismann:
Wenn ich das alles richtig verstanden habe, kann ich nur "eigene" Programmfehler damit beheben. Bei mir ists so, dass ich die aktuelle Rechnung von T-online ausdrucken möchte und zack: runtime error ! Da komm ich doch gar nicht in eine exe.datei. Was also kann ich da tun ?
19 Am 13. Jul. 2005 schrieb Stefan Blaschke:
Hallo liebe Pascal Comunity!
Ich brauche für meine Arbeit ein Millisekunden genaues Timing. Habe bisher immer mit einem alten DOS Rechner gearbeitet um in Pascal zu programmieren, werde jetzt aber umsteigen auf einen sehr neues Notebook (Pentium 4 mit 2,8 GHz). Da die DELAY Funktion -soweit ich das richtig verstanden habe- immer abhängig ist von der Taktrate, die in der CRT anfangs ausgelesen wird, dürfte ich Probleme bekommen, wenn man die CRT nur austrickst. Was habe ich von daher unter "Die delay-Prozedur in der folgenden Unit wurde so abgeändert, dass sie ohne Probleme funktionieren sollte." zu verstehen? Wie genau ist die Funktion dann noch(sie muss mehr als problemlos funktionieren)? Wurde mal exakt nachgemessen, wie genau sie dann noch ist? Nach welchem Prinzip wird das Timing bestimmt(immer noch nach der Taktrate oder über einen anderen Interrupt)?. Paßt sich die Korrektur der jeweiligen Taktrate an?
Hat jemand schon mal Erfahrungen mit SuperDelay v1.1a von Allen Cheng (1997) gemacht(Download z.B. unter [www.blume-programm.de] möglich)?
Wie sind die Umlauf befindlichen WAIT Funktionen zu bewerten?
20 Am 18. Jul. 2005 schrieb Benjamin Beichler:
Also SuperDelay kann man knicken ... das Benchmarkprogramm dafür stürzt schon mit nem Runtime error 200 ab ...
21 Am 16. Aug. 2005 schrieb Clemens Weiß:
Das erwähnte Programm Slowdown zum Verlangsamen des PCs kann man kostenlos unter [toolsandmore.de] herunterladen.
22 Am 15. Sep. 2005 schrieb Steen:
Re: Error 200
I have the problem with an old DOS-program and a new computer. According to the programmer it is not possible to re-compile any more.
None of the proposed solutions work, neither tppatch nor R200. I STILL get Error 200.
My processor is: AuthenticAMD AMD Sempron(tm) 2400+
My operating system is: Microsoft Windows 98 4.10.2222 A
Do anybody hae an idea what to do?
Best regards
Steen
23 Am 16. Okt. 2005 schrieb SOnic:
Bitte sagen Sie doch genau, was "Fehler 200: Division durch Null" bedeutet!!!
DANKE
24 Am 17. Okt. 2005 schrieb Ludovico:
Ich habe ein (wenn auch etwas kompliziertes) Work-around für den Einsatz von TDB.EXE (exemplarisch für ein RTE200-TP-Programm, hier: TDB [Pro = Protected-Mode-Version] eines wundervollen DOS-Datenbanksystems, Turbo Datenbank von Ulrich Kern) auf einem zu schnellen Rechner gefunden (die Nicht-Pro-TDB-Version konnte ich mit TPPATCH.EXE patchen, bei der Pro-Version ging das nicht):
Voraussetzungen:
1. DOS-Partition - unter W2K ist die Reproduzierbarkeit doch zu unzuverlässig
2. slowdown.com von [members.aol.com]
Ablauf (Batch):
1. Bewährtes und für Faulpelze wie mich unerläßliches DOS-TSR-Tastatur-Makro-Programm laden:
newkey
2. Eine Taste (hier F12) für Full Speed [100%] belegen:
newkeysp slowdown.key/m
3. Slowdown-TSR mit 4% (bei 3 GHz Maximum, höherer Wert erzeugt wieder RTE 200) laden, dadurch braucht TDB spürbar lange beim Laden, aber RTE 200 bleibt aus:
slowdown/p:4
4. Datenbank laden:
tdb xxxtomsb.bnk
5. Ein Druck auf F12 setzt jetzt die Verlangsamung außer Kraft (via OS-Shell-Kommando), danach arbeitet TDB zauberhaft schnell. Newkey-Makro (Inhalt von slowdown.key):
{begdef F12}
<esc> [zur Sicherheit]
<alts> ["Sonstiges"]
d ["DOS"]
o ["OS-Shell"]
<enter> [jetzt kann man DOS-Kommandos abschicken]
slowdown/p:100<enter> [Verlangsamung aufgehoben, "100%"]
exit<enter> [zurück zu TDB]
{enddef}
Nach Beenden von TDB:
6. Slowdown-TSR aus dem Speicher raus:
slowdown.com /u
7. Tastatur-Makro-TSR aus dem Speicher raus:
newkeysp.exe /u
Das läuft nun seit 2 Wochen anstandslos ...
25 Am 22. Aug. 2006 schrieb Bob:
Broken link:
[www-user.tu-cottbus.de]
26 Am 17. Sep. 2006 schrieb Tanja:
Hallo,
habe mir den patch runtergeladen und auch in dem ordner entpackt, wo ich alle anderen Dateien von TP gespeicher habe.
aber jedesmal, wenn ich SAR öffnen will, bricht das programm wieder ab. woran kann das liegen?
brauche das für die schule und kenn mich nicht so wirklich aus. habe noch nie einen patch benutzt.
und noch eine frage... was heißt kompilieren genau?
würde mich sehr freuen, wenn mir jemand helfen würde =)
27 Am 24. Sep. 2006 schrieb Michael:
Hallo Tanja,
vorab einige Fragen:
- welchen Patch hast du dir runtergeladen?
- was ist SAR?
Grundsätzlich gilt, daß du Patches nicht nur ins richtige Verzeichnis (bei dir vermutlich Bin) entpacken mußt, sondern (normalerweise durch Starten einer Bat-, Com- oder Exe-Datei) auch anwenden mußt.
Kompilieren heißt, aus einer Textdatei mit Programmanweisungen eine Exe-Datei zu erzeugen.
O.K.?
LG, Michael
Konnte
28 Am 01. Nov. 2007 schrieb Criticon:
BorlandPascal6.0 (und TurboPascal6.0) haben den "Runtime Error 200"-Fehler nicht, beide laufen problemlos auch auf aktuellen PC. Die Unterschiede zu BP7 bzw. TP7 erschienen seinerzeit gross (ProtectedModeProgammierung mit BP7, ein "neuer" Stringtyp und einige zusätzliche Debughilfen zB Overflow-Kontrollen zur Erkennung von WrapArounds). Inzwischen gibt es für diesen Zweck den besseren FreewareCompiler FPC, ein echter 32 (und 64-Bit) Compiler für Dos/Windows/Linux Intel/Mac.. Einziger (Noch)Nachteil gerade für Einsteiger: Seine Entwicklungsumgebung (IDE) kommt an die Spitzenqualität der o.g. BorlandCompiler lange nicht heran (allerdings habe ich- unabhängig von der Programmiersprache- noch nirgends eine bessere IDE als die der BP-Produkte gesehen). Möchte man diese IDE nutzen, dann kann man die Version 5.5 aus dem Borland Museum (link siehe zB wikipedia "TurboPascal") herunterladen (Version6, die gegenüber 5.5 deutliche Erweiterungen aufweist gibts leider noch nicht frei). Damit lassen sich die allermeisten (Schul)Aufgaben wohl lösen - ansonsten bleibt nur FPC, der (auch ohne IDE zB mit QEdit oder einem ähnlichen Editor in einer Dos-Shell ein flottes + gutes) Arbeiten ermöglicht.
"Delay" war wohl noch nie als exakter Timer konzipiert (die genaue Verzögerungszeit des Befehls hängt davon ab, welche (anderen) Aufgaben (IRQs) der PC während der Initialisierung der CRT.tpu noch abzuarbeiten hat)- und sollte deshalb auch nicht für zeitkritische Aufgaben genutzt werden. Hinzu kommt (eine Nachlässigkeit der Entwickler) dass die Verzögerungszeit stark von der Taktfrequenz des PC abhängt wenn dieser "zu schnell ist" ("zu schnell" meint Taktfrequenzen über ca. 50MHz).
29 Am 08. Nov. 2007 schrieb Pöll Gerald:
Habe ein DOS Programm. Beim Straten Tritt RUNTIME ERROR 200 at 0A9F:0091 auf.
Mein Betriebssystem ist WIN98.
Was kann ich tun?