Les Microcodes : enquéte au coeur du CPU...
By The Mad

Edition Francaise

English Version
   

 

Description et fonctionnement du Microcode :

Tous les processeurs peuvent présenter des défauts ou des erreurs de conception. Souvent, les effets d'un bogue donné peivent être évités en implémentant un systéme de correction de niveau matériel ou logiciel. Intel détaille les bogues de ses processeurs et les solutions de correction dans un manuel en Anglais intitulé "Specification Upgrade" (que vous pouvez recuperer sur ce site en cliquant sur le lien.)
Auparavant, le seul moyen de corriger les bogues d'un processeur consistait a contourner ce bogue ou de remplacer le processeur par un autre sur lequel le bogue avait été corrigé
Aujourd'hui, une nouvelle fonction incorporée aux processeurs Intel P6 tels que les Pentium Pro/2/3. Ces processeurs incorporent une nouvelle fonction appelée "Microcode" avec laquelle il est possible de contourner ou corriger certains types de bogues a l'aide de mises a jour de microcode. Les mises a jours de microcode résident dans le BIOS du PC ; elles sont chargées dans le processeur par le BIOS durant l'autotest POST (Power on self test). Chaque fois que l'ordinateur est réinitialisé, le code de correction est rechargé, ce qui permet de garantir que la correction du bug sera effective chaque fois que le processeur fonctionnera.
Bref, pour ce qui est de la modification au niveau du Proc du latency et autres, je pense qu'on peut utiliser le microcode pour faire percevoir ces "modification" comme des bogues a corriger ...:-)
Je m'explique : Pour ceux qui ont quelques notions en cracking, quand on fait un crack pour un soft, on utilise un debugger pour justement "debugger" le programme (c-a-d retirer une limitation ou autre...), or, le microcode d'un CPU a justement cette fonction de "debugger"
Dans la pratique, je pense qu'en observant les modifications entre 2 revisions d'un microcode et en comparant avec le Specification Update d'Intel pour connaitre les modifications apportées, on peut en déduire a quoi servent les octets modifiés...mais ne pas perdre trop de temps, il faut que je code une version de microcheck qui automatisera tout ca....C'est ce que je fais petit-a-petit...
Voila, j'espere que que tout le monde a compris...


Architecture du Microcode :

Voici les octets que j'ai identifié dans le microcode (n'oublier pas que les octets sont "inversés" : donc quand vous voyez 12345678h c'est 78 56 34 12 qui sera affiché dans votre éditeur hexa
Exemple :
00000001h = 01 00 00 00
99 19 22 05 = 05221999h soit le 05/22/1999 donc en format Francais, le 22/05/1999

Offset
Type
Taille
Description
00h
DWORD
4
Header (Entête) du microcode : Doit toujours contenir 00000001h
04h
DWORD
4
Revision de l'update du microcode
08h
DWORD
4
Date de création de l'update ( au format mmddyyyy )
0Ch
DWORD
4
CPUID ( famille/model/stepping ) du processeur Destination
10h
DWORD
4
Cheksum du microcode ( sert a définir la validité de celui-ci )
14h
DWORD
4
Numéro de révision du loader necessaire ( Toujours 0000001h )
18h-30h
6 DWORD
24
???? Surement pour definir le product ID et autre...
>30h
500 DWORD
2000
Microcode

Le cheksum utilise un algorithme assez facile a trouver :
en effet, il suffit de d'additionner les 512 DWORD qui compose le microcode, et de modifier le checksum jusqu'a ce que le total de tout les DWORD fasse 00000000h C'est pas plus compliqué que ca !

J'ai une petite précision a apporter sur le Microcode Revision ID. En effet, les Celeron Coppermine et P3 Coppermine ayant le meme CPUID (0683h) ainsi que les P2/P3 et P2 Xeon/P3 Xeon je me suis demandé comment le BIOS arrivait a savoir quel microcode utiliser ( en effet, on trouve 2 microcodes CPUID 0683h dans un BIOS).
J'ai trouvé la réponse dans un Datasheet d'intel : En fait, c'est la révision du microcode qui joue : par exemple, les C² Coppermine auront un numéro de révision du Mc compris entre 00 et 7F et les P3 Coppermine entre 80 et FF ....
Je compte adapter Microcheck pour qu'il tienne compte de ces différences.


Exemples de Microcodes : Bientot des microcodes de P2...

Microcode de Celeron SANS cache ( 266-300 ) : ici

Microcode de Celeron A avec cache (300-333-366-400) : ici

Microcode de Celeron A avec cache (400-433-466-500-533) : ici

Microcode de Celeron 2 (533A-566-600-633-666-700) : ici

Microcode de P3 Katmaï (450-500) : ici

Microcode de P3 Coppermine (500E-533EB-550E...) : ici

Microcode de P3 Coppermine Core cC0 : ici

Microcode de Pentium 4 : ici


Utilitaires :

Comme c'est moi qui ait developpés ces programmes et que je ne suis pas un maitre en programmation, si vous avez des suggestions, des remarques, je vous remercierai de me les faires parvenir...

 

Microcheck 1.2 : Ajout du support Pentium 4 et correction de quelques bugs

Microcheck 1.1 : Ajout du support pour les Pentium 2 et Overdrive Pentium 2. Ajout d'un module de transcription du microcode du format BIOS vers le format intel original. Correction de bugs

Microcheck 1.0 : premiére version , support des P3 et Celeron , inclu un module permettant la correction d'un checksum incorrect... download ici en version Allemande.

En cas de probleme avec comdlg32.ocx, le recuperer ici

Close