The Iron Problem of 2000
The 2000 issue is already becoming a hot topic. Moreover, a little more than 200 days remain before its onset. The point is that, for a number of reasons, in computer systems the abbreviated designation of the year is very widely used – in the form of two digits. Until now, this has not led to confusion: the first two digits of the year have always been “19”. With the advent of 2000, there will inevitably be confusion in the interpretation of the meaning of the year. Articles about this issue abound in the terrible horrors of the aftermath of the year 2000. After such articles, many people begin to believe that this is a contrived problem. Others are really worried about the impending problem. Unfortunately, their main attention, as a rule, is directed to fixing a problem in the computer. The prevailing opinion is that it is the personal computer that is the source of the problem. In fact, the danger emanating directly from the computer (“hardware”) is only a small part of the total volume of problems associated with the year 2000. Moreover, this problem is easily resolved. It is the problem of 2000 arising from the fault of hardware that this article is devoted to.
What is the essence of the “iron problem”?
A mandatory element of the computer’s motherboard is RTC (“Real-Time Clock” – a real-time clock). This watch has an autonomous power supply and continues to function even if the computer is turned off. When you turn on the computer, the BIOS reads the readings of the real-time clock and subsequently calculates the time on its own. The operating system at startup receives the current time from the BIOS and subsequently also independently counts the time. There are many applications that independently track the time or keep their calendar. At the same time, at initial loading, the application can receive the current time from the operating system, from the BIOS, or directly from RTC.
Unfortunately, initially in the design of the real-time clock (Motorola MC 146818A), developers allocated a place to store only two digits of the year (Fig. 1).
Real time clock registers
Fig. 1. Real-time clock registers
The highest digits of the year (century) are stored in non-volatile memory (CMOS). When loading, the BIOS receives from RTC only 2 digits of the year, and reads the century (digits 19 or 20) from CMOS (Fig. 2).
Fig. 2. Scheme of interaction CMOS-BIOS-operating system
Despite the fact that the real-time clock, in which the year value is stored in the form of 4 digits, appeared back in 1992 (Dallas Semiconductor), shown in Fig. 2 configuration and to date is often found even in new computers.
All these are not very pleasant facts. However, there is no reason to panic. If you use computers with real-time clocks other than “Ready 2000”, this still does not give reason to believe that the computer is not “ready”.
Initially, the design of the real-time clock implied that the BIOS is responsible for the correct value of the century. Therefore, a computer whose BIOS correctly corrects the year is “ready”.
Considering the question of how the BIOS counts centuries, we should say “unfortunately …” for the second time. Unfortunately, not all BIOS versions respond correctly to the change of centuries. There are still a large number of computers in operation, the BIOS of which does not react in any way to the change of centuries. In these computers, the BIOS only reads the century value from CMOS. When you come to work on January 3, 2000 and turn on such a computer, you will know that 1900 has come. Looking ahead, I note that this is not the biggest problem. In the end, on January 3, you can manually set the system clock to January 3, 2000, and in the future, a computer with this BIOS will work correctly.
However, there are BIOS versions that do not at all ask for the value of the century, but always return 19. These include, in particular, the BIOS versions from Award from April 1994 to May 1995. Against the intrigues of such BIOSs, manual date setting does not save.
And finally, there are many options for “advanced” BIOS, in which the year value obtained from the real-time clock is checked for correctness. However, a year value greater than 1980 is considered correct. Having received a value of 00 from a real-time clock, the BIOS considers this value incorrect and sets the value to 1980. It is curious that in most cases the date is set on April 1, 1980. Maybe this is just a friendly joke? However, this is not the best BIOS option that I would like to deal with in the next at least 300 days.
Sometimes there are other options for the logic of the BIOS. How do you, for example, like the date “January Day 0, January 1900”?
In fairness, it should be noted that most computers purchased in the last year or two, if they do not have Ready 2000 RTC, then have Ready 2000 BIOS. Such a BIOS, receiving a value of 00 when loading from a real-time clock, increases the value of centuries in the CMOS century register from 19 to 20. Thus, the 2000 problem simply does not occur.