Loading ...

Loading splash screen ...
Galleria
TECHNET
Pentium FDIV BUG
Pentium FIST BUG (Dan-0411) Intel Flag Erratum
CPU Identification
Motherboard Identification
Motherboard Identification: BIOS chip swapping
Applicazioni pratiche del BIOS chip swapping
Motherboard Identification: layout
CPU Speed e Clock Multiplier
BIOS Update
AWARD BIOS inside - CPU microcode
AMI BIOS inside - CPU microcode
Power-On Self-Test: PC Diagnostic Card
Socket 3 CPU voltage detection
Socket 3 clock multiplier detection (AMD Am5x86-P75 4x clock mode)
Turbo-Deturbo motherboard check
Socket 7 FSB / clock multiplier detection
AWARD BootBlock BIOS Recovery
Riprogrammazione BIOS: BIOS chip hot swapping
Compaq Deskpro 2000 BIOS F10: Computer SETUP/V and PC Diagnostics
Olivetti PCS 386 SX: disassemblaggio
Desktop Management Interface (DMI) e Custom MIFD
PC Windows 98: da standard Hard Disk a SSD Compact Flash
 
TECHNET: 22
.
Da IDE HD a SSD CF
Clonare un Hard Disk
con Windows 98 SE
su un "SSD" Compact Flash
AWARD BIOS inside - CPU microcode
Analisi dei CPU microcode nel BIOS AWARD
BIOS Update
Sulla motherboard MSI MS-6163 (Slot 1) proviamo ad installare un Pentium III 1GHz (Socket 370) utilizzando una daughter card che supporta il core Coppermine. Prima di procedere verifichiamo che tutto funzioni installando temporaneamente un Pentium II Deschutes 400MHz, la RAM e una scheda video PCI. Il sistema si avvia correttamente e la versione del BIOS è la 2.0.
Sul sito MSI Microstar International Deutschland (Link) sono presenti vari BIOS update: si può verificare che il supporto per il core Coppermine delle CPU Intel viene introdotto a partire dalla versione 2.5 per cui ci aspettiamo che con il BIOS attuale il sistema non sia in grado di avviarsi (oppure viene autorizzato il boot ma la CPU non è riconosciuta correttamente).
Installiamo ora la CPU sulla daughter card, montiamo il gruppo dissipatore e ventola, configuriamo correttamente i jumper (CPU Clock: auto, CPU type: Pentium e CPU mode: single) e inseriamo la scheda nello Slot 1. Proviamo il boot: il sistema non si avvia e il blink del led del monitor indica assenza di segnale, per cui è necessario effettuare un BIOS update.
Reinstalliamo il Pentium II e scarichiamo l'ultima versione del BIOS (2.7 file W6163IMJ.270): seguendo le indicazioni del documento allegato, procediamo con l'aggiornamento dopo aver effettuato un backup del BIOS corrente (2.0 file W6163V20.BIN). Dopo il completamento e il loading del Setup defaults facciamo un reset della CMOS tramite il jumper JBAT1 ed installiamo una scheda video ISA a 16 bit. Il riavvio va a buon fine e viene confermata la versione 2.7 del BIOS. Viene riconfigurato correttamente il primary video adapter PCI nel BIOS e reinstallata la scheda video PCI originaria.
A questo punto è possibile installare il Pentium III 1GHz core Coppermine: la nuova CPU viene rilevata in automatico sulla daughter card e, dopo aver impostato i valori CPU ratio pari a 7.5 e CPU frequency pari a 133, al reboot la frequenza corretta risulta di 1000MHz (nota: il BIOS riconosce una CPU diversa da quella installata in precedenza e si avvia in safe-mode, con valori bassi di frequenza e clock multiplier).
CPUID
La stringa CPUID introdotta nel 1993 da Intel per l'identificazione univoca delle CPU risiede in un particolare registro ed è ottenuta dalla concatenzione di Extended Family, Extended Model, Type, Family, Model, Stepping e Brand ID come segue:

Extended Family / Model Type Family Model / Stepping Brand ID
Extends the Base Family / Base Model value 0 = Standard, 1 = Overdrive, 2 = 2nd Dual Pentium 4 = 486, Am5x86, Cx5x86
5 = Pentium, Nx586, Cx6x86, K5/K6, C6, mP6
6 = Pentium Pro / Pentium II / Pentium III, CxMII / CxIII, Athlon, C3
F = Pentium 4, Athlon64
CPU Model and 486 L1 cache mode / Stepping or sub-model number Genuine Intel, UMC, Authentic AMD, Cyrix Instead, NexGen Driven, Centaur Hauls, Rise, SiS, Genuine TMx86, Geode by NSC

Ad esempio il Pentium III Coppermine 933MHz SL4C9 ha CPUID 000686: Pentium III (6) model 8 stepping C0 (6), brand ID GenuineIntel (Intel processor). Per ulteriori dettagli si può fare riferimento alla guida tecnica su sandpile.org (Link) oppure all'utility chkcpu/chkcpu32 for DOS/Windows di Jan Steunebrink (da cui deriva la tabella sopra, Link).
Ora, a partire dal backup del BIOS versione 2.0, verifichiamo quali CPU microcode sono stati aggiunti nella versione 2.7 per il supporto del core Coppermine.
AWARD BIOS Tools
Per l'editing dei BIOS AWARD esistono diversi tools:
- modbin45 (BIOS version 4.5x): applicazione DOS sviluppata da Award Software per la modifica della maggior parte dei parametri del BIOS ROM file (Link);
- modbin6 (BIOS version 6.x): applicazione DOS sviluppata da Award Software (e successivamente da Phoenix Technologies) per la modifica della maggior parte dei parametri del BIOS ROM file (Link);
- cbrom: applicazione DOS sviluppata da Award Software (e successivamente da Phoenix Technologies) per la decompressione dell'archivio LHA contenuto nel BIOS ROM file e l'estrazione/inserimento dei file nell'archivio (Link);
- ctmc: applicazione DOS sviluppata da Andreas Stiller per la visualizzazione/estrazione dei CPU microcode contenuti nel BIOS ROM file (Link);
- awdbedit (Award Bios Editor): applicazione Windows sviluppata da Mike Tedder che integra in interfaccia grafica quasi tutte le funzionalità dei tool precedenti (Link)
Estrazione CPU microcode
Per estrarre i dati dei CPU microcode presenti nel ROM BIOS backup file W6163V20.BIN usiamo il tool cbrom da riga di comando con l'opzione /cpucode extract salvando i dati nel file di output W6163V20.CMC (CMC=CPU Micro Code):
cbrom132.exe W6163V20.BIN /cpucode extract
Analogamente procediamo con l'estrazione dei dati dei CPU microcode presenti nel ROM BIOS update file W6163IMJ.270 salvando i dati nel file di output W6163IMJ.CMC:
cbrom132.exe W6163IMJ.270 /cpucode extract
Per visualizzare solo il contenuto del BIOS ROM file si può usare l'opzione /D:
cbrom132.exe W6163V20.BIN /D
Analisi CPU microcode
I dati dei CPU microcode estratti dal ROM BIOS backup file possono essere analizzati con il tool ctmc passando come opzione da riga di comando il file CMC salvato:
ctmc.exe W6163V20.CMC
I risultati sono riassunti nella tabella seguente:

UpdateID Date CPUID Checksum Platform
00000001 27.08.1998 00000665 6D487DC1 00000010
00000020 03.09.1996 00000632 EBC16165 00000000
00000034 08.05.1998 00000633 278BE7DC 00000001
0000003508.05.1998 00000634 3AC2FB53 00000001
00000032 10.06.1998 00000650 A0027121 00000001
00000030 10.06.1998 00000651 DE71ECC9 00000001
00000014 10.06.1998 00000652 0E4A7195 00000001
00000004 05.06.1998 00000660 0C7B5205 00000001
00000006 28.05.1998 00000670 0CE041AD 00000001
00000002 29.07.1998 00000671 9C9A73B0 00000001
00000001 09.09.1998 00000672 D08F3A1B 00000001

Analogamente, i dati dei CPU microcode estratti dal ROM BIOS update file possono essere analizzati con il tool ctmc passando come opzione da riga di comando il file CMC salvato:
ctmc.exe W6163IMJ.CMC
I risultati sono riassunti nella tabella seguente:

UpdateID Date CPUID Checksum Platform
00000011 21.09.1999 00000681 FC16538D 00000010
00000010 10.01.2000 00000683 AA8ED88C 00000010
00000008 05.05.2000 00000686 EA2B7B61 00000010
00000003 05.05.1999 00000665 2B9733F1 00000010
00000013 27.08.1996 00000630 F316FC3B 00000000
00000020 03.09.1996 00000632 EBC16165 00000000
00000034 08.05.1998 00000633 278BE7DC 00000001
00000035 08.05.1998 00000634 3AC2FB5300000001
00000040 25.05.1999 00000651 F400B4AC 00000001
0000002A 12.05.1999 00000652 C8B34CC7 00000001
00000010 28.06.1999 00000653 4B6DFC5E 00000001
0000000A 05.05.1999 00000660 05B795F4 00000001
00000006 28.05.1998 000006700CE041AD 00000001
00000003 11.08.1998 00000671 F6CF7B0B 00000001
00000010 22.09.1999 00000672 0FC53099 00000001
0000000E 10.09.1999 00000673 F64116D1 00000001
00000014 10.06.1999 00000680 2B6C7F13 00000001
0000000D21.09.1999 00000681 31708166 00000001
0000000C 10.01.2000 00000683 B1605BCA 00000001
00000007 05.05.2000 00000686 87AA303F 00000001
00000002 10.06.1998 00001632 6AAE5598 00000000
000000C6 10.12.1996 00000612 374569E700000000
000000C6 10.12.1996 00000616 2D239C7F 00000000
000000C5 25.01.1995 00000617 A1BA5EA4 00000000

In evidenza le differenze di CPU microcode nei due BIOS ROM file: nel BIOS update sono presenti nuovi CPU microcode (tranne uno relativo al CPUID 0650 che per qualche motivo è stato rimosso), la tabella seguente riassume la corrispondenza tra CPUID e CPU Type:

CPUIDCPU Type
0612Athlon, Pentium Pro
0616Pentium Pro
0617Pentium Pro
0630Duron
0650Celeron, Pentium II
0653Pentium II
0673Pentium III, C3
0680Athlon XP
0681Athlon XP, Sempron, Duron, Geode, C3, Pentium III
0683Celeron, Pentium III, Xeon
0686Celeron, Pentium III, Xeon
1632Pentium II Overdrive

In particolare, i CPU microcode relativi ai CPUID 0681, 0683 e 0686 introducono il supporto per i core Coppermine dei Celeron e Pentium III:

CPUID CPU Type CPU Core Core Stepping Package and Revision L2 Cache Size (KB)
0681 Pentium III Coppermine A2 SECC 2 256
0681 Pentium III Coppermine A2 FC-PGA (370 pin) 256
0683 Celeron Coppermine B0FC-PGA (370 pin) 128
0686 Celeron Coppermine C0 FC-PGA (370 pin) 128
0683 Pentium III Coppermine B0 SECC 2 256
0683 Pentium III Coppermine B0 FC-PGA (370 pin) 256
0686 Pentium III Coppermine C0 SECC 2 256
0686 Pentium III Coppermine C0 FC-PGA (370 pin) 256

Per ulteriori dettagli si può fare riferimento alle guide tecniche ufficiali Intel Celeron Processor Specification Update (Link) e Intel Pentium III Processor Specification Update (Link)
Ulteriori considerazioni
La CPU utilizzata per il test è un Pentium III 1GHz Coppermine-T (revisione tra Coppermine e Tualatin) ed ha CPU microcode 068A che non è presente nella lista degli update. Il BIOS però autorizza comunque il boot e la CPU funziona correttamente. Da notare che il voltaggio è ancora 1.75V ma la CPU è anche compatibile con il low voltage 1.45V (impiegato a partire dal Pentium III-S Tualatin 1.133GHz) come indicato nelle note del documento tecnico di Intel per il Pentium III. Una ulteriore considerazione per questa CPU border-line riguarda il package-type che è il 370 pin FC-PGA 2: anche in questo caso la CPU funziona correttamente su una daughter card con pinout del package-type FC-PGA (che è diverso da quello dell'FC-PGA 2), in quanto fino a questa versione Intel ha mantenuto la backward-compatibility con le motherboard che utilizzavano il vecchio package.
Il CPU microcode relativo al CPUID 0650 non è presente nell'update: effettuando un test con cbrom /D su tutti i BIOS update possiamo verificare che questo CPUID non è più presente a partire dalla versione 2.5 ed è relativo alle prime versioni di Pentium II e Celeron:

CPUID CPU Type CPU Core Core Stepping Package and Revision L2 Cache Size Speed Core/Bus (MHz) S-Spec
0650 Pentium II Deschutes A0 SECC 3.00 512KB 266/66 SL2K9
0650 Pentium II Deschutes A0 SECC 3.00512KB 333/66 SL2KA, SL2QF
0650 Celeron Covington A0 SEPP Rev.1 0 266/66 SL2SY, SL2YN
0650 Celeron Covington A0 SEPP Rev.1 0 300/66 SL2YP, SL2Z7

Potrebbe trattarsi di un errore nelle release successive del BIOS; comunque (per gli stessi motivi visti sopra) la presenza del CPU microcode relativo al CPUID 0651 dovrebbe consentire alla motherboard di avviarsi anche con le CPU con gli S-Spec indicati in tabella (non sono stati effettuati test funzionali).
Un'ultima considerazione riguarda i CPU microcode relativi a CPU non solo Intel (Pentium II, Pentium III e Celeron) ma anche AMD (Athlon Classic/XP, Duron, Sempron), VIA (C3), ed altre. Molto probabilmente il costruttore ha rilasciato un BIOS update che supporti più prodotti (per esempio le motherboard con Socket A) anche se in questo caso specifico la motherboard di test era solo per CPU Intel e più precisamente per Pentium II.
BIOS modding
Con gli stessi tools usati per l'estrazione e l'analisi dei CPU microcode, proviamo ora a costruire un nuovo BIOS update che supporti anche il Pentium III Coppermine-T. L'idea è quella di partire dall'ultima versione W6163IMJ.270 (che contiene anche altri fix), eliminare i CPU microcode relativi a CPU non usabili sulla motherboard di test (ad esempio Pentium Pro, Athlon, Duron, ecc) e aggiungere i CPU microcode relativi al CPUID 068A (supporto core Coppermine-T).

Operazioni preliminari
Il file W6163IMJ.CMC salvato in precedenza contiene l'elenco dei CPU microcode estratti con cbrom; con il tool ctmc è possibile salvare in formato .bin tutti i CPU microcode presenti nel file CMC come segue da riga di comando:
ctmc.exe W6163IMJ.CMC /store
Nella nostra working directory troveremo l'elenco di tutti i file .bin con nome dato dalla concatenazione di CPUID (4 caratteri), Platform (2 caratteri) e UpdateID (2 caratteri), in accordo con l'elenco presente nel file CMC.
Download ultimo CPU microcode datafile
Intel supporta i Sistemi Operativi Linux e VMware ESX (che hanno una routine di update dei microcode al boot per riconoscere automaticamente nuove CPU) per cui rilascia periodicamente l'elenco dei CPU microcode relativi a tutti i processori Intel. Scarichiamo quindi l'ultima versione (Link) e decomprimiamo il contenuto dell'archivio in una cartella temporanea intelcmc ottenendo il file microcode.dat. Con l'utility di terze parti microdecode.exe è possibile salvare in formato .bin tutti i CPU microcode presenti nel file:
microdecode.exe microcode.dat
L'utility, scritta in C, è stata modificata per restituire i nomi dei file .bin in accordo con la convenzione CPUID (4 caratteri), Platform (2 caratteri) e UpdateID (2 caratteri). In particolare, risultano 3 file relativi al CPUID 068A e precisamente: 068A1001.BIN, 068A2004.BIN e 068A8005.BIN.

Rimozione CPU microcode non utilizzabili e inserimento CPU microcode per supporto Coppermine-T
Dalla working directory eliminiamo i file relativi ai CPUID 0612, 0616, 0617, 0630 e 0680 (Pentium Pro, Athlon, Duron, ecc) e copiamo dalla cartella intelcmc i file relativi al CPUID 068A. A questo punto si possono combinare tutti i file .bin in un unico file CMC (che verrà importato nel nuovo BIOS update) con il comando copy:
copy /b *.bin W6163V28.CMC
Per verificare la correttezza del nuovo file CMC si può analizzarne il contenuto:
ctmc.exe W6163V28.CMC
In effetti il risultato è quello atteso: il file non contiene i CPU microcode eliminati e sono presenti invece quelli relativi al CPUID 068A (supporto core Coppermine-T).
Costruzione nuovo BIOS W6163V28.BIN
Il nuovo BIOS di partenza sarà ottenuto copiando il file W6163IMJ.270 nel file W6163V28.BIN. Prima di effettuare l'inserimento dei nuovi CPU microcode occorre rilasciare quelli già presenti nel BIOS file con il tool cbrom:
cbrom132.exe W6163V28.BIN /cpucode release
Con l'opzione /D è possibile verificare che non sono più presenti le informazioni sui CPU microcode. A questo punto è possibile importare il file W6163V28.CMC nel nuovo BIOS update file:
cbrom132.exe W6163V28.BIN /cpucode W6163V28.CMC
L'ulteriore verifica con cbrom /D conferma la correttezza delle modifiche effettuate.
L'ultima operazione riguarda il BIOS boot message: con il tool grafico awdbedit possiamo caricare il BIOS update file e modificare la stringa che verrà caricata al boot (File -> Open -> W6163V28.BIN -> System BIOS -> Bios Information -> W6163MJ V2.8 - patch Coppermine-T 061015 -> Save).
Con l'opzione File -> Properties si può verificare la consistenza dell'immagine BIOS. Si possono modificare anche altri parametri tra cui i registri, i valori di default, l'EPA picture, il logo del costruttore, l'immagine splash screen iniziale, ecc.
A questo punto, se non ci sono stati errori e il checksum è corretto, si può ripetere il BIOS update passando W6163V28.BIN come ROM file (non sono stati ancora effettuati test funzionali).
Conclusioni
Il BIOS update rilasciato dal costruttore contiene dei fix e i CPU microcode necessari per la corretta gestione delle nuove CPU, in particolare di Pentium III e Celeron core Coppermine. La motherboard inizialmente progettata con Slot 1, diventa operativa con una daughter card e la CPU su Socket 370 con package type FC-PGA.
E' possibile manipolare i BIOS ROM file AWARD per estrarre/analizzare i CPU microcode. Si possono anche inserire CPU microcode per gestire nuove CPU ma il processo ha un limite dato dalla capacità del ROM CHIP (in questo caso 256KB). Per testare l'overflow, proviamo a generare il file W6163OVF.CMC (OVF=OverFlow) caricando i primi 100 CPU microcode rilasciati da Intel (il file ottenuto ha dimensioni superiori a 256KB); copiamo il file W6163IMJ.270 nel file W6163OVF.BIN, rilasciamo i CPU microcode e importiamo il file W6163OVF.CMC:
cbrom132.exe W6163OVF.BIN /cpucode release
cbrom132.exe W6163OVF.BIN /cpucode W6163OVF.CMC
Si ottiene l'errore di overflow W6163OVF.BIN have not enough space for adding ROM. (Over 94E0h bytes)

Note su CTMC di Andreas Stiller: A very powerful tool
Il tool ctmc è un potente strumento per l'estrazione dei CPU microcode e funziona con i BIOS AWARD e AMI. E' in grado di analizzare i ROM file ed estrarre direttamente i microcode senza l'utilizzo dei tool di manipolazione del BIOS cbrom/amibcp. Per funzionare correttamente deve avere nella stessa directory il tool lha.exe di compressione/decompressione archivi LHA di Haruyasu Yoshizaki.
Per visualizzare i CPU microcode è sufficiente passare come parametro direttamente il BIOS ROM file, per salvarli l'opzione /store:
ctmc.exe W6163IMJ.270
ctmc.exe W6163IMJ.270 /store
Il tool è anche in grado di scrivere sulla ROM BIOS ma l'ambiente non deve essere in emulazione (real-mode tipicamente con disco di boot DOS minimale).
AWARD BIOS inside - CPU microcode © PC Rebuilding
Prima pubblicazione: 26 Agosto 2015, 12:00.45
Ultimo aggiornamento: 6 Giugno 2017, 16:13.54
Visualizzazioni attive: 2466



Link correlati
Link veloci
Statistiche gruppi
22 [TECHNET]