[Guide] How to update the CPU microcodes on a non-UEFI Award/Phoenix BIOS

The need: I had to search everywhere on the internet to find a step-by-step walktrough that teach how to update the microcodes in the NCPUCODE.BIN of my BIOS. (I have an Award non-UEFI BIOS on a Gygabite GA-X58A-UD9 motherboard) This should work with Phoenix Bios too.

The problem: Almost all guides on the internet are related to UEFI Bios and tell you to use MMTool or UBU to do it, but it is unfortunately useless on non-UEFI Bios… And for most of the rest of the guides out there, those are hard to find, very rare, are incomplete, not well done and therefore incomprehensible guides asking you to use a HEX Editor to change the microcodes manually.

The solution: After so much time in research, i want to save everyone the time wasted and the problems i got finding how to do it. And i must say that no Hex editor is required!

So here is the simple guide step-by-step on how to do it:

Note 1: Only the name “NCPUCODE.BIN” is used in the Guide to keep it short. Your CPU microcodes file in your Bios may be named CPUCODE.BIN instead. (If you find other names for it, please post it) Just use the same name as the one already in your Bios.

Note 2: You MUST already have a file for the microcodes in your Bios (See note 1). This guide can’t create a microcode file for more older Bios where there are none. Well… It can but the Bios won’t use it so it is the same thing. If you are in this situation, then HxD editing is probably your only solution…

Note 3: If you have an Award/Phoenix bios that happen to be also from Dell then there are chances that this guide won’t work for you. Dell has some special bios that usually requires a completely different guide and a different set of tools to do it.

Preparation:

- You must have:

1- Your Bios file that you want to modify.

2- a) The tool CBROM155.EXE if you have a GIGABYTE motherboard or…

b) If your motherboard is not GIGABYTE maybe a CBROM version higher that v1.55 can do (I didn’t test with other motherboards than GIGABYTE so i am not sure). Reasons are that versions higher than v1.55 are trying to change and/or relocate and/or change the checksum of the files that are before MINIT. This makes the bios invalid to flash on some motherboards (Example: GIGABYTE)

You can download all CBROM versions >here<

3- The new updated microcodes you want to put in your Bios. You can get most of those >here< and >here<

4- The latest MC Extractor and database. You can get those >here<

5- Optional: The microcode tool to convert .dat into usable microcodes. You can download it >here<
Note: Alternatively, you can also use MC Extractor with -CONT option (Prefered). In this case, you already have it.


The guide step-by-step:

Step 1 : How to know which microcodes are “Outdated” :
1- Copy your Bios in your MC Extractor folder

2- If you have an “extracted” folder, make sure it is empty of microcodes before doing the next step.

3- Drag your Bios file over MCE.EXE then press ENTER. You should see a list of your microcodes. Each microcode is listed as “Yes” or “No” to be the latest.

Step 2 : Choosing your new CPU microcodes :
1- Unzip the new microcodes you downloaded. Unzip until you get a MICROCODE.DAT file

2- Copy MICROCODE.EXE and MICROCODE.C into the same folder of the MICROCODE.DAT file

3- Drag MICROCODE.DAT over MICROCODE.EXE. This will extract all the microcodes inside. You should now see them all.

4- Find your new microcodes in the list by comparing the CPUID, platform, version and date with the “Outdated” ones. If you find a corresponding one with a newer date and version, then copy it to the same folder as your Bios file and CBROM.
Note: Take special attention to the platform, because sometimes CPUID are the same but platform are not.

Step 3 : Integration of the new CPU microcodes :
1- Go to the “extracted” folder in MC Extractor and copy all the microcodes there that WON’T be updated to the the same folder as your Bios and cbrom

3- Open a command prompt with administrative rights and go to your bios and CBROM folder directory.

2- Create a blank file NCPUCODE.BIN either by:

a) Typing

1
 
NUL > NCPUCODE.BIN
 
in the command prompt of the same directory or...

b) Creating an empty document text and changing the name to NCPUCODE.BIN

3- This step is required only if an old microcode and a new microcode are not the exact same size. Type the following command:

1
 
cbrom155.exe The-name-of-your-BIOS-file-here /nc_cpucode NCPUCODE.BIN
 
Example:
1
 
cbrom155.exe x58aud9.f6 /nc_cpucode NCPUCODE.BIN
 


This will erase ALL the microcodes in your bios so that you can replace them in a clean manner without leftover and reduce the chances of an error in the microcodes.

4- Merge your existing and new CPU microcodes by typing something like this adapted to your file's names in the command prompt: (Your microcodes files needed should all be in this folder by now)

1
 
copy /b ncpucode.bin + cpu00010676_plat00000004_ver0000060f_date20100929.bin + cpu00010676_plat00000040_ver0000060f_date20100929.bin + cpu0001067a_plat00000044_ver00000a0b_date20100928.bin ncpucode.bin
 


5- Make it "read-only" to prevent from deletion after the update is complete by typing the following command:

1
 
attrib +R ncpucode.bin
 


6- Update your BIOS file with the new cpu microcodes with the next command: (You may need to replace CBROM155.exe by CBROM198.EXE if you are not updating a GIGABYTE Bios and are using CBROM198 instead)
Note: Make a copy of your Bios file somewhere before doing this step, you may need it later.


1
 
cbrom155.exe The-name-of-your-BIOS-file-here /nc_cpucode NCPUCODE.BIN
 
Example:
1
 
cbrom155.exe x58aud9.f6 /nc_cpucode NCPUCODE.BIN
 


If you get a "Not enough space error", see the FAQ and problems section.

7- VERY IMPORTANT: Verify the integrity of your new microcodes in your Bios file before flashing it! DO THE NEXT STEP!

Step 4 : >(VERY IMPORTANT!)>: Verify the integrity of the new CPU microcodes in your new BIOS file before flashing it:
1- Copy your new Bios file in the folder of MC Extractor.

2- Drag your new Bios file over MC.EXE to see your new list of microcodes. 2 things can happen:

a) Your new codes are there and no error shows up. Congratulation! You microcodes are updated to newer ones and you are ready to flash it.

b) You get an error from MC Extractor saying that X microcode in the list is packed or badly extracted. If that happen, DON'T FLASH IT. Remember the copy of the Bios file you have done just before the integration? You will now need it because the new Bios file you just made is now useless. You have to redo it by starting from the integration step of the NCPUCODE.BIN (the copy /b step) by trying to remove one or more already updated microcodes. If that don't work, you can try instead to add also one or more of the old ones that are still in the "extracted" folder. Unfortunately, it is more a "trial and error"-untill-it-pass-the-validation step than anything else. It just takes patience to do it... But there is at least one exception where it will never validate: See "FAQ and problems" for more details.


FAQ and Problems:

Problem: No matter how i try to integrate my microcodes, i always get an error in the validation process that say "X microcode is packed or badly extracted" and i always end up with one microcode that appears in double in the list. How can i fix that?

Solution: I will tell you the solution because it happened to me once and i almost got crazy searching for the problem... Your problem is probably because the total space of your microcodes that you try to put in (your NCPUCODE.BIN) is smaller than the one it replace in the Bios. Exemple: 63k (total new) instead of 68k(total old). CBROM155 (and maybe other version) don't deal well with a decrease in space used. The real problem is because CBROM in the Bios start with the end (Search for NCPUCODE.BIN with an HxD editior in the Bios) and fill it up by replacing what is there untill the beginning (search for your first microcode that is in your Bios and NCPUCODE.BIN file), but your beginning is now shorter and it doesn't replace by FF all the leftover of your old microcodes. Even doing an extra "CBROM155 your-bios-name /nc_cpucode NCPUCODE.BIN" BEFORE integration with an empty NCPUCODE.BIN that in theory should erase your NCPUCODE from your Bios don't work. The leftover remains there no matter what. The solution is to do the following:

1- Do your integration of your new microcodes as you want them by following the guide untill you fail the verification process.

2- Open your new Bios file with HxD editor, open your new NCPUCODE.BIN that you used for integration and open also your first microcode that you used to make it with the COPY /B step. You may also have to open the first microcode of your old Bios if it is not the same as your new one.

3- Verify that your first microcode for integration is really the first in your NCPUCODE.BIN file.

4- Highlight all the codes in the NCPUCODE.BIN file and copy it to use it to make a search for it in the Bios file. That part should all become blue in your Bios.

5- Go the the beginning where the blue start. Congratulation, you found where the leftover ends. Now you need to know where they beggin.

6- Look for the leftover by scrolling up to find where the leftover beggins. The beginning of the leftover will usually be easy to spot because it start where you beggin to see FF everywhere and it will begin with the same code as the first microcode that was in your old Bios. (That is why it always appeared in double in the verification process and also why this part was always marked as badly packed or extracted)

7- Highlight all the leftover from beginning to the end of it and do a right click on it. Choose the command "Fill the space", type FF then click Ok. You did this to maintain the size and the checksum of your Bios (Otherwise the Bios won't work and probably won't even flash).

8- Now restore the internal references in your Bios to be sure that when you try to flash it, you won't get an "invalid Bios" message. To do that, redo your integration using CBROM155 your-bios-name.here /NC_CPUCODE NCPUCODE.BIN one last time.

9- Congratulation! Your Bios should now work. Save it, and redo the validation process. No error should appear this time. You can also verify further by doing the /d option with CBROM to verify all your microcodes appears in the end of the list.

Problem: I got a "Not enough space error" while trying to integrate my new CPU microcodes in the BIOS. What can i do?

Answer: If your Bios don't have big enough empty space to take the updates then here are your choices:

Option 1- Don't do the update. --- YOU ARE KIDDING, RIGHT?? Ok, maybe...

Option 2- Try again by removing one of the CPU microcodes that you will never use. --- BUT I WANT TO BE ABLE TO KEEP THE SAME CPU SUPPORT AS I ORIGINALLY HAD!!! Ok, i understand you, keep on reading...

Option 3- Try again by removing one of the CPU microcodes that you will never use... Once it is done, use the /cpucode option to add the one you removed. Steps to do it:

a) Rename your missing cpu microcode. Example: Rename "cpu000106A5_plat03_ver0000001B_date27-06-2015.bin" to NCPUCODE.BIN

b) Do the command. Here is an example of the command:

1
 
CBROM155.exe x58aud9.f6 /cpucode NCPUCODE.bin
 


This will create a new compressed file in your BIOS for your last microcode. Be aware that it probably won't show up in the microcodes infos at the bottom of the list of CBROM when you do /D option. It won't show up either if you use "intelmicrocodelist_v04a" to see the list of your microcodes. I don't know if it will show up in MC Extractor (to be confirmed). But the microcode will work.

If this still doesn't work, try the same thing but this time by removing 2 microcodes and so on untill it works.

Question: What is the difference between the /nc_cpucode and the /cpucode option?

Answer: a) /nc_cpucode is used to update microcodes because it will erase EVERYTHING (not just the ones you update) in the NCPUCODE.BIN of your Bios and replace it by what is in your new NCPUCODE.BIN that you created. Also, the command never compress anything.

b) /cpucode is used mainly to add support for a new CPU with a new cpu microcode (not an update) without touching to the uncompressed NCPUCODE.BIN of the Bios, instead it will create a second NCPUCODE.BIN in the bios but this one will be compressed (Just like a .ROM module) So yes, the Bios will have to read 2 files to get all the microcodes... Because of that, it is better to use the /nc_cpucode even to add a new CPU microcode to put them all in the same place and uncompressed. But when the space in the Bios runs out or other problems like that appears (Bios are tricky things), this is where the /cpucode command offer a chance and a way to go around the problem.

Question: I can't extract my microcodes when i drag my bios over MCE.EXE. It copy my file instead of opening it. What can i do?

Answer: Be sure you downloaded the whole MCE program with the MCE.exe file and not just the database file. If this is not your problem, then i suspect either you didn't do step one: "1- Copy your Bios in your MC Extractor folder" or your Windows is not set anymore with its default behavior.

In any case, you can try instead this work around:

1- While holding the CTRL key, right click on your bios file and click "Copy as path"

2- Double click MCE.exe

3- Paste your path in MCE, press SPACE and write -CONT. So it should look like this: "your-path-here" -cont

4- Press enter

This should give you the same thing but with an error that it didn't manage to convert the file. The error is normal and you can dismiss it because the microcodes were already converted in the bios (Meaning they are already uncompressed).

Question: After i have done the procedure to empty the NCPUCODE.BIN in my Bios, MCE still list the microcodes even if when i inspect the Bios file, i find it empty. This prevent me from putting back my new list of microcodes successfully because they will combine with only-God-knows-how what is still there in the Bios. What can be done?

Answer: Then you are not lucky and it never happened to me... But it won't be dramatic. This is a rare problem that is caused by a partial incompatibility between your version of Cbrom and your Bios for that specific command. If your motherboard is a Gigabyte, chances are that you MUST use Cbrom 1.55 to integrate your microcodes with /nc_cpucode (Otherwise, it will mess up with what is before MINIT in the Bios and it won't be good). The way around the problem is that you don't need Cbrom 1.55 for some of the other commands required. Said simply, if a command will not mess with anything related to the checksum of what is before MINIT, then chances are it can also be done by another version of Cbrom. You can use, for example, Cbrom 1.98 to do a "/nc_cpucode Release" command, come back to Cbrom 1.55 and do a /nc_cpucode with an empty write protected file then continue normally by integrating your new CPU Codes by following the guide. For more precisions on this, see the discussion related to post #341. Thanks to Triv for providing this solution for his problem.



ALTERNATIVE: The HxD Editor way to do it.

Sometimes, it is impossible to use cbrom to update the microcodes and can't change the microcodes using the first guide. Or you just prefer to do it in the good old fashion way. So here is what to do using HxD Editor.

What you need:

- HxD Editor
- Your new microcodes that you want to put there
- MCExtractor
- Your Bios file
- Depending on what is preventing you to update your bios, a software that can open your bios file and replace orom.

Quick Guide:

1- Extract your old microcodes using MCExtractor.

2- Open in HxD Editor:
a) Your bios file
b) One of your old microcode you want to replace
c) The new microcode that will be used to update that microcode

2- Copy all of the old microcode you opened. (It becomes blue)

3- Do a search for it in the bios file. (That part will become blue)

4- Copy all of the new microcode you opened. (It gets blue too)

5- Click on the blue part of the bios file and paste it there using the replace option.

6- Save the changes in your bios file and repeat all the steps for each of the microcodes you want to update.

7- Restore the checksum and the integrity of your bios file by updating or replacing an orom file in the bios (usually the last one for simplicity). That step is almost impossible to describe as a guide because each bios have a differrent problem that requires a differrent work around to do it for those that the first guide didn't work. You will have to make a research according to your bios for that step and ask for help in this forum if need be.

8- Verify your new Bios with MCExtractor to be sure that everything is in place and that no unexpected errors are showing.

Notes: This guide assume that the new microcode that replace an old one are both the same size. Even if it is almost always the case, there are sometimes a differrence in size between both microcode files and, if it is your case, you will have to use a differrent method. A work around is to NOT change them one by one but as a bulk update (Replace all the microcodes, even the already updated, by all the new microcodes, even the already updated in just one step). The little warning about this method is to verify that if your new update is bigger than the old one, you must be sure to have enough free space in the bios for the extra data. Some bios are already full and can cause you some problem. And if you new file is shorter, then you risk letting old microcode parts in you bios. Remember to replace those with "FF" or "00" according to your bios. Better that you verify all that before you copy anything.


To help you, here you can >download my collection of all the valid versions of CBROM i have<.

I hope that help you to update your CPU microcodes.

If you have a Gigabyte motherboard, it could be a good opportunity to also update your Q-Flash module (Usually SBF.bin module). The latest i have is v2.24 and >you can download it here<. If you find a newer version then please post it.

If you like my BIOS guide and want to help me in providing always the latest BIOS updates then please consider making a donation to my PayPal account: [email protected]
2 Likes

@Phoenix48 :
Thank you very much for having written and published this guide, which is very helpful for users, who want to update the CPU microcodes of an old (non-UEFI) mainboad BIOS.
To make it easier to find your guide, I have "stickied" it.

Thanks again!
Dieter

@Phoenix48

Great guide!

It might be worth changing the title to add that this is for Award BIOS only, not AMI.

Thank you as well for your usage of MC Extractor. One note: MCE can also convert .dat to microcodes via "-cont" parameter. Try it out.

Yes, it’s still fine work …

1. I could find & convert new microcodes of my Intel Q6600 CPU.
2. I could create the NCPUCODE.BIN with the new microcode(s).

… till …
3. I get an error when I try to insert NCPUCODE.BIN into my old 1MB BIOS.

There was no NCPUCODE.BIN before, but with allmost the same size (21000h / 135.00k) there is “p35ds3.BIN” (20000h 128.00k) at first position.
The Item-name for that is “System BIOS”. But it is compressed.
How could I exchange that p.e. with cbrom155 …?

I tried with /nc_cpucode, but it was too big for the file (error) … and it was added not exchanged the “System BIOS”.
I tried with /cpucode, but then I get a new compressed ROM called “VERSION TABLE”.

I got still an area in BIOS with the name “NCPUCODE.BIN” → it’s in the space from 40000h to 60000h.
After that comes 20 characters in hex-mode: ALIN16…NCPUCODE.BIN…

Best regards, MiMo

@MiesMosel

I didn’t even know that was possible…

There is usually a file named either NCPUCODE.BIN or CPUCODE.BIN at the end of the list when you do the /D option with CBROM. I downloaded the latest Bios (F14) for your GA-P35-DS3 motherboard directly from Gigabyte and opened it with CBROM and… nothing. Where did they put the microcodes in the Bios is anyone’s guess.

The /nc_cpucode option replace the existing .BIN file and the /cpucode option is to add microcodes as compressed module (just like a .ROM) in addition to those already existing. it is why it created a new module in your Bios. It can be good for adding new support for a new CPU but usually not to update an existing one because both the old and new microcodes will be there and no one knows which one the Bios will use.

One other thing is that the microcodes are, in theory, supposed to be always after the MEMINIT.bin file because the Bios can’t load the microcodes if it is not loaded itself. Only file having a remote chance to meet that criteria is SBF.BIN file but because it is listed as OEM0 CODE with just 17.18k, i doubt this is it. (but not totally impossible)

Another wierd fact is that, usually, microcodes are not compressed but in your Bios, everything is compressed so even that can’t give a clue…

Because your Bios has no evident file for the CPU microcodes. i don’t know how to help you. I hope someone with more knowledge of your Bios will be able to help you.

Thanks for your answers.

So, I did it. But have to test if all’s okay …

I loved to do it with HxD, because (like you said) it is uncompressed.
So i copy the new microcode into the bios & re-added the last .rom, so the checksum was made.

checksum is okay @ 6400h.

Booting is fine, but I want to know, if the OS will show it too.

P.S. With MCE → all is fine

It is a good thing if you are able to do it with HxD. That is another guide that is missing here but, unfortunately, i don’t know that subject enough yet to do one.

It’s pretty clear that cbrom 1.98 is older than the BIOS you want to mod. If you download older BIOS versions (example 01), you’ll see that the microcodes module is shown and the actual microcodes displayed at CBROM. I know there is a newer CBROM v1.99 which may work but I cannot find it anywhere.

EDIT: Found it but I don’t see any difference.

CBROM32_1.99.zip (86.7 KB)


You can search with a hex-editor like HxD for the word "NCPUCODE.BIN" & you will find the space for that area.
Nevertheless it can be done, if CBROM don’t show it as an option rom.

I know, it’s an old BIOS, but it goes.

SBF.BIN is the QFlash tool (v2.05).
But that could be different in other / newer BIOS.

bye

Hello, thanks for the guide. Because have a hard time to my GigaByte x58 and never accept to update NCPUCODE.BIN in my last moded BIOS. Found strange behavior on CBROM232 his default option is to merge instead to replace. My NCPUCODE.BIN grow in size with no error, old66 + updated122kb - 188KB. After that, I just use cbrom155 to release NCPUCODE.BIN and cbrom232 to insert updated one. I believe 232 is not gigabyte version, but for CPU code do it well, also the only version that works for me with read-only NCPUCODE.BIN.

CBROM232.zip (52.2 KB)




@plutomaniac , @Phoenix48

Is there a way to use CBROM32_1.99 to modify Dell Vostro 1500 bios 1500_A06.

I tried but CBROM kept running without giving any result, and CPU usage was at 50% for 10 minutes. Then I have to close the cmd.

Yes, there is. You’ll have to extract first the ROM-file with "1500_A06.EXE /writeromfile" from the commandline.
Otherwise it couldn’t work, because there’s also the flashprogram in the DELL.EXE
(Edit: You can also decompress the HDR-Section with "1500_A06.EXE /writehdrfile" from the commandline.)

Edit: Oh sorry, it doesn’t run even from the extracted rom-file. Maybe it’s prohibited by Dell.
But you can do it with hex-editor HxD. What do you need to insert or exchange/update?

I found:



Result:
CBROM232 is an old version from 2007 and to use with ASUS-BIOS.
Maybe there’s Dell-support with another version of CBROM…

Best regards, MiMo

Thank you for your answer.

I want to extract MEM INIT block. I can use Andy’s phoenixtool to extract rom files but I don’t know which module is MEM INIT since the names in DUMP folder are like: 01_1.ROM, 07_2.ROM, etc
How to know which module is MEM INIT (or may be easier case the AHCI rom)

EDIT by Fernando: Unneeded fully quoted post removed (to save space)

Hello Iqthai,

I also watched the folder “DUMP”, but I can’t identify exactly AHCI or MEMINIT.
Maybe, the ROMs are still compressed.

Regards

Hi guys,

Is it still necessary to use CBROM155 for Gigabyte BIOS?

I would like to update microcodes of EP43-S3L motherboard, so that I am able to use a moded Xeon processor. The guide at delidded.com uses CBROM195 and it doesn’t mention any Gigabyte specific instructions…

What could happen if I use a wrong version of CBROM? Will the update of microcodes fail or will I only notice it once my motherboard no longer works? :wink:

Best regards,
Crocodil

Hello Crocodil,

btw., the actual version is CBROM199, but you can’t do that safely automatic with any tool that I know.
Only per hand with hex-editor like HxD.

I read about some problems you could have w/out any microcode.
The CPU is maybe a litte bit more hot caused by loosing EIST or in worst case the PC doesn’t start.
CPU’ll have no Support for SSE4.1, VT-x, … only maybe if there’s still an old (äquivalant XEON to C2Q) 65/45nm CPU microcode in the BIOS.

Exchanging microcodes is easy, so why don’t do it?

Regards, MiMo

Hi,

@MiesMosel : I’m affraid I don’t understand what you mean…

I want to add the Xeon microcodes to the latest bios F9c of Gigabate GA-EP43-S3L, so that I can use moded Xeon X5460.

I’ve found the instructions to add Xeon microcodes at delidded.com. The instructions use CBROM195 and they seem to be working fine - there are no errors when I run all the commands but I haven’t tested the modified bios yet as I’m affraid it might brake the motherboard.

When looking for more information, I’ve run into this topic and the instructions. They’re similar to the ones at delidded.com, the biggest difference is that @Phoenix48 has written it’s mandatory to use CBROM155 for Gigabyte bioses (without clearly explaining why). Unfortunately neither CBROM155 nor CBROM198 work for me on Win10 64bit - there’s an exception when I run either of them. Is it safe to use CBROM195 instead?

You say that exchanging microcodes is easy. How would you do it? With a hex editor? If so, where can I find some instructions or a tutorial on how to do it?

Best regards,
Maciej

Hey,

it’s not safe, because of CBROM19X.exe could change the meminit.bin.
You have to download & extract the right MCs from the intelmicrocodelist_04a.exe.
The extract the MCs from the original BIOS. With HxD you see the length.
Copy some of the first hex-strings & search it in the BIOS.
Exchange it with the new one (should have same ID & length!).
And the checksum of the BIOS should be right (p.e. “7D 00” → “00” is a must!).
You can do that with CBROM199 → insert+release something unneeded.

I can do it for you, if you want - do you?
Do you need additional Option ROM (AHCI, RAID, …)?

regards, MiMo

Which stepping / CPUID does the X5460 have?

Is it Q5XQ, SLANP, QFTX or SLBBA …?