|
|
1.1 root 1: /*
2: * synchronize system time with the host's time
3: *
4: * Compile with DCC (or SAS/C)
5: *
6: * Copyright 1997, 1999 Bernd Schmidt
7: * Copyright 1999 Patrick Ohly
8: */
9:
10: #include <stdio.h>
11:
12: #include <exec/devices.h>
13: #include <exec/interrupts.h>
14: #include <exec/nodes.h>
15: #include <exec/io.h>
16: #include <exec/memory.h>
17: #include <intuition/intuitionbase.h>
18: #include <intuition/preferences.h>
19: #include <devices/input.h>
20: #include <devices/inputevent.h>
21: #include <devices/timer.h>
22: #include <hardware/intbits.h>
23: #include <clib/alib_protos.h>
24: #include <clib/exec_protos.h>
25:
26: #ifdef _DCC
27: int (*calltrap)(__d0 int, __a0 struct timeval *) = 0xF0FFA0;
28: #else
29: /* SAS */
30: __asm int (*calltrap)(register __d0 int, register __a0 struct timeval *) = (APTR)0xF0FFA0;
31: #endif
32:
33: int main (int argc, char **argv)
34: {
35: struct timerequest *timereq = 0;
36: struct MsgPort *timeport;
37: int result = calltrap (0, 0);
38:
39: if (result == 1)
40: fprintf (stderr, "timehack already running.\n");
41: else if (result == 2)
42: fprintf (stderr, "timehack not supported with this version of UAE.\n");
43: if (result != 0)
44: exit (5);
45:
46: timeport = CreatePort (0, 0);
47: if (timeport)
48: timereq = CreateStdIO(timeport);
49:
50: if (timereq == 0)
51: goto fail;
52:
53: if (OpenDevice ("timer.device", UNIT_VBLANK, timereq, 0) != 0)
54: goto fail;
55:
56: SetTaskPri (FindTask (NULL), 20); /* same as input.device */
57: for (;;) {
58: struct timeval cur_sys_time;
59:
60: timereq->tr_node.io_Command = TR_GETSYSTIME;
61: DoIO(timereq);
62: cur_sys_time = timereq->tr_time;
63: calltrap (1, &timereq->tr_time);
64: if (timereq->tr_time.tv_secs > cur_sys_time.tv_secs
65: || (timereq->tr_time.tv_secs == cur_sys_time.tv_secs
66: && timereq->tr_time.tv_micro > cur_sys_time.tv_micro))
67: {
68: timereq->tr_node.io_Command = TR_SETSYSTIME;
69: DoIO(timereq);
70: }
71:
72: timereq->tr_time.tv_secs = 1;
73: timereq->tr_time.tv_micro = 0;
74: timereq->tr_node.io_Command = TR_ADDREQUEST;
75: DoIO(timereq);
76: }
77: fail:
78: fprintf (stderr, "Couldn't start timehack (that's bad!)\n");
79: exit (5);
80: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.