--->also available in English.

Wie Programme doch noch mit dem Cyrix / IBM / ST 6x86 (M1) laufen ...

Als 6x86 - Besitzer kennt man das Problem:
Da will man mal ein neues Programm (meist Demoversionen von Spielen, aber auch einige Anwendungen wie z.B. Dreamweaver 3) ausprobieren, aber statt bunter Bildchen kommt nur eine Meldung wie :

" Dieses Programm versuchte, einen illegalen Befehl auszuführen. (...) "

Für diese Verhalten gibt es 2 Gründe:
Diese Probleme treten auf dem 6x86 MX (M2) nicht mehr auf, da dieser vollkommen Code-kompatibel zum P6 ist (er besitzt sogar - im Gegensatz zu AMD´s K6 (-2) und IDT´s WinChip - die CMOV-Befehle)

Der CPUID - Befehl

Ab dem Pentium (und einigen 486ern) kann man den Typ des Prozessors mittels dieses Befehls auslesen. Viele nachlässig geschriebenen Programme versuchen dies, ohne vorher zu testen, ob der CPUID-Befehl überhaupt verfügbar ist.
Der OpCode des Befehls lautet in Hex-Schreibweise:
  0F A2
Hat er den Fehler verursacht, so findet man genau diese Zeichen an erster Stelle in dem Kasten mit der Aufschrift
" Bytes an CS:EIP :
 0F A2 xx xx xx xx ...
"
Die Abhilfe ist einfach:
Man muß nur den CPUID-Befehl im Prozessor einschalten (Standardmäßig ist er ausgeschaltet, und ALLE mir bekannten BIOSse lassen ihn auch aus!!!)!

Wie das geht?
Ganz einfach: Ich habe mir ein kleines Tool (300 Bytes :-) geschrieben, das dies erledigt.
Nebenbei verringert es auch noch den Stromverbrauch und beseitigt den NOLOCK-Fehler.

Es heißt CYPOWER.COM. Download HERE.
Es ist ganz einfach zu verwenden:
Man ruft es auf (in DOS oder Windows), bevor man es braucht.
Es belegt keinen Speicher, so daß man es am besten ganz oben in seine AUTOEXEC.BAT setzen kann. Die Einstellungen für CPUID, NoLock, etc. bleiben dann bis zum nächsten Reset erhalten (auf vielen Mainboards überleben sie sogar den Druck auf die Reset-Taste).

Seit ich es habe, konnte ich z.B. endlich G-Police spielen...

Der Time-Stamp-Counter

Dieses Problem ist dem ersten ähnlich, aber schwieriger zu lösen.
Beim Time-Stamp-Counter handelt es sich um ein 64-Bit großes Register, welches mit dem Prozessortakt jeweils um den Wert 1 erhöht wird. Dadurch eignet es sich ideal, um den Prozessortakt exakt per Software zu ermitteln.
Intel hatte den Befehl, mit dem man den TSC auslesen kann, zuerst nur für Systemprogrammierer empfohlen.
Leider haben sich etliche Programmierer nicht daran gehalten, wodurch der 6x86 in Probleme gerät:
Er hat den Time-Stamp-Counter nicht... :-(

 Als Abhilfe bleibt demnach nur noch folgendes:
Das Entfernen des RDTSC-Befehls:
Der Befehl zum Auslesen des TSC (RDTSC) besitzt den OpCode
 0F 31.
Man nehme nun einen Hex-Editor, lade damit die .exe oder .dll - Datei, welche das Problem verursacht, und suche nach den Zeichen 0F 31. Achtung, sie tauchen mehrmals auf! Dann überschreibt man diese Zeichen jeweils mit 90 90 (dies bedeutet, die CPU soll zwei Takte lang gar nichts machen).
Danach speichert man die veränderte Programmdatei.
9 von 10 Programmen laufen danach (die Restlichen scheitern an der fehlenden Ermittlung der Taktfrequenz).
Mail an den Autor: webmeister@deinmeister.de

Hauptseite Programmieren Win32Asm Downloads Software Hardware Cartoons+Co Texte Sitemap