Dokumentation für cty2k.zip
(cty2ktst.com, cty2kfix.com, cty2k.doc)

Inhalt

  1. Vorwort
  2. cty2ktst
    1. Übersicht
    2. Benutzung
    3. Beispiele
    4. Risiken
    5. Konsequenz
    6. Optionen
    7. Hinweise
    8. Interna
  3. cty2kfix
  4. Lizenz

Vorwort

Das cty2k.zip-Paket enthält zur Zeit zwei Programme, cty2ktst und cty2kfix, die zum Testen von PCs auf ihre Jahr-2000-Tauglichkeit und zum Beheben einiger dabei auftretender Probleme dienen. Es geht dabei nur um die rudimentäre Fähigkeit der Hardware. Probleme in Anwendungen und Datenbeständen kann die Software weder aufspüren noch beheben.

Die Verfahren, derer sich diese beiden Programme bedienen, haben wir nach bestem Wissen und Gewissen ausgewählt. Sie spiegeln unseren derzeitigen Erkenntnisstand in bezug auf PC-Hardware und das Jahr 2000 wider. Die Programme treffen keine Aussage darüber, daß ein PC mit aller Hard- und Software tatsächlich "Jahr-2000-fest" ist.

Trotz aller Sorgfalt, können wir weder eine Garantie dafür übernehmen, daß diese Programme alle erdenklichen Fehler aufspüren und beseitigen, noch fehlerfreie Funktion in allen Fällen zusichern. Zur Prävention weisen wir daraufhin, daß es wichtig ist, Sicherheitskopien seiner Daten vorher (!) anzufertigen.

Die Motivation, diese Programme trotz des großen Angebots zu erstellen, lag vor allem darin, die genauen Zusammenhänge zu erkunden und die Funktionsweise zu kontrollieren. Neben dem reinen Funktionstest war uns wichtig zu vermitteln, an welchen Stellen es bei einem PC klemmt.

Deshalb: Sollten uns neue Erkenntnisse vorliegen, die eine Anpassung der Programme erfordern, so werden wir diese nach Möglichkeit umsetzen. Anregungen dazu und Kritik sind jederzeit willkommen (am besten via EMail an cty2k@ct.heise.de). Aktuelle Informationen, sofern sich Abweichungen ergeben, werden wir auf der cty2k-Homepage veröffentlichen:

www.heise.de/ct/Redaktion/ps/cty2k.html

cty2ktst: Übersicht

cty2ktst stellt das eigentliche Testwerkzeug dar. Es arbeitet wahlweise unter DOS, kommt aber auch ohne aus. Ein Einsatz unter Windows ergibt keinen Sinn. Das Verfahren, das cty2ktst benutzt, ist in beiden Fällen identisch. Folgende vier Stufen des Tests werden, je nachdem, wie einzelne Tests abschliessen, maximal durchlaufen.

Zuerst stellt cty2ktst die Systemuhr eines PCs kurz vor den Wechsel auf das Jahr 2000. Es wartet einen kurzen Moment und prüft dann, wie die Hardware und das BIOS reagieren. Auf modernen PCs, die bei der Umstellung keine Probleme erwarten lassen, genügt dieser Test (im folgenden BIOS-Test genannt).

Neu-MarkeSeit der Version 1.3 überprüft cty2ktst zusätzlich, ob das BIOS einen aktiven Korrekturversuch unternimmt. Einige moderne PCs bringen einen Korrekturmechanismus mit, der permanent lauert, ob das Jahr 2000 begonnen hat und dann erst eingreift. über diese Art der Lösung läßt sich streiten; später mehr dazu. Sie heißt im folgenden BIOS-Test-2.

Viele ältere, aber auch brandaktuelle PCs meistern weder den ersten noch den zweiten Testschritt. cty2ktst löst in einem solchen Fall einen Hardware-Reset aus. Ein zweiter Start des Programmes liefert Aufschluß, ob das BIOS des Systems den Übergang ins Jahr 2000 jetzt bemerkt und korrigiert hat. Moderne PCs meistern spätestens diesen Test (POST-Test).

Auf alten PCs ist oft noch ein vierter Testdurchgang nötig; cty2ktst löst dazu erneut einen Reset aus. Beim dritten Programmstart (vierten Testschritt) schließlich zeigt sich, ob ein PC grundsätzlich im Jahr 2000 arbeitsfähig bleibt, etwa wenn man die Systemuhr einmal von Hand umstellt (Systeme mit Award-BIOS aus den Jahren 94 bis 96 können das unter Umständen nicht). Ein Großteil der alten PCs hat hierbei aber keine Probleme (Fix-Test).

Bevor cty2ktst einen Reset auslöst, legt es eine zehn Sekunden lange Pause ein, so daß die Möglichkeit besteht, das System für diesen Schritt auch abzuschalten. Nur beim zweiten Testschritt, der ebenfalls eine Wartezeit von fünf Sekunden beinhaltet und auf eine permanent lauernde Korrekturfunktion des BIOS testet, darf das System nicht abgeschaltet werden. Unserer Erkenntnis nach, ist das Abschalten vor dem Reset aber nicht erforderlich. Nach Abschluß der Tests stellt cty2ktst die Einstellung der Real Time Clock (RTC) wieder her, restauriert also Datum und Uhrzeit; eine geringe Abweichung ist aber nicht auszuschließen. Sollte das Restaurieren nicht klappen, gibt das Programm eine entsprechende Warnmeldung aus.

cty2ktst: Benutzung

cty2ktst läuft sowohl unter DOS als auch eigenständig ohne Hilfe eines Betriebssystems, indem es sich selbst auf eine formatierte Diskette vervielfältigt und von dort über einen eigenen Boot-Loader startet. Die Vervielfältigungsfunktion arbeitet unter (MS/DR/Caldera/PC-)DOS, Windows 3.1, 95, 98 und NT, Linux (mit dosemu) sowie OS/2 ab 2.x. Sie läßt sich durch einen speziellen Parameter auswählen, den man dem Programm beim Aufruf mitgibt (siehe Optionen).

Der Einsatz des Programms über die produzierte Diskette hat zwei Vorteile: Erstens ist der Test wesentlich schneller absolviert, als wenn noch ein Betriebssystem involviert wäre. Und zweitens muß man nicht erst ein eventuell gar nicht vorhandes Betriebssystem herbeischaffen. Es mag ein Nachteil sein, daß die Disketten-Variante natürlich kein nachträglich lesbares Protokoll anfertigt, sondern das Ergebnis nur auf dem Bildschirm zeigt. Die Ausgaben der DOS-Variante lassen sich dagegen mit der Ausgabeumleitung in einer Datei protokollieren.

Beide Versionen brauchen Schreibzugriff auf den Datenträger, von dem aus sie gestartet wurden. (cty2ktst speichert dort seine Laufzeitdaten und sichert dort auch die beim Erstaufruf angegebenen Optionen.) Das heißt, die Boot-Diskette darf nicht schreibgeschützt sein. Die unter DOS laufende Version schreibt ihre Daten in eine temporäre Datei im aktuellen Verzeichnis des aktuellen Laufwerks. Diese Datei wird bei Testende automatisch gelöscht.

Für den Einsatz der DOS-Version empfiehlt es sich, eine ansonsten nackte Boot-Diskette oder spezielle Bootkonfiguration anzufertigen, da unter Umständen mehrere Durchläufe notwendig sind. Es sollte in jedem Fall sichergestellt sein, daß keine andere Software auf die Real Time Clock (RTC) zugreift. Auch andere DOS-Helferlein sind zu meiden, etwa Speichermanager à la EMM386, da sie unter Umständen das Auslösen eines Reset verhindern (siehe Optionen).

cty2ktst: Beispiele

Das Benuzten von cty2ktst ist einfach. Unter DOS sollte sichergestellt sein, daß das Programm automatisch wieder startet, wenn es einen Reset ausgelöst hat. Das läßt sich zum Beispiel bewerkstelligen, indem man den Programmaufruf als erstes Kommando in die autoexec.bat-Datei einer Test-DOS-Bootdiskette aufnimmt.

cty2ktst stellt selbständig fest, ob ein weiterer Programmlauf notwendig ist. Hat es das Testende erreich, setzt es die weitere Ausführung etwa einer autoexec.bat-Datei fort. (Die eigenständig via Boot-Diskette laufende Version hingegen fordert zur Entnahme der Diskette zum Drücken einer Taste auf und löst dann einen Reset aus.)

Die Ausgaben, die die DOS-Version tätigt, lassen sich über die Ein-/Ausgabeumlenkung in eine Datei protokollieren. Je nachdem an welchen Informationen Sie interessiert sind, müssen Sie dazu ein oder mehrere Umlenkzeichen verwenden (eines sorgt dafür, daß die Datei neu erzeugt wird, zwei hängen die Ausgaben Lauf für Lauf aneinander: also "cty2ktst > test.log" oder "cty2ktst >> test.log". Alle hier wiedergegebenen Ausgaben des Programms sind zum Beispiel so entstanden.

Während des Testens gibt cty2ktst Informationen, was es gerade tut und wie einzelne Tests ausgegangen sind. Anschließend an den letzten Testlauf liefert es eine Zusammenfassung der wichtigen Ergebnisse (Ausgaben). Die Zusammenfassung allein genügt, um ein System zu beurteilen. Auf einem System, dessen BIOS geeignete Korrekturmechanismen aufweist, ergibt sich nach dem Aufruf von cty2ktst folgende Ausgabe:

  cty2ktst 1.00, (C) c't/ps
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware

  Test, wie RTC/BIOS den Uebergang von 1999 auf 2000 meistern
  RTC-klassisch, CMOS-Jahrhundertbyte nicht korrigiert (=19)
  01.01.2000 BIOS korrigiert Jahrhundert - System ist Jahr-2000-fest
  RTC-klassisch, CMOS-Jahrhundertbyte korrigiert (=20)

  Zusammenfassung:
  BIOS korrigiert Jahrhundert - System ist Jahr-2000-fest

Bevor das Programm an der BIOS-Schnittstellte prüft, ob ein System den Übergang ins Jahr 2000 sauber vollzieht, liest es zuerst das Jahrhundertbyte im CMOS-RAM aus. Systeme, die einen modernen RTC-Baustein aufweisen, schaffen den Übergang ins Jahr 2000 ganz ohne BIOS-Hilfe. Sie sind aber auch noch heute eher rar. Die Masse der PCs schafft das nicht ohne das BIOS. Erst der von cty2ktst anschließend eingesetzte BIOS-Aufruf erledigt das gemeinhin. cty2ktst wiederholt deshalb den direkten Zugriff auf das Jahrundertbyte im Anschluß an den BIOS-Aufruf. (In den zuvor angegebenen Beispielausgaben handelt es sich um ein solches System: Das Jahrhundertbyte wird erst angepaßt, wenn das BIOS nach dem aktuellen Datum gefragt wurde.)

Auf einem System, das im BIOS keinen Korrekturcode enthält, sind bis zu drei weitere Tests erforderlich:

  cty2ktst 1.00, (C) c't/ps
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware

  Test, wie RTC/BIOS den Uebergang von 1999 auf 2000 meistern
  RTC-klassisch, CMOS-Jahrhundertbyte nicht korrigiert (=19)
  01.01.1900 BIOS korrigiert Jahrhundert nicht
  RTC-klassisch, CMOS-Jahrhundertbyte nicht korrigiert (=19)
  Reset-/Abschalt-Test erforderlich ... noch 9 Sekunden

Im ersten Durchlauf bemerkt cty2ktst, daß der BIOS-Code den Überlauf der RTC nicht honoriert. Zur Sicherheit (obwohl praktisch wohl nicht vorkommend) gibt es auch hier ein zweites Mal die Information im CMOS-Jahrhundertbyte preis und startet anschließend das System neu.

Bei einigen BIOS-Versionen, die aktiven Korrekturcode enthalten (also eine permanente Überwachung für den Jahreswechsel von 00 auf 99) konnte man hier bei der zweiten Ausgabe des CMOS-Jahrhundertbyte sehen, daß etwas passiert war. Es stand in der Meldung dann schon auf "20". Leider hat die Version 1.00 das nicht mehr erfasst, sondern erst im nächsten Testschritt die Umstellung bemerkt - dadurch wurde das System grundsätzlich zwar richtig beurteilt, aber zu spät.

Neu-MarkeMit der Version 1.3 prüft cty2ktst speziell auf diesen Korrekturcode: Während der eigentlichen Umstellung auf das Jahr 2000 schaltet das Programm bestimmte Interrupt-Quellen ab. Erst wenn der Uebergang vollzogen und das Jahrhundertbyte freigegeben ist, erlaubt es sie wieder. In einer 5 Sekunden langen Pause gibt es dem BIOS Gelegenheit das Jahrhundertbyte anzupassen.

  cty2ktst 1.3, (C) c't/ps                                                        
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware              
                                                                                
  Test, wie RTC/BIOS den Uebergang von 1999 auf 2000 meistern                     
  RTC-klassisch, CMOS-Jahrhundertbyte nicht korrigiert (=19)                      
  01.01.1900 BIOS korrigiert Jahrhundert nicht im ersten Durchlauf                
  CMOS-Jahrhundertbyte erst nachtraeglich vom BIOS manipuliert (=20)              
  BIOS korrigiert Jahrhundert verpaetet. System ist bedingt Jahr-2000-fest        
                                                                                
  Zusammenfassung:                                                                
  BIOS korrigiert Jahrhundert nicht im ersten Durchlauf                           
  BIOS korrigiert Jahrhundert verpaetet. System ist bedingt Jahr-2000-fest        

Das Wort "verspaetet" bringt nur die Testabfolge zum Ausdruck. Es stellt keineswegs eine Bewertung darüber dar, daß Korrekturen zu spät ausgeführt werden. Über die Jahr-2000-Festigkeit eines solchen PCs läßt sich indes streiten. Da das für den Testablauf nicht relevant ist, diskutiert ein späterer Abschnitt diese Korrekturmaßnahme für das Jahr 2000.

Der aktive Korrekturcode stellt ebenso wie eine (super-)moderne RTC eher die Ausnahme bei heutigen PCs dar. Da beides allerdings unter Umständen die Testaussagen verfälscht oder sogar dazu führt, daß unterschiedliche Test-Werkzeuge zu unterschiedlichen Ergebnissen kommen, widmet die Version 1.3 diesem Fall Aufmerksamkeit. Wenn ein System weder eine moderne RTC mitbringt noch BIOS-Korrekturcode, überprüft das Programm, ob eventuell aktiver Korrekturcode vorhanden ist. Falls nicht meldet es das entsprechend:

  cty2ktst 1.3, (C) c't/ps                                                        
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware              
                                                                                
  Test, wie RTC/BIOS den Uebergang von 1999 auf 2000 meistern                     
  RTC-klassisch, CMOS-Jahrhundertbyte nicht korrigiert (=19)                      
  01.01.1900 BIOS korrigiert Jahrhundert nicht im ersten Durchlauf                
  RTC-klassisch, CMOS-Jahrhundertbyte nicht korrigiert (=19)                      
  Keine Softwarekorrektur festgestellt, die Jahrhundertbyte aendert               
  Reset-/Abschalt-Test erforderlich ... noch 9 Sekunden

Bei einigen unserer Testsysteme kommt cty2ktst im nächsten Schritt (dem POST-Test) zum Ende. Sie korrigieren den Wechsel aufs Jahr 2000 zwar nicht in der BIOS-Routine zum Auslesen der RTC, sehrwohl aber während des Selbsttests (POST):

  cty2ktst 1.3, (C) c't/ps
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware

  RTC-klassisch, CMOS-Jahrhundertbyte vom BIOS korrigiert (=20)
  01.01.2000 BIOS korrigiert Jahrhundert im POST - System ist Jahr-2000-fest

  Zusammenfassung:
  BIOS korrigiert Jahrhundert nicht im ersten Durchlauf
  BIOS korrigiert Jahrhundert im POST - System ist Jahr-2000-fest

Ältere Systeme bewältigen die Umstellung aufs Jahr 2000 aber gar nicht von allein. Sie sind manuell am 1.1.2000 oder später umzustellen. Nicht in jedem Fall klappt das. Deswegen stellt cty2ktst via BIOS-Routine das Datum auf einen Tag im Jahr 2000 ein und simuliert so die selbst bei wirklich alten 286ern mögliche manuelle Datumskorrektur:

  cty2ktst 1.00, (C) c't/ps
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware

  RTC-klassisch, CMOS-Jahrhundertbyte vom BIOS korrigiert (=20)
  25.03.2000 BIOS erlaubt und behaelt einmalige manuelle Korrektur

  Zusammenfassung:
  BIOS korrigiert Jahrhundert nicht
  BIOS korrigiert Jahrhundert auch nicht im POST
  BIOS erlaubt und behaelt einmalige manuelle Korrektur

Fazit: Dieses System erfordert eine einmalige Umstellung im Jahr 2000. Es gibt keine Anzeichen dafür, daß es diese Korrektur vergißt oder das manuell erfaßte Datum eigenmächtig verändert. Je nachdem, was für ein Betriebssystem auf dem PC läuft, muß man diese Korrektur nicht einmal von Hand durchführen: Manches Betriebssystem erledigt sie von sich aus. Andere brauchen die Korrektur nicht. Sollte die Korrektur nötig sein, kann sie cty2kfix automatisch übernehmen.

Leider kann es auch anders kommen:

  cty2ktst 1.00, (C) c't/ps
  Programm zum Testen der Jahr-2000-Vertraeglichkeit der PC-Hardware

  RTC-klassisch, CMOS-Jahrhundertbyte vom BIOS korrigiert (=20)
  25.03.2096 BIOS erlaubt keine manuelle Korrektur (Award-Bug!)

  Zusammenfassung:
  BIOS korrigiert Jahrhundert nicht
  BIOS korrigiert Jahrhundert auch nicht im POST
  BIOS erlaubt keine manuelle Korrektur (Award-Bug!)

Wer eine solche Meldung bekommt, hat Pech. Das Testsystem hat wahrscheinlich ein Award-BIOS aus der Zeit von 94 bis 96. Diese Versionen stolpern über ein korrekt eingestelltes Datum im Jahr 2000. Das BIOS toleriert als Jahrensangaben nur 1996 (manche auch 1994) bis 1999. Sie korrigieren das Jahrzehnt immer auf einen Startwert, egal, ob das Jahrundert auf 19 oder 20 gestellt ist. Ein BIOS-Update ist fällig. Ist das nicht zu bekommen, hilft cty2kfix.

Die Datumsangaben, die cty2ktst in den obigen Beispielen ausgibt (etwa beim letzten Test den 25.03.2000) dienen der Sichtkontrolle. Da wir nicht jede potentielle BIOS-Macke aller Prüflinge im Vorfeld kennen (wir gehen jedenfalls davon aus), erleichtern diese Ausgaben das Eingrenzen eventueller bis jetzt unbekannter Fehler. cty2ktst tätigt diese Ausgaben nur, wenn es mit der Option /v gestartet respektive die Bootdiskette damit produziert wird.

Egal, ob Sie cty2ktst unter DOS oder die eigenständig lauffähige Version benutzen, bleiben die Ausgaben die gleichen. Mit einer Ausnahme: Wird als Testgrundlage ein "modernes" DOS (etwa aus Windows 98) verwendet, kommt der Test bereits im zweiten Schritt zum Abschluß. cty2ktst attestiert dem BIOS-POST-Code dann, daß er das System korrekt umstellt (tatsächlich tut das aber der Start-Code der jeweiligen DOS-Version).

Leider lassen sich die MSDOS-Versionen, die diesen Code enthalten und die übrigen, nicht mit vertretbarem Aufwand unterscheiden, so daß die DOS-Warnmeldung, die cty2ktst unter Umständen ausgibt, nicht zwangsläufig richtig sein muß. Kurzum: Wer tatsächlich den Fähigkeiten seines PCs auf den Zahn fühlen will, nimmt entweder ein altes DOS (kleiner 7) oder die cty2ktst-Bootdiskette.

Eine Reihe weiterer Meldungen zeigen wir an dieser Stelle nicht. Sie sind weitgehend selbsterklärend und können zum Beispiel auftreten, wenn die Testdiskette schreibgeschützt ist (cty2ktst braucht zum Erkennen der Testschritte und zum Merken der Ergebnisse Schreibzugriff auf das aktuelle DOS-Laufwerk und -Verzeichnis respektive seine Testdiskette).

cty2ktst: Risiken

Das Risiko beim Einsatz von cty2ktst ist nach unserer Erfahrung gering. Dennoch wollen wir die durch einen Leser gemachte Erfahrung nicht verschweigen: Ein älteres System (auf 80386-Basis) erzeugte nach dem Umstellen auf das Jahr 2000 (unter DOS) laufend NMIs (nicht maskierbare Interruptanforderungen). Dieser Effekt ließ sich nur abstellen, indem man den Inhalt des CMOS-RAMs zurücksetzte. Vermutlich handelt es sich dabei um einen Fehler im BIOS, der beim Zugriff auf die Register der RTC die NMI-Maske verändert. Eine hieb- und stichfeste Erklärung steht aber noch aus.

Neu-MarkeIn der Version 1.3 sind alle Zugriffe auf das CMOS-RAM (auf die RTC-Register selbst greift cty2ktst ohnehin nicht zu) durch das Sperren von Interrupts geschützt. Dieser eigentlich selbstverständliche Handgriff fehlte in der Version 1.00 leider. Es ist möglich, daß der zuvor geschilderte Fehler damit in Zusammenhang stand. Das allerdings wäre zumindest beim Einsatz der Bootdiskette sehr bedenklich. Denn warum sollten parallele Zugriff auf die CMOS-Register stattfinden, während der Test läuft.

cty2ktst: Konsequenz

Aus den Ergebnissen der von cty2ktst unternommenen Tests lassen sich folgende Handlungsanweisungen ableiten: Besteht ein PC den ersten, zweiten oder dritten Test, muß man nichts weiter tun (BIOS-, BIOS-1- oder POST-Test). Klappt es erst im vierten Testschritt, so muß das Datum und gegebenenfalls die Uhrzeit beim ersten Einschalten im Jahr 2000 einmalig korrigiert werden. Das gilt aber nur, wenn Sie ein Betriebssystem einsetzen, das auf das BIOS zugreift (siehe Tabelle unter Interna).

Die einmalige Korrektur kann man sich sparen, wenn das Betriebssystem ohnehin nur auf die RTC zugreift (etwa Linux). Unterbleiben kann sie auch, wenn auf dem PC Windows 98, das aktuelle Caldera OpenDOS und IBMs PC-DOS 2000 laufen. Diese DOS-Versionen beinhalten Korrekturcode, der den Eingriff übernimmt. Für ältere DOS-Versionen kann cty2kfix helfen; es führt diese Korrektur, wenn es in der autoexec.bat beim Rechnerstart aufgerufen wird, zur rechten Zeit automatisch aus.

Fällt ein System beim letzten Test durch, gibt es zwei Möglichkeiten: Entweder Sie entschließen sich, die Systemuhr mit Beginn des Jahres 2000 asynchron zur tatsächlichen Zeit laufen zu lassen (cty2kfix hilft dabei) oder bemühen sich um ein BIOS-Update, das, sofern verfügbar, mit ziemlicher Sicherheit diesen BIOS-Fehler behebt. Da dieser Fehler nur im Zusammenhang mit bestimmten Versionen des Award-BIOS erwähnt wird, haben wir ihn so getauft.

Was sich angesichts der Vielfalt des PC-Marktes nicht ausschließen läßt, ist, daß die Tests auf eine andere Merkwürdigkeit stoßen. Wir haben durch Plausibilitätstests dafür gesorgt, daß solche Ausnahmen erkannt und gemeldet werden. In solchen Fällen sind wir gern bereit, das Problem zu untersuchen. Um uns das zu vereinfachen, möchten wir Sie darum bitten, das Protokoll eines Durchlaufs mit der Option "/v" mitzuliefern (siehe Option).

cty2ktst: Optionen

/i
erzeugt eine direkt bootfähige Version des Programms auf einer formatierten leeren Diskette in Laufwerk A: (mit Rückfrage)
/s
zeigt den aktuellen Zustand der RTC via BIOS-Funktion an (kann hilfreich sein, wenn man mit cty2ktst allein nicht zum Ziel kommt, aber neutrale Auskunft über den RTC-Zustand braucht)
/v
sorgt dafür, daß während des Testens der jeweilige Zustand der RTC (darin gespeichertes Datum) angezeigt wird
/e
veranlaßt die DOS-Variante zum Start, obwohl der Prozessor nicht im Real Mode läuft. Das kann schiefgehen, je nachdem, warum der Prozessor in dieser Betriebsart ist. Das kann erstens bei Speichermanagern (etwa EMM386 in der config.sys) oder zweitens in einer DOS-Emulation (NT-DOS-Box, Linux Dosemu) der Fall sein. Mit der Option /e läßt sich diese Modus-Erkennung abschalten. Doch Vorsicht: Es könnte dann sein, daß mit der Emulation auch das Gastsystem stirbt! Nach unseren Erfahrungen macht auch mancher Speichermanager Ärger, beim Versuch das System via Software zum Reset zu bewegen. Deshalb im Zweifelsfall ohne EMM386 etc. testen!
/p
erzwingt selbst nach erfolgreichem BIOS-Test, daß das System einen Reset durchführt (reiner Sicherheitstest, für dessen Nützlichkeit kein Beweis existiert - für Paranoiker)

(Es genügt, die Optionen /vep beim ersten Aufruf anzugeben, sie wirken auf die folgenden Läufe bis zum Testabschluss; die Optionen /vp wirken auf eine via /i erzeugte Boot-Diskette; die Reihenfolge spielt keine Rolle; der Slash "/" kann entfallen; Leerzeichen und Tab(s) werden überlesen; alle anderen Zeichen liefern eine kurze Hilfestellung).

cty2ktst: Hinweise

Testwerkzeug für PCs ist eigentlich falsch: Erst mit dem AT hat sich eine Real Time Clock (RTC) durchgesetzt. Entsprechend funktionieren sowohl cty2ktst als auch cty2kfix erst auf AT-kompatiblen 286ern und Nachfolgern (bis hin zu topaktuellen PCs).

NT überprüft vor dem Beschreiben einer Diskette, ob es den Medien-Typ kennt. Es liest dazu den Boot-Sektor einer Diskette ein. Da cty2ktst keinen regulären Boot-Sektor schreibt, meldet NT beim Versuch, eine nicht (FAT-vor-)formatierte Diskette zu beschreiben, einen Fehler und beendet cty2ktst. Als Abhilfe genügt es, die Diskette unter NT erneut zu formatieren.

Linux scheint mitunter ebenfalls Schwierigkeiten zu haben, aus dosemu heraus eine ct2yktst-Boot-Diskette zu erzeugen. Das hängt offenbar damit zusammen, daß manche Linux-Installation den Treiber für Zugriffe aufs Diskettenlaufwerk dynamisch (via kerneld) lädt. Der erste Schreibversuch geht dadurch schief. Im zweiten Anlauf (oder mit statisch geladenem oder in den Kernel eingebundenen floppy-Moddul) klappt es beim ersten Versuch.

Soll cty2ktst Systeme untersuchen, die Netzwerk-Client-Software laufen lassen, so ist Vorsicht angebracht, wie diese Software auf die Systemuhr wirkt, insbesondere, wenn cty2ktst den Rechner neu starten muß. Ältere Novell-Client-Software hat sich bei unseren Versuchen als extrem hartnäckig erwiesen. Zudem sollte man prüfen, ob der Einsatz des Programms auf Systemen überhaupt Sinn ergibt, die sich ohnehin die Zeit von einem Server holen.

Das direkte Beschreiben der Boot-Diskette könnte Viren-Wächter auf den Plan rufen, da cty2ktst neuen Boot-Code auf der Diskette ablegt. Das ist in diesem Fall aber gewünscht. Gegebenenfalls muß man diese Wächter-Option vorübergehend abschalten.

Der Boot-Code setzt stillschweigend voraus, daß der Prüfling mindest 640 KByte Hauptspeicher hat. Ansonsten landet der Boot-Code im Leeren. Eine Überprüfung findet nicht statt.

Es gibt diverse Wege, einen PC zu einem Neustart zu bewegen. cty2ktst benutzt dazu den Tastatur-Controller. Auf Systemen, die latente Restart-Probleme haben (zum Beispiel auch unter Windows), kann das versagen; das heißt, das System tut nach dem Reset-Countdown nichts. Der Test kann durch manuellen Druck auf Reset oder kurzes Aus- und Einschalten des PC dann aber fortgesetzt werden.

cty2ktst: Interna

Da das Testen der Jahr-2000-Verträglichkeit kaum eine Geheimsache ist, sondern eigentlich eine Trivialität, die der Allgemeinheit zu Gute kommt, wollen wir kein Geheimnis aus unserer Rezeptur machen. cty2ktst und cty2kfix bedienen sich keiner undokumentierten Funktionen und wenden auch keine besonderen Tricks an:

Der Zugriff auf die Real Time Clock (RTC) erfolgt generell über das BIOS, das auch DOS und Windows 3.x bis 9x benutzen. cty2ktst liest zusätzlich das im CMOS abgelegte Byte aus, das die Jahrhundertinformation enthält. Dieses Auslesen dient nur der Plausibilitätprüfung.

Neu-MarkeDie Version 1.3 verwendet zusätzlich zu den Funktionen zum Setzen und Lesen von Datum und Uhrzeit eine weitere BIOS-Funktion. Sie dient zum Setzen des BIOS-Zeitzählers. DOS ruft diese Funktion auf, um bei einer Änderung der Uhrzeit den BIOS-Zeitzähler an die geänderten Verhältnisse anzupassen.

Einige BIOS-Versionen setzen ihren aktiven Korrekturcode genau hier an: Läuft der BIOS-Tageszähler über, prüfen Sie. ob eventuell das Jahr 2000 angebrochen ist und aktualisieren das Jahrundertbyte im CMOS-RAM. Andere BIOS-Varianten überwachen diese Änderungen permanent und sind nicht auf den BIOS-Zähler angewiesen. Um den aktiven Korrekturcode in jedem Fall zu erkennen, setzt cty2ktst den BIOS-Zähler geeignet.

Der aktive Korrekturcode ist nicht gerade eine Errungenschaft: Er funktioniert nur, solange ein Betriebssytem den Prozessor im Real Modus oder im virtuellen 8086-Modus betreibt. Das heißt, nur DOS, Windows 3.1 und 9x profitieren davon (die Windows Zeitrechnung hängt von DOS ab). Andere Betriebssysteme haben von einer solchen Lösung nichts.

Zudem ist diese Art der Jahr-2000-Korrektur nicht ganz ungefährlich: Wird ein PC etwa für Steuerungsaufgaben eingesetzt, kann es passieren, daß er durch direktes Auslesen der RTC Informationen erhält, die veraltet sind (während der Umstellung ins Jahr 2000). Nämlich dann, wenn die RTC schon auf 1.1.00 steht, das Jahrhundertbyte im CMOS-RAM vom aktiven Korrekturcode noch nicht umgestellt wurde (das ist bei gesperrten Interrrupts etwa nicht auszuschließen).

cty2ktst nennt Systeme mit aktivem Korrekturcode deshalb nur "bedingt Jahr-2000-fest". Je nach Ausfertigung der Korrektur ist nicht in jedem Fall sichergestellt, daß das Jahrhundertbyte angepaßt wird. Andere Korrekturmechanismen (etwa über den Selbsttest oder die BIOS-Funktionen zum Auslesen des Datums) greifen zu einem definierten Zeitpunkt garantiert. Für den Großteil der Anwendungsfälle genügt das.

Das BIOS respektive die Betriebssystemfunktionen sind der bequeme Weg, den nicht nur die (Anwendungs-)Programmierer bei Microsoft, sondern auch der (vernünftige) Rest der Welt für den Zugriff auf Zeit- und Datumsinformationen wählt. Ein direkter Zugriff auf die RTC ist zwar möglich, aber umständlich, da für eine zuverlässige Funktion dabei die Update-Zyklen der Uhr beachtet werden müssen.

Im Gegensatz zu Anwendungen und oben genannten Systemen greift manches Betriebssystem direkt auf die RTC zu. Während sich das bei den freien Betriebssystemen durch einen Blick in die Quelltexte feststellen läßt, ist das bei kommerziellen Systemen nicht ganz so einfach. Microsoft hat das von NT benutze Verfahren inzwischen immerhin offengelegt, nachdem ein entsprechendes White Paper für mehrere Monate vom Web-Server verschwunden war.

DOS
benutzt die BIOS-Funktionen zum Lesen und Setzen des Datums. MS-DOS 7.0 aus Windows 98 enthält Korrektur-Code, der, wenn das BIOS das Jahr 1900 liefert, eine Korrektur auf 2000 vornimmt; ebenso verfahren das aktuelle PC-DOS und Calderas OpenDOS.
FreeBSD
greift unter Umständen auf das Jahrundertbyte im CMOS zurück. Ob es das tut, hängt von den Kompilationsoptionen des Kernels ab.
Linux
verschafft sich das Datum direkt aus der RTC. Allerdings beschreibt das Utility "hwclock" das Jahrhundertbyte im CMOS (0x32)
OS/2 ab 2.x
schafft selbst auf Systemen, die keine Jahr-2000-Korrektur im BIOS aufweisen, das Daumt richtig einzustellen. Mit welchem Verfahren es das sicherstellt, ist uns leider nicht bekannt.
Windows 3.1x, 95 und 98
besorgen sich das Datum beim darunterliegenden DOS; es gelten also die dort gemachten Hinweise.
Windows NT
bedient sich laut Microsoft direkt bei der RTC und bewertet das Jahrzehnt. Alle Daten kleiner 20 schlägt es den Jahren 2000**ff zu.

cty2kfix

Der Aufruf von cty2kfix gehört in die DOS-autoexec.bat-Datei. Beim Start liest es das aktuelle Datum via BIOS-Funktion aus. Stößt es dabei auf eine Jahresangabe kleiner als 1980 (nicht von sich aus Jahr-2000-fähiges BIOS), dann korrigiert es das Jahr auf 20xx. Wie man sich mit cty2ktst vorher versichern kann, hat sich damit die Jahr-2000-Problematik für den PC selbst erledigt. Der Fix funktioniert selbst dann, wenn man den PC erst 2002 das erste Mal wieder einschaltet. cty2kfix sollte als eines der ersten Programme in der autoexec.bat geladen werden.

Darüber hinaus erlaubt es cty2kfix, die Systemuhr (RTC) asynchron zur tatsächlichen Zeit zu betreiben. Das ist für PCs interessant, die vom Award-Bug betroffen sind: Bei Ihnen arbeitet die Uhr nur im Zeitraum von 1994/6 bis 1999 korrekt. Nach einer Korrektur auf 2000 meldet der PC beim nächsten Einschalten 2094/6. Der Haken: Man muß das Datum (etwa im BIOS-Setup) einmal auf 1996 stellen. Fürderhin liefert cty2kfix als TSR-Programm an der BIOS-Schnittstelle die Jahre 2000 bis 2002.

cty2kfix korrigiert als TSR-Programm die DOS-Zeit. Windows 3.1, 95 und 98 übernehmen diese Zeit, und selbst die Funktion zum Ändern des Datums funktionieren mit cty2kfix zwischen BIOS und DOS als Zeitvermittler (in den dann verschobenen Grenzen von 2000 bis 2002 inklusive). Der Versatz, mit dem die Systemuhr läuft, beträgt genau vier Jahre, um mit den gängigen Schaltjahresregeln in Einklang zu bleiben.

Im Jahr 1999 installiert macht sich cty2kfix beim DOS-Start nur mit einer Meldung bemerkbar:

  cty2kfix 1.00, (C) c't/ps
  Programm korrigiert gaengige PC-BIOS-Fehler im Jahr 2000
  Noch nichts zu tun (1999)

Steht das Datum auf 1996 bis 1998, schaltet sich cty2kfix als TSR-Programm zwischen die BIOS-Datums-Funktionen:

  cty2kfix 1.00, (C) c't/ps
  Programm korrigiert gaengige PC-BIOS-Fehler im Jahr 2000
  Residenter Teil zur Datumskorrektur installiert.
  RTC laeuft um vier Jahre versetzt (2000=1996 ff)

Der Aufruf der DOS-Datumsfunktionen liefert nach der Installation dann statt des im BIOS-Setup eingetragenen Datums 1.1.1996 folgende Angabe:

  Aktuelles Datum: Sa, 01.01.2000
  Neues Datum (TT.MM.JJ): 

Die zweite cty2kfix-Funktion liegt darin, Systemen auf die Sprünge zu helfen, deren BIOS keinen Korrektur-Code fürs Jahr 2000 enthält. Bemerkt es, daß das BIOS das Jahr 1900 liefert, korrgiiert es das und setzt bei der Gelegenheit auch die DOS-Zeit neu, die zu diesem Zeitpunkt dann schon auf den 4.1.1980 zurückgefallen ist. cty2kfix erledigt also die auf alten Systemen nötige manuelle Korrektur automatisch. Zur Sicherheit fordert es auf, beim nächsten Systemstart das Datum zu überprüfen (Award-Bug); hat cty2ktst dem PC eine funktionierende manuelle Korrektur attestiert, ist dieser Schritt nicht nötig.

  cty2kfix 1.00, (C) c't/ps
  Programm korrigiert gaengige PC-BIOS-Fehler im Jahr 2000
  Einmalige Korrektur des Jahrhunderts via BIOS
  Verifzieren Sie beim naechsten Systemstart das Datum

Lizenz


(C) Copyright c't
Verlag Heinz Heise
Autor: Peter Siering
Helstorfer Str. 7
30625 Hannover
Germany
Fon +49 511 53 52 - 3 00
Fax +49 511 52 52 - 4 17

Ohne jedwede Funktionsgarantie zu geben, sind diese Werkzeuge frei. Das heißt, sie dürfen frei weitergegeben werden, solange die Copyright-Vermerke und der Originallieferumfang beibehalten werden. Eine kommerzielle Nutzung im Sinne des Verkaufs selbst in Teilen ist ausdrücklich untersagt. Das Aufbringen auf CD-ROM und andere Medien, sofern keine Arbeitskopie, selbst zur kostenlosen Verteilung bedarf des schriftlichen Einverständnisses des Urhebers/Autors. Einer Weitergabe in elektronischen Medien (Internet oder Mailboxen) wird explizit zugestimmt. Zurückentwickeln (Reverse engineering), Dekompilieren sowie Entassemblieren der Software sind nicht nötig; die Quelltexte sind unter der Heimat-URL (siehe oben) zu bekommen ;-)


Peter Siering Version 1.3, Last modified: Tue Aug 10 18:31:41 CEST 1999