Re^2: DOS mir welcher max. CPU?
Hi,
kurze Präzisierung zu dem was Reinhard gesagt hat (weil ich durch Zufall gerade an sowas arbeite):
bei steigender CPU-Geschwindigkeit nicht mehr laufen. Meist
ist eine Zeitschleife schuld, die zu Ergebnissen führt, die
sich der Programmierer damals nicht vorstellen konnte.
Stimmt genau. Schuld ist meistens eine Initialisierung eines Befehls, der "Delay" oder so hieß und ein Programm für eine gewisse, meist kurze Zeit anhielt. Meistens, um Animationen o.ä. zu steuern. Da es niemals "den" PC gab (weil in tausend Varianten erhältlich), musste ein Programm herausfinden, wie schnell der aktuelle PC eigentlich ist, um ihn z.B. für eine 1/100 Sekunde anzuhalten. Einzige Möglichkeit: austesten.
Die einzige Konstante war schon immer der Timer-Chip, der unter DOS i.d.R. 18.2/Sek.-mal "Tick" sagte. Also: Routine in den Timer-Interrupt klemmen, auf Tick warten, Variable in einer Schleife hochzählen bis zum nächsten Tick, Wert speichern. Ein Schleifendurchlauf bis zu diesem Wert entspricht also ca. 1/18 Sek. Bei Aufruf von Delay einen lockeren Dreisatz durchrechnen, einen Wert Y kalkulieren (in Abhängigkeit von der gewünschten Wartezeit), bis dahin hochzählen.
Viele Programmierer haben leider vergessen, bei der Auslieferung der endgültigen Version ihrer Programme die Debugger-Option "Overflow Check" auszuschalten. Moderne Rechner zählen innerhalb 1/18 Sek. weiter, als die o.g. Variable zulässt, d.h. z.B. > 64K. Das führt dann natürlich zu einem Runtime-Error.
Mir bekannte Abhilfe: keine. Außer, ins BIOS gehen, und den Rechner zu einer lahmen Ente machen.
Grüsse,
Tim