--->Diese Seite gibts auch in Deutsch.

How to get programs running on Cyrix / IBM / ST 6x86 (M1)


As an owner of a 6x86 one may already encountered the following problem:
You want to start a program (mainly demos of games, but also some applications like, e.g., Macromedia Dreamweaver), but instead of seeing colorful pictures only a window pops up:

" This program tried to execute an illegal instruction. (...) "

This behavior has two reasons:
These problems do not show off on 6x86 MX (M2) coz this CPU is completely P6 compatible (it also has - in contrast to AMDīs K6 (-2) and IDTīs WinChip - the CMOV-Instructions)

The CPUID instruction

Since the Pentium (and some 486ers) the type of the CPU can be obtained using this opcode. Many dirty coded programs try this without checking if the CPUID instruction is available.
The OpCode of this instruction is (in Hexadecimal):
  0F A2
If it caused the problem on can found it in the popup window as following:
" Bytes at CS:EIP :
 0F A2 xx xx xx xx ...
"

Solving this problem is easy:
Just enable the CPUID instruction (It is disabled by default and all BIOSses I know keep it this way!!!)!

How to do it?
Itīs that easy: I wrote a small Tool (300 Bytes :-) doing this.
It also reduces power consumption and solves the NOLOCK-bug.

It is called CYPOWER.COM. Download HERE.

It is easy to use:
Start it (in DOS or Windows), before you need it.
It does not require memory, so that you can put it into your AUTOEXEC.BAT. The settings for CPUID, NoLock, etc. remain set until resetting the PC (on most mainboards they are even not destroyed by a hardware reset).

since I have it I could play G-Police...

The Time-Stamp-Counter

This case is similar to the first, but more difficult to solve.
The Time-Stamp-Counter is a 64-Bit wide Register incremented by one at each cpu clock cycle. That is why it is ideal for timing purposes.
Intel recommended the instruction for reading the TSC for system programmers only.
However, many programmers did not follow it thus causing problems on 6x86 CPUs:
It does not have the Time-Stamp-Counter... :-(

 As a fix only the following is possible:

Removing the RDTSC-instruction:

The instruction for reading the TSC, RDTSC has the following opcode
 0F 31.
Take your HexEditor, load the .exe or .dll - file causing the problem and search for the string 0F 31. Attention, they may be used several times! Overwrite this string with 90 90 (this tells the CPU not to do anything for two clock cycles).
Save the changed file afterwards.
9 out of 10 programs are running after this patch (the rest has problems with getting the chip speed).
Mail the Author: webmeister@deinmeister.de

Homepage Programming Win32Asm Downloads Software Hardware Cartoons Sitemap