Program EnableCyrix;
{Test for CYRIX CPU first}
procedure enable_cyrix_cpuid;
assembler;
asm
cli
{Get Cyrix reg c3h}
mov al,0xc3
out $22,al
in al,$23
{Enable config access}
mov cl,al
mov bl,al
and bl,0xf
or bl,0x10
{Set Cyrix reg c3h}
mov al,0xc3
out 0x22,al
mov al,bl
out 0x23,al
{Get Cyrix reg e8}
mov al,0xe8
out 0x22,al
in al,0x23
{Set "CPUID" bit}
or al,0x80
mov bl,al
{Set Cyrix reg e8}
mov al,0xe8
out 0x22,al
mov al,bl
out 0x23,al
{Get Cyrix reg fe}
mov al,0xfe
out 0x22,al
in al,0x23
{Is CPU a 6x86(L)?}
and al,0xf0
cmp al,0x30
jne @not6x86
{Get Cyrix reg e9}
mov al,0xe9
out 0x22,al
in al,0x23
{Fix 6x86 SLOP bug}
and al,0xfd
mov bl,al
{Set Cyrix reg e9}
mov al,0xe9
out 0x22,al
mov al,bl
out 0x23,al
@not6x86:
{Set Cyrix reg c3}
mov al,0xc3
out 0x22,al
mov al,cl
out 0x23,al
sti
end ['eax','ebx','ecx','edx'];
begin
writeln('Enabling...');
enable_cyrix_cpuid;
writeln('Enabled.');
end.