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
|