Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.24;
Скачать: CL | DM;

Вниз

Часы реального времени (RTC Alarm)   Найти похожие ветки 

 
shamanski ©   (2007-07-06 15:24) [0]

Помогите, пожалуйста, найти код для работы с часами реального времени CMOS. В частности, мне нужно использовать будильник, который включает компьютер в определенное время.
Вот, нашел исходник на сях, работающий с IRQ8, но в сях я не понимаю совсем:http://www.frolov-lib.ru/books/bsp/v33/ch4.htm


 
Jeer ©   (2007-07-06 15:29) [1]

asm-команда: rdtsc
api-обращение QueryPerfomanceCounter к таймеру высокого разрешения


> будильник, который включает компьютер в определенное время.

Покупаешь механический будильник со стрелками, навешиваешь контакты и на Power switch


 
Dib@zol ©   (2007-07-06 15:36) [2]


> Покупаешь механический будильник со стрелками, навешиваешь
> контакты и на Power switch


Кхм. ОМФГ. На хакер.ру некогда была статейка "проснись и пой компьютер мой!". Но тот код работает тока на Win9x :(


 
Инс ©   (2007-07-06 15:40) [3]

Думаю, даже если это возможно, то не из User Mode точно. Пишите драйвер.


 
SHAMANSKI ©   (2007-07-06 15:52) [4]

вот описание работы с нужным прерыванием на асме. Будет ли это работать под виндой, вставленное в код delphi?

Функции прерывания INT 1Ah
Для работы с часами реального времени вы можете обращаться непосредственно к перечисленным выше ячейкам памяти CMOS, используя порты 70h и 71h. Однако лучше всего воспользоваться функциями 2 - 7 прерывания INT 1Ah, описанными ниже.



Прочитать дату из часов реального времени
Регистры на входе:
AH = 04h

Регистры на выходе:
CH = столетие в BCD-формате;

CL = год в BCD-формате (например, CX=1997h означает 1997 год);

DH = месяц в BCD-формате;

DL = число в BCD-формате;

CF = CY = 1, если часы реального времени не установлены


Установить дату в часах реального времени
Регистры на входе:
AH = 05h

CH = столетие в BCD-формате;

CL = год в BCD-формате (например, CX=1997h означает 1997 год);

DH = месяц в BCD-формате;

DL = число в BCD-формате;

Регистры на выходе:
Регистры не используются


Установить будильник
Регистры на входе:
AH = 06h

CH = часы в BCD-формате;

CL = минуты в BCD-формате;

DH = секунды в BCD-формате

Регистры на выходе:
CF = CY = 1, если часы реального времени не установлены


 
Инс ©   (2007-07-06 15:59) [5]


> вот описание работы с нужным прерыванием на асме. Будет
> ли это работать под виндой, вставленное в код delphi?


Разумеется нет. То, что вы привели, справедливо для MS_DOS. Почитайте про 32-разрядные системы, про защищенный режим микропроцессора, про кольца защиты. Много нового узнаете.


 
SHAMANSKI ©   (2007-07-06 16:04) [6]


> Кхм. ОМФГ. На хакер.ру некогда была статейка "проснись и
> пой компьютер мой!". Но тот код работает тока на Win9x :
> (

интересная статейка, но там нужную инфу извлекают и пишут прямо в CMOS, что предполагает различия на разных материнках, а в коде, который я привел выше используют прерывание 1AH; по идее это должно запахать на всех матерях. Но поскольку я слабо шарю во всем этом, то хотелось бы найти готовый код.


 
SHAMANSKI ©   (2007-07-06 16:06) [7]

В общем, как я понял, в BIOS меня так просто не пустят. Извините за полное ламерство )))


 
Инс ©   (2007-07-06 16:06) [8]

Вы про эти штучки с прерываниями DOS и BIOS, прямым доступом к аппаратуре и прочими, на системах линейки NT забудьте.


 
SHAMANSKI ©   (2007-07-06 16:12) [9]

В таком случае, может существует готовый драйвер, работающий с нужным мне прерыванием?


 
Сергей М. ©   (2007-07-06 16:12) [10]


> в BIOS меня так просто не пустят


Да и при "так сложно" тебе там тоже нехрена делать.

Есть ОС, ее средствами и возможностями и пользуйся.


 
SHAMANSKI ©   (2007-07-06 16:15) [11]

Вот воспользоваться возможностями ОС было бы для меня просто идеально. Но сколько я ни копался в нете, про функцию, которая этим делом управляет, ничего не нашел


 
Сергей М. ©   (2007-07-06 16:17) [12]


> сколько я ни копался в нете


Покажи как "копался" ..


 
SHAMANSKI ©   (2007-07-06 16:21) [13]

вот такую вот штуку нашел:
int timer(char fn, SYSTIMER *tm)
{
 reg.h.ah = fn;

 switch (fn)
 {
   case RTC_SET_TIME:
   {
     reg.h.ch = tm->hour;
  reg.h.cl = tm->min;
  reg.h.dh = tm->sec;
  reg.h.dl = tm->daylight_savings;
     break;
   }

case RTC_SET_DATE:
{
     reg.x.cx = tm->year;
  reg.h.dh = tm->month;
  reg.h.dl = tm->day;
     break;
   }

case RTC_SET_ALARM:
{
     reg.h.ch = tm->hour;
  reg.h.cl = tm->min;
  reg.h.dh = tm->sec;
     break;
   }
 }

 int86(0x1a,&reg,&reg);

 if(reg.x.cflag == 1)
   return(-1);

 switch (fn)
 {
   case RTC_GET_TIME:
   {
     tm->hour = reg.h.ch;
  tm->min = reg.h.cl;
  tm->sec = reg.h.dh;
     break;
   }

case RTC_GET_DATE:
{
     tm->year = reg.x.cx;
  tm->month = reg.h.dh;
  tm->day = reg.h.dl;
     break;
   }
 }
 return 0;
}

Но будет ли она виндах работать?


 
Сергей М. ©   (2007-07-06 16:24) [14]

Не будет.


 
SHAMANSKI ©   (2007-07-06 16:43) [15]

Хорошо. Можно подойти к вопросу с другой стороны. У меня есть проограммка auto power-on, она запускает свой сервис (poweronservice). Я могу прикрутить этот сервис к своей программе. Но как проще узнать, какие этому сервису необходимо передавать сообщения и  с какими параметрами?


 
Сергей М. ©   (2007-07-06 16:47) [16]


> как проще узнать, какие этому сервису необходимо передавать
> сообщения и  с какими параметрами?


Это проще узнать при помощи дизассемблера и отладчика.


 
SHAMANSKI ©   (2007-07-06 16:49) [17]

А если пробовать перехватить сообщения, посылаемые той прогой сервису?
Такое можно организовать?


 
Сергей М. ©   (2007-07-06 16:52) [18]

Ну перехватил ты десяток байт с непонятным тебе содержимым - что дальше ?


 
SHAMANSKI ©   (2007-07-06 16:55) [19]

Плохи мои дела...
Видать из этого ничего не получится. Придется юзать wake-on-lan, с этим-то все понятно и исходников полно


 
Инс ©   (2007-07-07 12:20) [20]


> Придется юзать wake-on-lan, с этим-то все понятно и исходников
> полно


Только в БИОСе по умолчанию Wake-on-lan отключен.


 
REA   (2007-07-09 10:50) [21]

На Win98 работает через прерывание, под XP через драйвер. Видел хакерский трюк установки и запуска такого драйвера из программы с его удалением. Под Vista неизвестно через что...



Страницы: 1 вся ветка

Текущий архив: 2008.02.24;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
15-1200822319
Черный Шаман
2008-01-20 12:45
2008.02.24
И когда же этот CodeGear(ака Borland) сделают Delphi 64bit?


15-1200602588
фунтик
2008-01-17 23:43
2008.02.24
Пара задачек по информатике


2-1201684617
Washington
2008-01-30 12:16
2008.02.24
string <-> TColor


15-1200776972
Kostafey
2008-01-20 00:09
2008.02.24
С днем рождения ! 20 января


15-1201091326
Bober_crazy
2008-01-23 15:28
2008.02.24
Ошибка 530 Authentication failed, sorry