Mein WIN98 ist zu schnell für Pascal 7.0 / Runtime Error 200

  • Redest du vom Runtime Error 200? (Fehler in der Unit CRT der dazu führt dass Pascalprogramme ab etwa 233MHz Prozessorgeschwindigkeit direkt beim Start abstürzen - dafür gibts Patches)

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

  • Ja , es ist Runtime Error 200


    Danke habe ein Patch gefunden für das EXE-Programm
    Jetzt funktioniert es.


    Aber es ist nicht gut, wenn man sich mühe gibt gute schnelle Programme zu schreiben und ist dann umsonst.
    Dann kann man auch gleich schlampige Programme schreiben....


    Gruss

    Einmal editiert, zuletzt von funkheld ()

  • Aber es ist nicht gut, wenn man sich mühe gibt gute schnelle Programme zu schreiben und ist dann umsonst.Dann kann man auch gleich schlampige Programme schreiben....

    Der Patch funktioniert anders. Das Programm wird nicht langsamer. Der Schleifenzähler, der bei TP sonst ab etwa 200 MHz überläuft und auch zum Crash führt, wird einfach seltener hochgezählt.

  • Der Schleifenzähler

    Genauer gesagt: Die Initialisierungsroutine für die Funktion Delay läuft über.
    Einfach gesagt zählt Die Unit bei der Initialisierung eine gewisse Zeit lang Schäfchen und berechnet aus der Anzahl der gezählten Schäfchen wie lange der Prozessor zählen muss um 1ms beschäftigt zu sein.
    Dieses Wissen wird dann für die Funktion Delay genutzt.


    DAS ist schlampige Programmierung - zumindest aus heutiger Sicht, seinerzeit war dies recht normal - bei Singletasksystemen ist die vergeudete CPU-Zeit egal und Stromsparen kannte man damals auch noch nicht.


    PS. lass doch einfach die Unit CRT weg, das meiste funktioniert auch ohne.
    PPS. Der Patch macht auch nichts langsamer, da wird nur die Delayroutine und ihre Initialisierung geändert.


    BTW. Windows lief beim K6 in einen ähnlichen Fehler weil der Loopbefehl im K6 rattenschnell war: https://www.heise.de/ct/artike…sorgefluester-285254.html (ganz unten :D )

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

    Einmal editiert, zuletzt von Dosenware ()

  • Zitat

    ...und auch zum Crash führt, wird einfach seltener hochgezählt.


    Das merkt man , wenn man eine saubere Bewegung mit Sprite hat in der DosBox.


    Die Bewegung ist dann im Win98 unruhiger und ruckelt ungleichmäßig.
    Es macht die Grafik unansehnlich.


    Zitat


    PS. lass doch einfach die Unit CRT weg, das meiste funktioniert auch ohne.


    Das ist halber kram.


    Gruss

  • Die Bewegung ist dann im Win98 unruhiger und ruckelt ungleichmäßig.

    Das liegt eher am Multitasking von Windows - Dosprogramme sind es nicht gewohnt dass sich noch jemand CPU-Zeit abzwackt.

    Das ist halber kram.

    Warum? Die wohl wichtigsten Routinen die wegfallen sind readkey, delay und gotoxy - die kann man sich recht einfach selberbasteln. Die Write- und Readbefehle hingegen sind alle noch da.

    Von allen Dingen auf Erden ist die Intelligenz am gerechtesten verteilt: Jeder glaubt, er hätte genug davon.

  • Ich programmieren gerne mit Pascal und habe mir schon vor rund 20 Jahren einen eigenen Ersatz für die CRT geschrieben.
    Die Units habe ich auch bei meinem Treiber für Opti Soundkarten genutzt und auf GitHub zur freien Verfügung gestellt. Die findet ihr hier


    Einmal die TEXTMODE.PAS für Bildschirmausgaben. Daneben könnte auch die m MISC.PAS interessant für euch sein. :)

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Zitat


    Das liegt eher am Multitasking von Windows - Dosprogramme sind es nicht gewohnt dass sich noch jemand CPU-Zeit abzwackt.


    Da ist aber mehr drin:


    Ihr wollt mir unbedingt euer Bier verkaufen.

  • Das sieht ja gut aus.


    Hast ja richtig Erfahrung mit dem Turbo Pascal


    Werde ich morgen mal testen ob es damit weiter läuft bei mir ohne die Crt im Borland Pascal 7.0
    und mit deiner Ergänzung.


    readkey vermisse ich , brauche ich für die case.


    Habt mich jetzt erstmal überzeugt.


    Musst mir als Anfänger nur noch zeigen wie ich diese TPU für TP 7.0 aus deinem konstrukt gemacht werden.
    Es geht darum wie werden eigentlich TPU erstellt.


    Danke.
    Gruss

    4 Mal editiert, zuletzt von funkheld ()

  • In meiner MISC.PAS findest du einmal getkey und einmal catchkey. Getkey wartet wie readkey auf den Tastendruck, catchkey holt den Tastencode ohne zu warten, was nützlich in Spielen ist.
    Ich habe nur die Funktionen in meinen Units, die ich oft brauche und bei weitem nicht alles aus der CRT. Mehr als delay, Tastatur und Bildschirmausgaben habe ich eigentlich nie gebraucht oder immer selber in Assembler geschrieben, weil es schneller war.


    Ich habe die Prozeduren und Funktionen teilweise anders benannt, damit ich im Fall der Fälle auch die CRT noch nutzen konnte.
    Xdelay, getkey usw. In meiner Textmode unit sind auch deutlich mehr Funktionen für die Textausgabe, das zeichnen von Fenstern usw.


    Verkaufen oder aufdrängen will ich hier niemandem was. Nur einfach als eine mögliche Hilfe/Lösung anbieten, da es ja hier gut zum Thema passt. :)

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

    Einmal editiert, zuletzt von Dragonsphere ()

  • Catchkey liefert den Wert einer gedrückten Taste zurück ohne auf sie zu warten.
    Du suchst ja das Pendant zu keypressed und das ist bei mir iskeypressed.
    Also:

    Code
    while iskeypressed do getkey;
    repeat
    Patterndraw:
    Until iskeypressed;

    Die while-Schleife löscht eventuell noch vorhandene Tastendrücke im Tastaturpuffer.


    Du kannst aber natürlich gerne meinen Code anpassen und die Funktionen bennennen wie du willst. Also aus dem iskeypressed ein keypressed o.ä.

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Hallo, guten Tag.


    Bei manchen Programmen kommt noch die Meldung "Run Time Error 200" obwohl die CRT draussen ist.


    Gibt es noch einzelne versteckte Routinen.


    Gruss

    Einmal editiert, zuletzt von funkheld ()

  • Das sollte nicht so sein. Wenn es nur bei manchen Programmen auftritt, muss es ja an einer dort verwendeten Unit o.ä. liegen.
    Oder irgendwo tritt tatsächlich eine division durch 0 oder ein Überlauf einer Variable aus anderen Gründen auf.
    Ich habe mal den blöden Fehler gemacht und in einer eigenen Unit "uses CRT" versehentlich drinnengelassen. Da war ich auf der Suche nach einem Bug gewesen und hatte die CRT reingenommen, um schnell mit writeln die Inhalte einer Variable ausgeben zu können. Als der Fehler gefunden war, habe ich die Ausgabe der Variable rausgenommen, aber die CRT vergessen. :S Fiel mir dann erst viel viel später auf, als ich die Rückmeldung bekam, mein Programm würde auf schnellen Rechnern nicht laufen. Ich habe auch keinen DOS PC mit mehr als 300 MHz, mir selbst fällt das also gar nicht auf :D

    Meine DOS-Rechner:

    Kleiner Industrie-486er mit 100 MHz (Intel 80486DX-4), 32 MB SD-RAM, Diamond SpeedSTAR 24 und SB 16 ( CT2770 ) + TNDY

    "Frankenstein" Pentium II mit 266 MHz, Elsa Winner 1000 TrioV + Voodoo I, SB 16 (CT2290) + Yamaha DB50XG


    Von mir geschriebene DOS-Programme gibt es hier.

  • Hallo, guten Tag.


    Ich habe jetzt Turbo Pascal 6.01 installiert.
    Und habe keinen absturz mehr mit Runtime Error 200.
    Ich möchte jetzt 6.01 beibehalten.


    Was ich noch nicht erkenne sind die Unit.
    Die heissen wie ich erkannt habe INT , ist das richtig ? und befinden sich
    komischerweise in einem Ordner DOC.



    Gruss

    Einmal editiert, zuletzt von funkheld ()

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!