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 | 00000035 | 08.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 | 3AC2FB53 | 00000001 | 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 | 00000670 | 0CE041AD | 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 | 0000000D | 21.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 | 374569E7 | 00000000 | 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:
CPUID | CPU Type | 0612 | Athlon, Pentium Pro | 0616 | Pentium Pro | 0617 | Pentium Pro | 0630 | Duron | 0650 | Celeron, Pentium II | 0653 | Pentium II | 0673 | Pentium III, C3 | 0680 | Athlon XP | 0681 | Athlon XP, Sempron, Duron, Geode, C3, Pentium III | 0683 | Celeron, Pentium III, Xeon | 0686 | Celeron, Pentium III, Xeon | 1632 | Pentium 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 | B0 | FC-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.00 | 512KB | 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). |