]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.bin/doscmd/timer.c
This commit was generated by cvs2svn to compensate for changes in r77298,
[FreeBSD/FreeBSD.git] / usr.bin / doscmd / timer.c
1 /*
2 ** No copyright?!
3 **
4 ** $FreeBSD$
5 */
6 #include "doscmd.h"
7
8 static void
9 int08(regcontext_t *REGS)
10 {
11     struct timeval tv;
12     time_t tv_sec;
13     struct timezone tz;
14     struct tm tm;
15
16     gettimeofday(&tv, &tz);
17     tv_sec = tv.tv_sec;
18     tm = *localtime(&tv_sec);
19     *(u_long *)&BIOSDATA[0x6c] =
20         (((tm.tm_hour * 60 + tm.tm_min) * 60) + tm.tm_sec) * 182 / 10;
21
22     softint(0x1c);
23 }
24
25 static void
26 int1c(regcontext_t *REGS)
27 {
28 }
29
30 unsigned char timer;
31
32 static u_char
33 inb_timer(int port)
34 {
35     return (--timer);
36 }
37
38 void
39 timer_init(void)
40 {
41     u_long              vec;
42     struct itimerval    itv;
43
44     vec = insert_hardint_trampoline();
45     ivec[0x08] = vec;
46     register_callback(vec, int08, "int 08");
47     
48     vec = insert_softint_trampoline();
49     ivec[0x1c] = vec;
50     register_callback(vec, int1c, "int 1c");
51
52     define_input_port_handler(0x42, inb_timer);
53     define_input_port_handler(0x40, inb_timer);
54     
55     itv.it_interval.tv_sec = 0;
56     itv.it_interval.tv_usec = 54925; /* 1193182/65536 times per second */
57     itv.it_value.tv_sec = 0;
58     itv.it_value.tv_usec = 54925;        /* 1193182/65536 times per second */
59     if (! timer_disable)
60         setitimer(ITIMER_REAL, &itv, 0);
61 }