Sommaire
- Introduction
- Découvrir la présence du Cyrix
- Découvrir la présence du Cyrix 6x86 sans utiliser le CPUID
- Activation de l'instruction CPUID sur un Cyrix 6x86
Introduction
Cette page est réservé exclusivement à la programmation du microprocesseur Cyrix qui ma fois à des propriétés permettant des ajustements de compatibilité tout à fait exceptionnel, cependant, il est un peut victime de ce fait, car pour atteindre cette objectif, il n'est pas configuré à son meilleur!
Cette page ce veut donc une alternative à tous les marchands de pacotille cherchant inlassablement à nous vendre des logiciels pour en tirer le meilleur! Je suis particulièrement révolter de voir que parmi les quelques 200 à 300 pages HTML traîtant de ce fabuleux petit bijoux (quand on sait comment si prendre avec lui), aucun n'offre de code source ou d'exemple concret, même chez GNU et Linux pour arriver à cette objectif.
Afin, puisqu'il n'y avait absolument aucune documentation ou exemple (hormis un vague prélude de Ralf Brown), je dus transgresser un sermant, un faire de l'"inverse-ingenering" afin que la connaissance soit accessible pour tous! Je dois ainsi me plaindre de voir qu'autant d'auteur n'ont aucune dignité et cherche à vendre pour environ 20$ des ajustements de puces n'en valeur qu'une 60$??? Avouez comme moi qu'un abus existe et qu'un urgent besoin de remettre les choses au point est absolument nécessaire!
ATTENTION! Les Session de compatibilité DOS de Windows ou les boîtes de compatibilité d'OS/2 ne support pas très bien ce genre de programmation directe de microprocesseur lui-même! Donc, il se peut que le système n'effectue aucune modification de sa configuration actuel... sous ses systèmes d'exploitations ou environnement graphiques multi-tâche.
Découvrir la présence du Cyrix
La technique la plus simple pour découvrir la présence d'un processeur Cyrix est la suivante:
PUSH AX
MOV AX,5555h
XOR DX,DX
MOV CX,0002h
CLC
DIV CX
POP
AX
JC
@NotCyrix
MOV
AL,Cyrix
@NotCyrix:
Découvrir la présence du Cyrix 6x86 sans utiliser le CPUID
Malheureusement, les nouveaux systèmes d'exploitation de la trame des Windows,
désactive par défaut l'instruction CPUID sur les
microprocesseur Cyrix (et le BIOS aussi de faite!).
Alors si l'instruction CPUID permettant la reconnaissance des
nouveaux microprocesseurs de la classe Pentium ne sert à
rien sous ces systèmes... Cependant, il y a une alternative,
si le système n'autorise pas l'activation du CPUID, il
peut être plus simple de tout simplement interroger les autres
registres de configuration (fixer en lecture seulement) après
s'être assurer qu'il s'agit d'abord d'un Cyrix. Ainsi en
envoyant la valeur 0FEh dans le port d'Entrée/Sortie 22h, on
pourra lire dans le registre du port 23h les valeurs correspondant au
microprocesseur comme le montre le tableau suivant:
Valeur (registre 0FEh du port 23h) | Description |
---|---|
00h | Cx486 SLC |
01h | Cx486 DLC |
02h | Cx486 SLC2 |
03h | Cx486 DLC2 |
04h | Cx486 SRx (mise-à-jour du Cx486SLC) |
05h | Cx486 DRx (mise-à-jour du Cx486DLC) |
06h | Cx486 SRx2 (mise-à-jour du 2x Cx486SLC) |
07h | Cx486 DRx2 (mise-à-jour du 2x Cx486DLC) |
10h | Cx486S |
11h | Cx486S2 |
12h | Cx486Se |
13h | Cx486S2e |
1Ah | Cx486DX |
1Bh | Cx486DX2 |
1Fh | Cx486DX4 |
28h | 5x86 1xs |
29h | 5x86 2xs |
2Ah | 5x86 1xp |
2Bh | 5x86 2xp |
2Ch | 5x86 4xs |
2Dh | 5x86 3xs |
2Eh | 5x86 4xp |
2Fh | 5x86 3xp |
30h | 6x86 1xs |
31h | 6x86 2xs |
32h | 6x86 1xp |
33h | 6x86 2xp |
34h | 6x86 4xs |
35h | 6x86 3xs |
36h | 6x86 4xp |
37h | 6x86 3xp |
40h | GxM 4x0 |
41h | MediaGX x1/GxM 6x0 |
42h | GxM 4x1 |
43h | GxM 6x1 |
44h | MediaGX 4xs/GxM 7x0 |
45h | MediaGX 3xs/GxM 8x0 |
46h | MediaGX 4xp/GxM 7x1 |
47h | MediaGX 3xp/GxM 5x1 |
50h | 6x86MX s base 1x |
51h | 6x86MX 2xs |
52h | 6x86MX 2.5xs |
53h | 6x86MX 3xs |
54h | 6x86MX 3.5xs |
55h | 6x86MX 4xs |
56h | 6x86MX 4.5xs |
57h | 6x86MX 5xs |
58h | 6x86MX p base 1x/1xp |
59h | 6x86MX 2xp |
5Ah | 6x86MX 2.5xp |
5Bh | 6x86MX 3xp |
5Ch | 6x86MX 3.5xp |
5Dh | 6x86MX 4xp |
5Eh | 6x86MX 4.5xp |
5Fh | 6x86MX 5xp |
Voici un exemple du bout de code assembleur permettant de tester la présence d'un microprocesseur 5x86 ou 6x86:
MOV AL,0FEh
OUT 22h,AL
IN AL,23h
MOV BL,AL
MOV
AL,Cyrix5x86
CMP BL,30h
JB @Not6x86
MOV AL,Cyrix6x86
@Not6x86:
Activation de l'instruction CPUID sur un Cyrix 6x86
La routine suivante écrit en à l'origine pour un Turbo Pascal 6 ou
supérieur pour un microprocesseur Cyrix 6x86 et permet
d'autoriser ou d'interdire l'instruction «CPUID»
par le microprocesseur, il va de soit que le bit 21 du registre de
drapeaux 32 bits du microprocesseur pourra s'activer à partir
de ce moment que l'instruction sera reconnu par des logiciels conçu
exclusivement pour INTEL.
Procedure SetCPUID(X:Boolean);Assembler;ASM
MOV DX,0022h
{ Port de contrôle de
configuration }
MOV
AL,0C3h
{ Registres de contrôle de configuration CCR3 }
OUT DX,AL
INC DX
IN AL,DX
MOV CL,AL
{ Sauvegarde dans CL la valeur CCR3 }
{ Fixe les bits 4 à
7 du registre CCR3 à 1 pour autoriser une modification }
AND AL,0Fh
OR AL,010h
XCHG AL,AH
DEC
DX
MOV AL,0C3h
{ Registre CCR3 }
OUT
DX,AL
INC DX
XCHG AL,AH
OUT DX,AL
DEC DX
MOV AL,0E8h
OUT DX,AL
INC DX
IN AL,DX
{ Ajuste le 7 bits du
registre à la valeur de «X» }
CMP X,True
JE @2
AND AL,LOW(NOT
80h)
JMP
@3
@2:
OR AL,80h
@3:
XCHG
AL,AH
DEC DX
MOV AL,0E8h
OUT DX,AL
INC
DX
XCHG AL,AH
OUT DX,AL
DEC DX
{ Restitution de la valeur
original du CCR3 }
MOV
AL,0C3h
{ Registre CCR3 }
OUT DX,AL
INC DX
MOV AL,CL
OUT DX,AL
END;