中文版 | News | Archives | Reviews | Forum | $ DealsLinks | History | Contact | Privacy

CHFSB FAQ (2)
By Cheepoman and Mpapec @ OCWorkbench.com

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:

FSB speed

70h Hex Value

Binary

H/W TRAP

02

00000010

100

12

00010010

112

16

00010110

124

1A

00011010

100/133

22

00100010

133

32

00110010

138

36

00110110

150

3A

00111010



Only the four bits in red do really matter for fsb setting. A little extra experimentation shows that the bios will accept any value for the other four bits, so with 70h= F5=11110101 the system will boot at 138 with no problems. However, we can never be sure that these apparently "dummy" bits do not contain some subtle settings as "spread spectrum" or something of the like. Therefore, it's wiser to leave these bits alone and only modify what really matters for fsb. So, from now on I'll use the following notation: 138:70h=36=xx1101xx , where "x" stands for a dummy bit.

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:

กก

FSB speed

70h-71h Hex Value

Binary

100

44-2F

xx0x0100-xxx0xxxx

112

45-2F

xx0x0101-xxx0xxxx

124

66-3F

xx1x0110-xxx1xxxx

100/133

48-3F

xx0x1000-xxx1xxxx

133

6C-3F

xx1x1100-xxx1xxxx

138

6D-3F

xx1x1101-xxx1xxxx

150

6E-3F

xx1x1110-xxx1xxxx

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."


By doing this you are overwriting the whole contents of the 70h-71h registers, including the dummy bits. This shouldn't be a problem, but for some people's systems it is and the raw Hex value from the list won't work. One user reported that his system wouldn't boot with bios 011215 and 70h-71h=45-2F (112/112 MHz). What was wrong? let's do the math:

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