Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
[C++] CmosTime != DOSTime 04.10.02 00:13 Число просмотров: 1140
Автор: :-) <:-)> Статус: Elderman
|
> Доброго времени суток! > Заметил я такую интересную вещь за компьютерами, > работающими под PC DOS 7 > Часики сильно отстают на станциях, где работает софт, > использующий активно функцию времени(даты). Я наблюдал как > за трое суток часы просто отставали на пять минут...а то > и на 7 минут. Но стоит станцию перегрузить, как время более > или мене корректировалось. Создалось впечатление , что PC > DOS поддерживает свои внутренние часы, которые > синхронизируются с часами из CMOS только во время загрузки > операционки...
Наверное так оно и есть (когда грузишься без config.sys & autoexec.bat ДОС говорит Enter new time - видимо тогда и происходит синхронизация)
> Меня интересует - есть ли в этой PC DOS7 (или вообще в > ОС)"вызовы" "функции" позволяющие синхронизировать эти > часики? > (синхронизировать в своём коде через чтение самой смоз > просьба не предлагать - уже есть)
Можно написать TSR и повесить свой обработчик на функцию работы со временем (21 прерывание), чтобы возвращать правильное время, прочитанное через INT 1Ah/ah=2.
INT 1Ah - System Timer and Clock Services
ah=2 Read Real-Time Clock Time
Это ф-я BIOS, она дожна работать с CMOS напрямую.
|
<programming>
|
[C++] CmosTime != DOSTime 03.10.02 15:14
Автор: AlexKara Статус: Незарегистрированный пользователь
|
Доброго времени суток!
Заметил я такую интересную вещь за компьютерами, работающими под PC DOS 7
Часики сильно отстают на станциях, где работает софт, использующий активно функцию времени(даты). Я наблюдал как за трое суток часы просто отставали на пять минут...а то и на 7 минут. Но стоит станцию перегрузить, как время более или мене корректировалось. Создалось впечатление , что PC DOS поддерживает свои внутренние часы, которые синхронизируются с часами из CMOS только во время загрузки операционки...а далее по ходу работы системы из-за каких-то пропусков-запретов прерываний эти часы отстают довольно внушительно.
...После недолгих экспериментов действительно обнаружилось, что функции работы со временем (21 прерывание) возращают своё время, отличное от времени, хранящемся в энергонезависимой памяти внутренних часов.
...Время в операционной системе вроде WIN9x так же отстаёт от времени в CMOS...с единствнной разницей, что винда по ходу время от времени свои часы синхронизирует с часами из энергонезависимой памяти (в последнем не уверен - требуется експеримент).
Меня интересует - есть ли в этой PC DOS7 (или вообще в ОС)"вызовы" "функции" позволяющие синхронизировать эти часики?
(синхронизировать в своём коде через чтение самой смоз просьба не предлагать - уже есть)
--
WBR,
AlexKara
|
|
[C++] CmosTime != DOSTime 04.10.02 00:13
Автор: :-) <:-)> Статус: Elderman
|
> Доброго времени суток! > Заметил я такую интересную вещь за компьютерами, > работающими под PC DOS 7 > Часики сильно отстают на станциях, где работает софт, > использующий активно функцию времени(даты). Я наблюдал как > за трое суток часы просто отставали на пять минут...а то > и на 7 минут. Но стоит станцию перегрузить, как время более > или мене корректировалось. Создалось впечатление , что PC > DOS поддерживает свои внутренние часы, которые > синхронизируются с часами из CMOS только во время загрузки > операционки...
Наверное так оно и есть (когда грузишься без config.sys & autoexec.bat ДОС говорит Enter new time - видимо тогда и происходит синхронизация)
> Меня интересует - есть ли в этой PC DOS7 (или вообще в > ОС)"вызовы" "функции" позволяющие синхронизировать эти > часики? > (синхронизировать в своём коде через чтение самой смоз > просьба не предлагать - уже есть)
Можно написать TSR и повесить свой обработчик на функцию работы со временем (21 прерывание), чтобы возвращать правильное время, прочитанное через INT 1Ah/ah=2.
INT 1Ah - System Timer and Clock Services
ah=2 Read Real-Time Clock Time
Это ф-я BIOS, она дожна работать с CMOS напрямую.
|
|
[C++] CmosTime != DOSTime 03.10.02 21:05
Автор: Chingachguk <Chingachguk> Статус: Member
|
> Доброго времени суток!
Хи !
> Заметил я такую интересную вещь за компьютерами, > работающими под PC DOS 7 > ...
Ну, проверить, обращается ли win (у меня любимая 98) к портам cmos легко: заглянул я в SoftIce, написал:
bpio 70
bpio 71
Пошевелил мышой секунд 10 ... ничего. Дернул часы, тока я год решил установить другой (OK не давил !) - сразу бряк !
Вот так.
А делается (и в сайсе) это через аппартные регистры отладки DRx. Сам не пробовал, но вроде это можно и в чистом досе сделать. Т.е. ставишь в резиденте (ну или просто в проге) такой бряк на cmos и ждешь...
z0 тут как-то пример приводил: он ставил такой бряк прямо из mbr, только на порты винта...
|
|
[C++] CmosTime != DOSTime 03.10.02 18:15
Автор: DPP <Dmitry P. Pimenov> Статус: The Elderman
|
Можно самому написать программу синхронизации любого времени по любому и поставить ее запуск в таблицу запуска по расписанию (резидент доя доса).
Может помоч обновление прошивки биоса.
ЦМОС часы ходят сами по себе. Биосовские часы считают прерывания от таймера. ОС может пользоваться биосовскими часами, а может и сама прерывания считать. Может биос в таймер пишет не 65536 а 65535, вот и расхождение можно получить. Это маловероятно, поскольку биосы достаточно отлажены, чтобы в них не было ошибок.
Скорее всего у Вас на основной плате бракованый кварц впаян, не основной (чуть более 14 мегагерц), а часовой (чуть более мегагерца он должен быть). Тут уж прошивки и операционки не помогут - только программа синхронизации.
Хотя есть еще выход - в нулевой канал таймера другое число загнать - меньшее, поскольку часы у Вас отстают. Число подобрать надо будет.
В крайнем случае перепаять кварц или поменять плату.
> Доброго времени суток! > Заметил я такую интересную вещь за компьютерами, > работающими под PC DOS 7 > Часики сильно отстают на станциях, где работает софт, > использующий активно функцию времени(даты). Я наблюдал как > за трое суток часы просто отставали на пять минут...а то > и на 7 минут. Но стоит станцию перегрузить, как время более > или мене корректировалось. Создалось впечатление , что PC > DOS поддерживает свои внутренние часы, которые > синхронизируются с часами из CMOS только во время загрузки > операционки...а далее по ходу работы системы из-за > каких-то пропусков-запретов прерываний эти часы отстают > довольно внушительно. > ...После недолгих экспериментов действительно обнаружилось, > что функции работы со временем (21 прерывание) возращают > своё время, отличное от времени, хранящемся в > энергонезависимой памяти внутренних часов. > ...Время в операционной системе вроде WIN9x так же > отстаёт от времени в CMOS...с единствнной разницей, что > винда по ходу время от времени свои часы синхронизирует > с часами из энергонезависимой памяти (в последнем не > уверен - требуется експеримент). > > Меня интересует - есть ли в этой PC DOS7 (или вообще в > ОС)"вызовы" "функции" позволяющие синхронизировать эти > часики? > (синхронизировать в своём коде через чтение самой смоз > просьба не предлагать - уже есть) > -- > WBR, > AlexKara
|
| |
CmosTime != DOSTime 03.10.02 21:17
Автор: AlexKara Статус: Незарегистрированный пользователь
|
> Можно самому написать программу синхронизации любого > времени по любому и поставить ее запуск в таблицу запуска Уже есть.. и по ходу это единственный разумный путь
> Может помоч обновление прошивки биоса. Не поможет.. это особенность ПС дос - такая же вещь наблюдается на новых материнках, просто при попытке получить значение - ОС даже не додумывается залесть и прочитать это значение из смоса..а берёт эго из каких-то внутренних переменных,которые "идут" по прерыванию от таймера...предварительно проинициализированные при загрузки ОС.
и кварц тут не причём часы в смос идут корректно и сбиваются немного в сторону опаздания после перезагрузки сбивание не происходит если время самой ОС перед перезагрузкой выставить в ровень с часами cmos
|
|
|