Y2KURE - Автоматическая Y2K-коррекция CMOS RTC (часов реального времени) и BIOS
  • Описание Y2Kure.
  • Введение.
  • Проблема #1 - Переход столетия при выключенном питании.
  • Проблема #2 - Переход столетия во время работы.
  • Проблема #3 - Проблема AWARD BIOS v4.50.
  • Как использовать Y2Kure.
  • Специальные особенности Y2Kure.
  • Пользовательские или Множественные установки.
  • Миф о проблеме високосного года.
  • Эффект "time dilation" Crouch-Echlin'a.
  • Старые версии DOS.
  • ОПИСАНИЕ Y2KURE:

    Y2Kure - драйвер устройства, который загружается через ваш CONFIG.SYS для исправления проблемы, связанной с работой CMOS-часов реального времени (RTC) и BIOS. Он будет работать над любой DOS-системе, включая Windows 3.x и 95/98, даже с "неизлечимым" BIOS серии Award v4.50. Он занимает от 128 до 256 байт оперативной памяти при запуске, и не затрагивает обычный системный таймер и не замедляет работу никаким образом. Параметры драйвера позволяют настраивать его по желанию.

    Y2Kure доступен бесплатно, как публичное обслуживание Interstellar Research. Вы можете свободно распространять файл Y2KURE.ZIP, не изменяя его и не взимая никакой оплаты.

    В отличие от других Y2K-"исправлялок", Y2Kure не требует, чтобы Вы запускали какую-либо специальную тестовую программу сначала... Вы можете просто "установить и забыть", а Y2Kure будет делать все остальное. Первый раз, когда Вы загружаетесь, он исполнит быструю перезагрузку, чтобы проверить и определить надлежащий режим драйвера для вашей системы. После этого ваша система будет поддерживать правильную дату до 2099. Если Y2Kure обнаружит, что в драйвере нет необходимости, он не будет загружаться в память, если не указан параметр /I - принудительная загрузка.

    Если Вы ответствены за множественные компьютеры, которые не могут весь полагаться на обновить(модифицировать) их системные часы сетевым началом обслуживания абонента, Вы найдете, что Y2Kure будет быстрыми, уверенное, и безопасное решение.

    Обратите внимание, что Y2Kure решает только проблемы RTC и BIOS, делая так, чтобы ваша система всегда знала правильную дату. Y2Kure не пытается иметь дело с датами, сохраненными как данные в различных приложениях, или с отображением дат создания файлов в распечатках каталогов.

    ВВЕДЕНИЕ:

    Имеются две различных системы хронометрирования в современных персональных компьютерах: таймер основной системы и CMOS-часы реального времени (RTC).

    Первоначальный IBM PC и XT имели только системный таймер, который был получен из довольно точного кварцевого генератора, работающего с частотой 14.31818 МГц. Это значение делится на 3, чтобы получить часы 4.77 МГц для процессора 8088, в то время как в дальнейшем оно делится на 4 для получения частоты 1.19318 МГц для кристаллов 8253 или 8254 системного таймера.

    Для совместимости, частота таймера системы 1.19318 МГц поддерживается во всех последующих моделях PC и его клонах. Кристалл таймера генерирует прерывание после подсчета каждых 65536 импульсов, что вызывает примерно 18.2 прерываний или "тиков" в секунду.

    Прерывание позволяет DOS считать эти тики, и использовать значение счетчика, чтобы поддерживать текущее время и дату... предполагая, что время и дата были установлены правильно при начальной загрузке. PC и XT требовали, чтобы это делалось вручную, так как при выключении питания не было способа следить за временем и датой.

    Начиная с 80286-модели, IBM добавил работающие от батареи CMOS-часы реального времени (CMOS RTC) и чип памяти. По смыслу это подобно электронным наручным часам с функцией даты, плюс маленькое количество универсальной памяти на том же самом кристалле. Память CMOS содержит критичную настроечную информацию, в которой нуждается PC при загрузке, до того как он сможет обратиться к жесткому диску.

    При запуске система считывает значения из часов реального времени и использует их для установки начальных времени и даты в DOS. Это выполняется BIOS (базовой системой ввода-вывода), которая является совокупностью "фирменных" резидентных подпрограмм в ROM (ПЗУ). BIOS обычно является перманентной частью системы, хотя более новые системы позволяют модернизировать BIOS с помощью специальных программ.

    Раздел даты кристалла часов реального времени обновляет только 2 последние цифры года, которые прокручиваются с 99 на 00 в конце столетия. Информация о столетии не является частью часов реального времени, для нее просто отведена отдельная ячейка памяти на кристалле, значение которой обычно устанавливается в 19, и должно будет установиться в 20. Часы реального времени (RTC) не обновляют это значение на существующих системах, хотя эта особенность может стать доступной в ближайшем будущем.

    На большинстве BIOS, более старших, чем год или два, часы реального времени (RTC) год и столетие читают и передают в DOS как есть, то есть когда год прокручивается с 99 на 00, в DOS передается дата 1900. Более новые BIOS читают 2 цифры года, и если эти цифры - от 00 до 79, то BIOS устанавливает цифры столетия в 20; если же значение года - от 80 до 99, BIOS оставляет цифры столетия неизмененными. Правильная дата, таким образом, передается в DOS, а BIOS может также обновить значение века в памяти так, чтобы будущие значения имели правильное столетие без корректировки столетия по двум цифрам года.

    ПРОБЛЕМА #1 - ПЕРЕХОД СТОЛЕТИЯ ПРИ ВЫКЛЮЧЕННОМ ПИТАНИИ:

    DOS может отслеживать даты только с 1980 до 2099, поэтому если BIOS передает ДОСу более раннюю дату, то DOS устанавливает значение по умолчанию: 1-4-1980. Этот случай произойдет у большинства пользователей, если в их компьютерах старый BIOS, и они выключили компьютер в 1999 году, а включили в 2000 году. DOS получает дату и время один раз, при начальной загрузке, так что, если никаких дополнительных мер не будет принято, все файлы, созданные в течение сеанса, будут иметь неправильную дату. Новые файлы, созданные в 2000 году, будут казаться более старыми, чем те, которые были созданы в 1999 году, так что системы резервного сохранения могут запутаться.

    Если вы не сделаете ничего перед следующим сеансом, BIOS снова сообщит о дате в начале 1900-ых, и DOS снова установит ту же самую заданную по умолчанию дату 1-4-1980 при загрузке. И тогда будет невозможно отличить более старые файлы от более новых, кроме как вручную с помощью просмотра, так как они все будут иметь одну и ту же дату создания. Это может вызвать, например, потерю новых данных при попытке резервного сохранения.

    ПРОСТОЕ РЕШЕНИЕ:

    решение чрезвычайно просто: все, что вы должны сделать, это установить дату вручную при первом запуске в новом столетии. Хотя DOS читает дату часов реального времени один раз (при загрузке), она должным образом устанавливает дату часов реального времени, включая столетие, всякий раз, когда вы устанавливаете дату DOS (командой DATE). (Если ваша система связана с сетью, это может быть сделано автоматически сервером при подключении к нему). После этого в RTC сохранится правильное столетие, и BIOS будет передавать правильную дату в DOS во время всех будущих загрузок.

    Y2KURE РЕШЕНИЕ:

    Все это может быть сделано автоматически программным обеспечением: драйвер Y2KURE.SYS проверяет дату при начальной загрузке, считая 1980 за центр. Если BIOS сообщает дату между 1900 и 1979, драйвер предполагает, что имеется ввиду дата от 2000 до 2079. В этом случае драйвер устанавливает правильное время в DOS и в RTC, так что будущие запуски будут правильны, даже если Y2Kure позже будет удален.

    ПРОБЛЕМА #2 - ПЕРЕХОД СТОЛЕТИЯ ВО ВРЕМЯ РАБОТЫ:

    Что случится, если система будет работать в полночь, когда меняется столетие? Это просто отодвинет необходимую установку RTC. Во время работы проблем, как правило, не возникает: если в DOS была установлена правильная дата при загрузке в 1999 году, то она должным образом перейдет на 2000 год и таким образом будет иметь правильную дату для файлов и программ. Однако, DOS автоматически не обновляет RTC, поэтому при следующей загрузке BIOS будет выдавать "1900", и вы должны будете вручную установить дату, как описано выше, если Y2Kure не установлен и не сделает поэтому это автоматически.

    Но некоторые DOS-программы подобно Daqarta отключают прерывания системного таймера на длительные периоды, предохраняя их от сталкивающихся критических задач подобно сбору данных, поступающих в реальном масштабе времени. Старые игры DOS могут также отключать таймер по причинам эффективности. Это заставляет часы DOS останавливаться, и если позже прерывания таймера разрешаются после завершения критической задачи, программа должна считать правильные время и дату с RTC через BIOS и использовать их, чтобы сбросить часы DOS. Если во время отключенных прерываний таймера произошел переход столетия, BIOS выдаст год 1900, и DOS сбросит дату на 1980 год.

    Обратите внимание, что эта проблема возможна только с теми программами DOS (включая игры), которые работают в "реальном режиме". Приложения Windows всегда работают в "защищенном режиме", который не дает им отключать прерываний таймера. Конечно, у подавляющего большинства приложений нет причин отключать прерывания таймера.

    Те программы DOS, которые запускаются из "Приглашения MS DOS" (MS-DOS Prompt), работают в защищенном режиме. Существуют три основных пути для запуска программ в реальном режиме:

    * Загрузить непосредственно DOS, вместо Windows.
    * Использовать опцию "Перезагрузить компьютер в режиме эмуляции MS-DOS" (Restart in MS-DOS Mode) в Windows 9x, или закончить сеанс работы Windows 3.x.
    * Использовать ярлык Windows 9x или запускатель, которые запускали бы приложение в реальном режиме DOS.

    Y2KURE РЕШЕНИЕ:

    Драйвер Y2KURE.SYS перехватывает обращения к функции получения даты BIOS. Когда приложение запрашивает дату, драйвер берет дату из BIOS как обычно, затем проверяет ее, и если год находится в диапазоне с 1900 по 1979, драйвер возвращает дату от 2000 до 2079 года соответственно.

    По сути, Y2Kure дает старым BIOS те же самые функции, которые уже присутствуют в современных BIOS.

    ПРОБЛЕМА #3 - ПРОБЛЕМА AWARD BIOS v4.50:

    Некоторые версии BIOS (особенно Award v4.50, сделанный между 26 апреля 1994 года и 31 мая 1995 года) имеют намного более серьезную проблему: они не позволяют устанавливать любые даты больше 1999 или меньше 1994. Что делает это столь серьезным - то, что, если при загрузке BIOS получает год вне этого диапазона из часов реального времени, то она сбрасывает дату в часах реального времени в в значение 1994.

    Так как истинная дата нарушается до загрузки DOS, то любой корректирующий драйвер (через CONFIG.SYS) прочитает дату из RTC неправильно, поэтому широко распространено мнение, что эту проблему невозможно решить с помощью программного обеспечениея. Пользователям обычно советуют купить специальные модули модификации BIOS, или даже заменять целиком компьютер.

    Y2KURE РЕШЕНИЕ:

    Драйвер Y2KURE.SYS проверяет систему на эту проблему при первой загрузке. Он сохраняет текущую дату, затем пробует устанавливать в BIOS дату 2-2-2002. После этого он перезагружает систему и читает дату. Если год - не 2002, Y2Kure расценивает BIOS как "проваливший" это испытание по сохранению даты.

    Если BIOS не будет позволять часам реального времени сохранять правильную дату, то Y2Kure будет работать в специальном режиме "Failed BIOS", в котором используются только допустимые даты. Для таких систем Y2Kure устанавливает дату BIOS/RTC в диапазоне от 1995 до 1998, и сохраняет количество "смещения", которое должно быть добавлено, чтобы получить истинный год. Вот некоторые примеры:

    Истинный Год = Год RTC + Смещение

      1999 1995 4
      2000 1996 4
      2001 1997 4
      2002 1998 4
      2003 1995 8
      2004 1996 8
      2005 1997 8
      2006 1998 8
      2007 1995 12
      .... .. ...
      2099 1995 104
    

    Используя 4-летние шаги, нормальный механизм високосного года продолжит надежно функционировать. Раздел дня недели в RTC будет неправилен, но это никогда не используется так или иначе: DOS получает только необработанную дату и делает свое собственное вычисление дня недели, поскольку это всегда делается так, начиная с оригинального PC/XT.

    Каждый раз драйвер Y2KURE.SYS, запускаясь при загрузке, вычисляет истинную дату, беря значение из RTC и прибавляя смещение. Он сохраняет истинную дату начальной загрузки как дату файла Y2KURE.DAT, специального 0-байтового файла в вашем корневом каталоге. От этой даты он может определять правильное смещение года при следующей загрузке.

    Обратите внимание, что эта схема работает, только если система включается по крайней мере один раз в каждый год или около этого. В самом плохом случае, если система выключена в 2002 (например), RTC сохраняет год 1998. При наступлении 2003 года RTC перейдет на 1999 год. Это не проблема, так как драйвер Y2Kure может иметь дело с этим. Он просто сбрасывает год в RTC год на 1995 и меняет смещение с 4 до 8. 1995 + 8 = 2003.

    Но если система будет отключена до 2004 года, то RTC перейдут на 1900 год и дефектный BIOS сбросит RTC (обычно на 1994) при начальной загрузке. Драйвер Y2Kure обнаружит, что дата находится не в надлежащем диапазоне (1995-1998), который он ожидает, и предупредит вас о необходимости ручной установки даты. В данном случае автокоррекция невозможна, так как год в RTC уничтожен дефектным BIOS. Истинный год мог бы быть 2004, или любой другой, но BIOS всегда сбрасывает его на 1994.

    Это - самый плохой случай, который может случиться в конце каждого 4-летнего окна. Однако, если вы отключаете систему в 1999 (когда RTC содержит значение 1995), вы можете оставить ее выключенной до любой даты в 2003 без проблем.

    Обратите внимание, что в случае "Failed BIOS" драйвер остается резидентным во время работы, по причинам, описанным подробно в Проблеме #2 (см.выше): если приложение запрашивает дату через BIOS/RTC, драйвер вмешивается и сообщает правильную дату, прибавляя величину коррекции к году RTC.

    Есть только одна небольшая плата в обмен на ненужность покупать замену BIOS или целую новую систему: если вы хотите вручную изменить год, типа ввести в заблуждение некоторые чувствительные к дате приложения, нормальные функции даты DOS или Windows не будут работать, если изменение пересекает 4-летнюю границу смещения (типа от 2002 до 2003, или от 2006 до 2007). Для изменения даты в данном случае вы можете воспользоваться в предоставляемой утилите DATE-Y2K.

    Дело в том, что новая дата должна быть сохранена в Y2KURE.DAT так, чтобы надлежащее смещение могло быть загружено драйвером при следующей загрузке. Но так как DOS не реентерабелен (re-entrant), драйвер Y2Kure не может получить доступ к файлу DOS во время работы функций даты DOS. Это технически возможно окольными путями, но это может поставить под угрозу существующую очень солидную стабильность Y2Kure.

    Вы не нуждаетесь в DATE-Y2K для каждого физического изменения даты. Эта утилита нужна только для тех случаев, в которых затрагивается величина коррекции. Если вы будете использовать обычные функции даты DOS или Windows для больших изменений даты, дата DOS изменится только для текущего сеанса. Вы будете слышать гудок, предупреждающий, что дата BIOS/RTC не была изменена, и ваши изменения не будут затрагивать следующий сеанс загрузки.

    Если вы слышите гудок, вы можете использовать DATE-Y2K, чтобы установить желательную дату в BIOS/RTC. DATE-Y2K покажет вам, если найдет любые различия между датами BIOS и DOS.

    Или вы можете всегда использовать DATE-Y2K вместо функции DOS DATE, и никогда не задумываться об этой проблеме. Данный способ имеет дополнительное преимущество - при нем сохраняется модифицированный Y2KURE.DAT, так что при следующей начальной загрузке Y2Kure сможет предупредить вас, если текущая дата окажется более ранней, чем предшествующая дата Y2KURE.DAT.

    Однако, для подавляющего большинства пользователей, которые не собираются обезъянничать с системной датой, единственный необходимый случай для использования DATE-Y2K - после замены батареи CMOS.

    КАК ИСПОЛЬЗОВАТЬ Y2KURE:

    Просто добавьте строку в ваш CONFIG.SYS файл, чтобы загрузить Y2KURE.SYS. Например, если файл Y2KURE.SYS постоянно находится в C:\UTIL каталоге, то используйте:

       DEVICE=C:\UTIL\Y2KURE.SYS

    При следующей загрузке вашей системы Y2Kure проведет тест сохранения даты 2000+ через быструю перезагрузку и установит соответствующую функцию драйвера. Для систем, прошедших испытание сохранения и нуждающихся только в решении проблемы сброса года на 1980, загружаемый код будет занимать всего 128 байт памяти. Для систем с "кривым" BIOS, которые нуждаются в режиме "прибавления смещения в 4 года", загружаемый код - 256 байтов.

    Если Вы хотите сохранить даже это минимальное количество низкой памяти DOS, можно установить Y2KURE.SYS в область верхней памяти, используя нормальную команду DEVICEHIGH, доступную в DOS 5.0 и позже. Заметьте, что DEVICEHIGH требует не только HIMEM.SYS, но и EMM386.EXE и DOS=UMB, как показано ниже:

       DEVICE=C:\WINDOWS\HIMEM.SYS
       DEVICE=C:\DOS\EMM386.EXE NOEMS
       DOS=HIGH, UMB
       DEVICEHIGH=C:\UTIL\Y2KURE.SYS
    

    Проблема может быть в том, что EMM386 работает в защищенном режиме, который не совместим с приложениями типа Daqarta, которые должны работать в реальном режиме. В других случаях все работает прекрасно.

    Если Вы хотите загрузиться с дискеты для испытательных целей, настройте соответственно CONFIG.SYS на дискете. Обратите внимание, однако, что файл Y2KURE.DAT будет создан в корневом каталоге загрузочной дискеты. Если система не поддерживает год 2000+, RTC установит дату в диапазоне 1995-1998. Если вы позже загрузитесь с жесткого диска без Y2KURE.SYS и Y2KURE.DAT для корректирови даты, вы будете должны установить дату вручную.

    СПЕЦИАЛЬНЫЕ ОСОБЕННОСТИ Y2KURE

    РЕЖИМ FORCE:

    более современная версия Award BIOS 4.51PG, как сообщают, при неопределенных обстоятельствах возвращает ошибочный год 2096, даже если тест на установку 2000+ года проходит удачно. Если вы хотите заставить Y2Kure обработать такую ошибку этого или любого другого BIOS, как будто он "кривой" (failed BIOS), и использовать схему 4-годичного смещения, то добавьте параметр /F:

       DEVICE=C:\UTIL\Y2KURE.SYS /F

    Обратите внимание, что не существует параметра, чтобы сделать обратное: если система не проходит испытание на установку даты 2000+, то невозможно сделать так, чтобы система работала должным образом без драйвера смещения.

    Однако, если система первоначально прошла тест успешно, вы можете переключаться между режимами так часто, как вы хотите, просто устанавливая или убирая параметр /F перед последующими загрузками. Драйвер Y2Kure хранит результаты первоначальных испытаний и тип предшествующего режима, так что он всегда знает, как загружаться правильно.

    ПРИНУДИТЕЛЬНАЯ ЗАГРУЗКА:

    Если вы устанавливаете Y2Kure после перехода столетия, и он обнаруживает год 2000+ в дате из RTC, то Y2Kure обычно сообщает, что нет необходимости и не устанавливает никакого драйвера. Тест на сохранение даты 2000+ не проводится, так как система очевидно его прошла бы.

    Вы можете заставить Y2Kure загружаться в режиме FORCE, чтобы установить драйвер, работающий по смещениям, как описано выше, используя /F параметр.

    Но если вы хотите заставить загружаться нормальный драйвер, используйте /I параметр:

       DEVICE=C:\UTIL\Y2KURE.SYS /I

    Почему это может пригодиться? Потому что Y2Kure создает файл Y2KURE.DAT и контролирует текущую дату при каждой загрузке. Если драйвер когда-либо обнаружит дату BIOS/RTC, которая является более ранней, чем предыдущая дата начальной загрузки (сохраненная в Y2KURE.DAT), он выдаст предупреждение вам, что имеется потенциальная проблема с RTC.

    СООБЩЕНИЯ ПРИ ЗАГРУЗКЕ:

    Y2Kure производит три различных типа сообщений, когда устанавливается во время загрузки:

    * Сообщение об ошибке, если RTC не работает, или появились ошибки обращения к файлу Y2KURE.DAT, или дата RTC более ранняя, чем дата, которая была во время предыдущей загрузки.

    * Сообщение о перезагрузке, уведомляющее, что Y2Kure собирается перезагрузить вашу систему для проведения теста на сохранение даты 2000+. Оно появляется только один раз при самом первом запуске драйвера Y2Kure в вашей системе.

    * Сообщение о состоянии, показывающее нормальное состояние Y2Kure, текущий режим (нормальный или со смещениями), и т.п.

    Время паузы после появления каждого из этих сообщений на экране, может быть установлено через соответствующие параметры:

    /En Ждать n секунд после сообщения об ошибке. (/E - значение по умолчанию.)

    /Rn Ждать n секунд перед тестовой перезагрузкой. (/R - значение по умолчанию.)

    /Sn Ждать n секунд после отчета о состоянии. (/S1 - значение по умолчанию.)

    'n' может быть от 0 до 9 секунд. Если параметр дается без значения 'n', то задержка неопределена, и вы увидите запрос о нажатии любой клавиши для продожения ""Press any key to continue..." и услышите звуковой сигнал, чтобы привлечь ваше внимание. (Сообщения об ошибках всегда имеют дополнительный сигнал.)

    Параметры по умолчанию показаны выше. Заметьте, что сообщение перед тестовой перезагрузкой по умолчанию ждет нажатия клавиши. Тестовая перезагрузка происходит только один раз при самом первом запуске драйвера Y2Kure в вашей системе, так что ожидание нажатия клавиши дает время, чтобы прочитать информацию об этом режиме, на всякий случай, если этот файл (README) не читался. (Общий отчет показывается при каждой загрузке.)

    Сообщение об ошибке также по умолчанию ждет нажатия клавиши, чтобы дать вам прочитать информацию об аварийной ситуации.

    ПОЛЬЗОВАТЕЛЬСКИЕ или МНОЖЕСТВЕННЫЕ УСТАНОВКИ:

    Администраторы могут использовать параметр /Rn вместо значения по умолчанию для указания времени паузы после сообщения о тестовой перезагрузке. Это позволяет необслуживаемой системе завершить первую начальную загрузку без физического вмешательства, если не будет рядом оператора, чтобы прочитать параметры или состояние. В дальнейшем при загрузке этот параметр игнорируется.

    Точно так же параметр /En пропустит ожидание нажатия клавиши при сообщении об ошибке. Это может быть желательно, если более важно, чтобы произошла начальная загрузка необслуживаемой системы, чем чтобы была некорректная дата. Если система выключится, например, из-за сбоя питания, то сообщение об ошибке появится снова после включения. Предупредительный сигнал будет подаваться вместе с сообщением об ошибке, но загрузка продолжится после паузы в 'n' секунд.

    МИФ О ПРОБЛЕМЕ ВИСОКОСНОГО ГОДА:

    Другие Y2K программы делают большие заявки относительно испытания различных состояний високосного года. Это - полный бред: RTC имеет совершенно хороший механизм високосного года, в котором никогда не было найдено дефектов. Так как RTC не следит за столетием, не существует никакой вероятности появления проблемы в 2000 году. Испытание обработки високосного года в новом столетии имеет не больше смысла, чем проверка перехода суток в полночь, или перехода времени между 2:25 и 2:46... Столетие не имеет никакого отношения к этому.

    Паникеры (и торговцы тестовыми программами) выдвинули идею, что есть отличие 2000 года от других високосных лет. Но что тут отличающегося? Этот год не отличается от любого другого обычного делящегося на 4 високосного года.

    Обычно каждый год, который делится на 4 - високосный год, КРОМЕ лет столетий (делящихся на 100)... Но считается високосным год, делящийся на 400, что и имеет место быть в случае с 2000 годом. Так что 2000 год - обычный високосный год.

    Причина для правила возвращения каждого 400-го года к високосному соответствует первоначальной причине появления високосных лет: компенсировать факт, что фактический астрономический год не точно равен 365 дням. Правило деления на 4, которое используют в старом Юлианском календаре (приписываемом Julius Caesar), полагает, что год равен 365.25 дням, и таким образом прибавляет один дополнительный день каждые 4 года. Но в действительности истинный год немного короче, ближе к 365.2422 дням. Так если использовать только правило деления на 4, то через каждые 400 лет календарная дата будет перед солнечным годом:

       (365.2500 - 365.2422) * 400 = 3.12 дней.

    Григорианский календарь (приписанный Римскому папе Gregory XIII), который мы используем сегодня, устраняет 3 високосных года из каждых 4 столетий, так что накопленная ошибка сокращена до 0.12 дня каждые 400 лет.

    Обратите внимание, что год 2100 не делится на 400, так что он не будет високосным. Это - первый год, который RTC не сможет автоматически правильно обработать. Так как дата файла DOS не может быть больше 2107, проблему "2100" не стоит учитывать... Даже если вы - очень оптимистичный хранитель компьютерного музея! :)

    ЭФФЕКТ "TIME DILATION" CROUCH-ECHLIN'a:

    Этот таинственный эффект впервые наблюдал историк Jace Crouch, а позднее подтвердил программист Mike Echlin. Они утверждают, что после 2000 года некоторые часы реального времени и/или BIOSы могут начать выдавать случайные даты во время начальной загрузки.

    Хотя этот "эффект" имеет некоторую славу в Internet, независимая проверка доказала иллюзорность этой ошибки, несмотря на исчерпывающие усилия Intel. Intel ни разу не смогла повторить это явление, даже на системе, которую предоставил Echlin, и на которой, по его словам, происходила ошибка. Однако, анализ Intel в результате испытаний раскрыл некоторые проблемы в тестовом коде Ечлина. Код должным образом не отключал системные прерывания в некоторых критических точках, что, возможно, и вызвало ошибочные результаты испытаний.

    Конечно, некоторые умники будут рады продать вам "решение" этой "проблемы", но, скорее всего, лучший способ предотвратить эффект "time dilation" Crouch-Echlin'a - выбросить тестовый код Ечлина!

    С другой стороны, если вы запускаете Y2Kure с /F параметром, RTC и BIOS никогда не будут обрабатывать никаких дат следующего столетия. Так что даже если окажется, что существует некоторая закономерность проявления эффекта Crouch-Echlin'a, вы будете автоматически защищены от него драйвером Y2Kure.

    СТАРЫЕ ВЕРСИИ DOS:

    Так как оригинальные IBM PC и XT не имели чипа часов реального времени (RTC), команда DATE в ранних версиях DOS изменяла только дату DOS без попытки обновления RTC. Особенность обновления RTC сначала появилась в DOS 3.3, и конечно же была оставлена во всех более поздних версиях.

    Если вы имеете систему класса АТ с DOS 3.2 или более старой, стандартный способ изменить дату и время в RTC - через утилиту CMOS Setup. Это может быть отдельная программа, или встроенная программа BIOS, которая вызывается при загрузке системно-специфической комбинацией клавиш. Мало того, что эти утилиты неуклюжи для использования, но они также заставляют вас перезагружать вашу систему после внесения изменений.

    Когда драйвер Y2Kure используется с одной из таких систем, он не устанавливает резидентный драйвер для перехвата запроса даты. Вместо этого он просто проверяет стандартным способом дату во время начальной загрузки. Исправленная дата передается в DOS и RTC.

    Обратите внимание, что драйвер не обеспечивает никакой защиты от программ, которые будут работать во время перехода столетий в полночь и будут отключать таймер DOS, а после восстанавливать, что обсуждено в Проблеме #2 выше. Когда год в RTC перейдет на 1900, такие программы прочтут это значение и попытаются установить ошибочную дату в DOS. Простое решение состоит в том, чтобы не запускать такие программы в полночь перехода столетий, или обновить версию DOS на более позднюю.

    Однако для удобства пользователей этих старых систем вместе с драйвером идет утилита DATE-Y2K, которая обновит RTC, когда вы установите с ее помощью дату. Вы больше не нуждаетесь в неудобной утилите CMOS Setup для этой цели, и никаких перезагрузок не нужно.

    В очень маловероятном случае, если вы работаете под DOS 2.x на системе класса АТ, вы должны заметить, что эти версии DOS имеют еще одну проблему: системная дата всегда устанавливается в 1-1-1980, и это делается после выполнения CONFIG.SYS. Таким образом, даже при том, что Y2kure должным образом обновит RTC и системную дату, системная дата будет впоследствии переустановлена в 1-1-1980. Чтобы дата устанавливалась правильно, поместите DATE-Y2K в ваш AUTOEXEC.BAT, не указывая даты для установки. DATE-Y2K определит версию DOS и автоматически обновит системную дату в соответствии с датой RTC, если это необходимо.

    Обратите внимание, что BIOS класса АТ обновит системное время с RTC автоматически, независимо от версии DOS.

    Версии DOS до 2.00 не поддерживали CONFIG.SYS, так что Y2Kure не будет работать с такими версиями DOS.