Originally Posted by WerePug
I have analyzed the file structure of the roms a bit.
I found out, that all voltages are defined in 34-byte long blocks. First 4 bytes are an integer value, defining min-voltage. This value is in milivolts times 1000. Which would make them microvolts, I suppose. Next 4 bytes are the max voltage for that definition. The rest of the values, I have no idea about. The block is not 4-byte aligned, therefore some of the values have to be something other than 4-byte integers (obviously, 4-byte alignment does not imply, that all the values would be 4-byte integers. Could be 2x 2-byte integers instead of one 4-byte integer). Also, it appears, that all the voltage definitions are right next to each other, which suggests, that they are ordered into a typed array.
I have compared the MaxUnleashed bios from the OP (for the 980), and my own modded bios of the 980 ti (MSI 6G). It would appear, that they are largely identical in terms of voltage definition structure, though values vary, obviously. Also, they start at different offsets in the file.
Here is a spreadsheet analyzing the voltage blocks up to the clock voltage table
Here is a 2010 macro-enabled Excel
ReverseEngineering.zip 116k .zip file
From what I can gather, the purpose of the voltage blocks, in relation to their position in the array, is identical. Theoretically, since the MBT does not allow tweaking the two sliders for external voltage adjustment and temp throttle, you could just replace the values directly in the file, with a hex editor like HxD. The thing about voltage values, they seem to be multiples of some number. Also, the value you see in MBT is kinda rounded up, so in the file, there are values like 1281,25 instead of 1281.3. Oh, and of course, the file has a checksum in it, which I have no idea how is calculated. It is only 1 byte long though. Maybe just sum across all bytes mod 255?
What baffles me, is why the MBT does not display those 2 specific sliders. I'm not sure if it is possible, but since the voltage array is on a different offset, the MBT could just be rewriting random pieces of the file, and we just kinda got lucky that it did not corrupt it entirely. This would kind of explain, why messing around with the voltages and max voltage slider has no effect, and maybe why moving the p05 slider actually has an effect, following the broken clock principle.
EDIT: I just noticed google excel likes to be funny, and put spaces instead of decimal separators. So there is that. 797 435 actually means 797,435
Also, just checked, the MBT does edit the "correct" position in the 980TI file, that is supposed to correspond to the max voltage slider (which I edited in MBT), and does not overwrite random chunks of file. It also overwrites the "correct" position of the p00 slider. Which again begs the question, why does MBT not display the 2 sliders, since it obviously has the correct offsets? Is there a dependency in the voltage blocks, that is unclear, and as a safety measure, it refrains from editing them?
EDIT2: Ok, so this happened. I rewrote the value for external regulation and temp throttle in my GM200 bios to that of the GM204-MaxUnleashed. Obviously, when I opened the file in MBT, the green filed with checksum was red, and a difference between calculated checksum and checksum in file was shown. However, now an additional slider appeard in the voltage table. It seems to be the temp throttle slider. MBT can now rewrite the correct position in the file, and as an added bonus, it calculates the correct checksum when it saves. Great success! Here is my biosThese are demo BIOSes for MSI 6G! Do not flash on G1! They have different offsets!
Base.zip 152k .zip file
EDIT3: Even greater success! I changed both min and max values of the external adjustment entry to match that of the MaxUnleashed, and now it appears as well! Here is that bios (Still MSI 6G):
Base2.zip 152k .zip file
The root of all evil rests with the base values for those sliders. In stock GM200 bios, those are 1150,675 - 1198,47 for the external regulation and 1190,349 - 1239,838 for the temp throttle. It would appear, that along with other "unkown" voltage table entries, the MBT discards values, that is doesn't consider "neat" (multiples of 100
, I would assume). Therefore, changing the values to multiples 100 (what gm204 bioses have) caused them to appear in the GUI. I am assuming, this would work for the other unknown values as well, though no reason to poke that bear.
Here is the 980Ti_F3DP interim pre-BETA1 BIOS (for G1
), now with 20% more voltage sliders!
G1_Unlocked.zip 152k .zip file
It would warrant verifying, if the only values replaced by the MBT, are the first 2 4-byte integers on start of each voltage entry, That is, if the rest of the values in the voltage entry are somehow dependent on these first two values! Here is where the source code would come in handy...