Modifying specific Non-UEFI module options.

Hi,

I’m trying to modify what an option in the bios for a non-UEFI motherboard does. Whilst I can extract modules and open them up in HxD is there anyway of making them legible like IRF does for uefi modules? Or is there a way to display what the external functions are within AMIBCP? I sepcifically want to change what values are written to CPU register, eg if selecting an option int he bios writes 01 I would like it to write 11 on the modified bios. Board is an asus R2E

Thanks for any help.

@coldwove - More exact and specific details are needed, then maybe I or someone else could tell you what you need and or how to do what you need.

What option in the BIOS are you wanting to change, and what is the goal of setting 11 instead of 01? Do you just need an option of 11, or are you trying to trick something, or what is the reasoning there.
See what I mean, you need to explain in detail what your goal is, then maybe someone could give you some ideas how to do it.

Yep ok, we’re playing around on x58 core counts. address 80h [2:0] sets the enabled cores, by default the motherboard supports 000 = all, 001 which is 1, 010 is 2 and 100 is 4. We’d like to switch the 1 core option for 3 cores (011) and the 2 core option for 5 cores (101).

Hope you can give some advice as to what can and cannot be done.

Cheers.

So, goal is to replace 001/single core and 010/dual core with 011/triple and 101/5-core? If I understand that right, I get the goal kind of, what is the reasoning there? I mean, can you not otherwise set 3 or 5 cores enabled?
You can use RWEverytihng and change that live in windows correct? If yes, what happens, does it then enable only 3 or 5 cores?

Link me to the BIOS you are using and I’ll see if I can change what you want in assembly/hex. Hope you have a flash programmer for recovery in case it does not work properly!

Yes, that is correct. Intel’s documentation stipulates that the settings must be applied in combination with a processor reset, due to this we haven’t bothered with RWeverything. Bios that we’ve been using is the latest (2101) for the rampage ii extreme.
Please let me know how you convert it into asm as I haven’t been able to get anything that looks proper working.

Cheers.

EDIT: Oh and yes, bios only gives options for 1/2/4/all and we’ve got some ideas to try.

RampageII-ASUS-Extreme-2101.zip (964 KB)

That makes sense then, I assumed live change might not happen. If you want to covert to asm you’d need to do that on some internal BIOS module like setup or CPUinit etc, remove the header up to 4d 5a in hex, then save and make into ASM file using dumpbin via dumpbin /disasm /out:filename.asm input.bin or make into ASM using whatever tool you are using
I would do this in IDA Pro, so only header needs removed then open in IDA Pro and go. I will check it out, if I find something that looks like it works I will let you know where/how etc.
Do you have flash programmer?

*Edit, sorry, I see this is older BIOS, above doesn’t really apply for this BIOS modules, 1B/SLAB uncompressed is where I’d imagine the edit to be needed, but unsure about converting that to ASM.
It opens and looks proper in IDA Pro, open as 16-bit, however with a quick glance through all the routines I don’t recognize the one we’re looking for here but you might.

This BIOS is too old for me to really help with, I’ve forgotten half I used to know for these older BIOS

In AMIBCP I see “Number of cores enabled = 0-7” Can’t you use that setting to choose 3 or 5? This is at Advanced >> CPU Config and replicated at Extreme Tweaker >> CPU Config
Or is that the setting that only shows you 1/2/4/all? If that’s the one, I wonder why it shows 0-7 in AMIBCP?

I can change that in AMIBCP to whatever and it remains after save, if you edit here Advanced >> CPU Config only, I tested 3, 5 and 7. Once updated at Advanced >> CPU Config, it’s copied over to matching setting at Extreme Tweaker >> CPU Config, if you make the change there only it does not remain after save.
Changes are reflected in SLAB module at 000043f8h (Original 80h) and at 00004565h (Original 80h), changes default to to 83, 85, 87 respectively with each saved change.

I assume this may be what you need to try, but unsure what setting would be correct choice to use since from 0-7 options you see 1/2/4/all? Multiple tests to changes there would be needed to see outcome, I would test all 7 possible other than default changes
Do you want me to make you 7 BIOS with 81-87 set in each location, or can you do that on your own? This may not be what you were after, but it’s something I would test out to see what each will give you, what’s reflected in BIOS as default applied per each and how many cores show up in windows.

Thanks for all the info . I’ll try going through 0-7 see if that applies properly but I have my doubts. I’ll also give IDA Pro a go see if that looks nicer.

Thanks again :slight_smile:

You’re welcome. I wonder how it will apply too, since your BIOS options don’t match what’s visible there in AMIBCP, but since you can only see 1/2/4/all that’s only 4 of the 8 possibilities for that setting so I assume something different will happen with at least 4 of those changes

IDA takes some getting used to, and you can’t edit and save, only edit via hex view then preview in-place changes and how the effect the flow/code etc.
In layout/IDA-view where you have flow graphics, you can press space bar to switch back–forth to assembly/text views and from the hex tab it will drop you at exact location from your IDA0view tab.
To fake edit in hex and see changes reflect in the IDA view, hit F2 to enable edit and F2 again once your done, then switch back to IDA view to see live changes
Once done making changes that you want to keep, do file >> Produce File >> DIF and it will make a DIF/text file that gives you exact addresses to make changes via hex.

Thanks :D. As for the disparity between amibcp and the bios; There is a chance they will actually apply but are currently invisible due to the cpu in the same sense that if I were to insert a 2 core xeon the only available options would be all cores and single core. It’d be odd for the programmers to make all cpus set those options invisible but it’s possible.

Well, you’d think if you can see 1/2/4/all there would be a 3 option too then if it’s 4 core, or 5/6/7 before all if 8 core. I know what you mean though, I expected to see 1/2/4/all in AMIBCP when you said that though, so it surprised me to see 0-7

yeah it’s weird for the option to appear in bcp and not in the bios, especially on a rampage extreme which are normally as unlocked and transparent as they come. I’ve also noticed that QPI link speed has options 0-7 whilst only 3 are available in the bios, might just be that there are options that are ‘floating’ for future additions.

If this was modern BIOS I’d be able to locate that stuff in assembly and then make a better guess if they are empty options, reserved or locked away etc, and then could enable them if so.
I can’t remember how to do any of that for these older BIOS, and nothing looks like right stuff in assembly for this that I can recognize. I’m not the greatest at assembly, but on modern modules I can find what I’m looking for usually, probably mainly due to search and a lot of text in modern BIOS modules vs these older smaller ones.

Same here, I’ve been going through the disassembled SLAB files and i’m just all around confused

Nothing like modern UEFI modules!

Absolutely