|
CHFSB FAQ (2) The details The cmos area in the Sis 735 chipset is 256 bytes long, but only the first 128 bytes are used. If you dump it with Cmos Tools (which unfortunately only works under Win9x/Me), it will look something like that: The upper table in the picture is the current CMOS table, which corresponds to a fsb of 133/133 MHz. On the lower table we can upload a previously saved table, in this case one with the at 100/100. Using the "compare" function of Cmos Tools we can see that the only differences are in registers 00h, 02h, 06h, 3Fh and 70h. The first three, 00h, 02h and 06h are related to the onboard clock, whereas 3Fh is the lower byte of the Checksum register. These are standard registers, located in the same addresses for every motherboard out there coming from the IBM AT legacy. A good guide on these registers can be found here. On the other hand we have many other registers that are chipset specific, and in our case undocumented. The Sis735 databook has not been released, so to the only possible way of learning anything about these registers is try and error. By comparing the cmos tables corresponding to the available settings of several bios versions you can easily conclude that the fsb settings are always stored in 70h-71h. Studying these registers in their binary form, we can see that there is a 4-bit pattern which is common to all k7s5a bios versions, although its particular position within the 70h-71h bytes does depend on the particular version. To go further we have to study the registers in their binary form. I started with the 010911-OC bios because it's the bios I use on my k7s5a, and it has the extra fsb settings. Later I discovered that luckily enough this is also the bios with the simplest setting syntax, which made the whole thing much easier to grasp. In this particular version only the value of 70h does change, according to the following table:
These 4 significant bits do appear in every bios version, although its position within the 70h-71h bytes does vary from version to version. To make things more complicated, one or two additional significant bits may appear, as in bios 011215: กก
These two extra bits are clearly related to main bus and memory timings, which is good news because it means that the programmers at ECS did some improvement in the later bios revisions in order to get everything working properly at each bus speed. To change the fsb in this bios version we only need to overwrite the values in 70h-71h with any others from the list. The full set of values for all k7s5a bios versions is provided in the fsball.txt file that comes with Chfsb. The job can be done within Cmos Tools, but if you don't have Win9x you may use cmostool. This is a different, older program for Ms-Dos that you can run from a boot disk. If you have trouble using it please read the short tutorial I wrote for the forum: "With CMOSTOOL for DOS (for people with win2k/XP): Look at the table I provided and select a FSB frequency, e.g. 138 138/138 70h=DB 71h=3F Boot from a DOS/win95/win98 floppy with cmostool.exe in it (it's only 38 kB). Run cmostool. It will ask for the CMOS lenght: 128. There is a menu with 6 options. Type 4 to see the contents of the CMOS (Hex Dump function). The adresses we want to write to, 70 and 71, are the two leftmost ones in the bottom row. Type 5 to overwrite the CMOS. Enter the first adress (70). The appropriate syntax is: 0x0070. Enter the corresponding value: (in the previous example, DB) 0x00DB. Type 5 again to change the other adress. Enter 0x0071 and then 0x003F. Type 4 again to verify the changes. Type 6 to quit the program. Reboot."
His default value for 100/100 was 44-20 (01000100-00100000), not 44-2F (01000100-0010FFFF) as in the list. If we take 44-20 and overwrite only the significant bits then we've got 01000101-00100000=45-20. Did it work? It did. The moral of the story is, leave the dummy bits alone. Chfsb does that. Checksum errors The registers in 3Eh and 3Fh contain the checksum for the "extended cmos", which includes the 70h-71h fsb registers. Therefore, if you modified the latter then the checksum would be wrong and the bios would refuse booting and present a "CMOS Checksum wrong" message. That's the theory. In practice, most of the times the bios will boot anyway and correct the checksum by itself. Contrarily to what Mr. Gates may think, it's not very nice to have a program that will only work most of the times, so Chfsb implements checksum correction, as you should do if you found that kind of error in your home experiments with the cmos. The calculation is very simple: First of all, take note of your initial 70h-71h and 3Eh-3Fh values, say 44-20 (for 100 MHz) and checksum 32-FE. Let's assume you want to set 124 MHz (all within bios 011215). 44-20 is binary 01000100-00100000. From the table, to switch to 124 we have to overwrite the significant bits with xx1x0110-xxx1xxxx, so the new value will be 01100110-00110000 = 66-30. To go from 70h=44 to 66 we have added 22 (hex), and from 71h=20 to 30 the difference is +10 (hex). All in all we have to add 22+10=32 (hex) to the checksum, so the new values for 3E-3F will be 32 FE + 00 32 =33 30.
|
(C) Copyright 1998-2009 OCWorkbench.com
|