6 __FBSDID("$FreeBSD: src/usr.bin/doscmd/timer.c,v 1.2.2.2 2002/04/25 11:04:51 tg Exp $");
11 int08(regcontext_t *REGS __unused)
13 *(u_long *)&BIOSDATA[0x6c] += 1; /* ticks since midnight */
14 while (*(u_long *)&BIOSDATA[0x6c] >= 24*60*6*182) {
15 *(u_long *)&BIOSDATA[0x6c] -= 24*60*6*182;
16 BIOSDATA[0x70]++; /* # times past mn */
18 /* What is the real BIOS' sequence? */
24 int1c(regcontext_t *REGS __unused)
31 inb_timer(int port __unused)
46 vec = insert_hardint_trampoline();
48 register_callback(vec, int08, "int 08");
50 vec = insert_softint_trampoline();
52 register_callback(vec, int1c, "int 1c");
54 define_input_port_handler(0x42, inb_timer);
55 define_input_port_handler(0x40, inb_timer);
57 /* Initialize time counter BIOS variable. */
58 gettimeofday(&tv, &tz);
60 tm = *localtime(&tv_sec);
61 *(u_long *)&BIOSDATA[0x6c] =
62 (((tm.tm_hour * 60 + tm.tm_min) * 60) + tm.tm_sec) * 182 / 10;
64 itv.it_interval.tv_sec = 0;
65 itv.it_interval.tv_usec = 54925; /* 1193182/65536 times per second */
66 itv.it_value.tv_sec = 0;
67 itv.it_value.tv_usec = 54925; /* 1193182/65536 times per second */
69 setitimer(ITIMER_REAL, &itv, 0);