Copyright clean-up (part 1):
[AROS.git] / arch / m68k-amiga / kernel / kernel_timer.c
blob99e6e9d271347fdae608fa8b9bfff9011198f216
1 /*
2 Copyright © 1995-2014, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 /*
7 * This code probes Amiga hardware timings, and
8 * configures SysBase with those settings.
9 */
11 #include <aros/symbolsets.h>
12 #include <exec/execbase.h>
13 #include <proto/exec.h>
14 #include <hardware/cia.h>
16 #include <kernel_base.h>
18 static int Timer_Init(struct KernelBase *KernelBase)
20 volatile struct CIA *ciaa = (struct CIA*)0xbfe001;
21 UWORD todlo, todcnt;
24 * Check powersupply tick rate.
25 * No Disable() here because we are running without interrupts during early init.
27 ciaa->ciacra = 0x00;
28 ciaa->ciatodhi = 0;
29 ciaa->ciatodmid = 0;
30 ciaa->ciatodlow = 0;
31 ciaa->ciatalo = 0xff;
32 ciaa->ciatahi = 0xff;
33 todlo = ciaa->ciatodlow;
34 while (todlo == ciaa->ciatodlow);
35 ciaa->ciacra = 0x01;
36 todlo = ciaa->ciatodlow;
37 while (todlo == ciaa->ciatodlow);
38 ciaa->ciacra = 0x00;
39 todcnt = ~(((ciaa->ciatahi << 8) | ciaa->ciatalo) + 1);
42 * 50Hz/60Hz ticks:
43 * 50Hz PAL 14188
44 * 60Hz NTSC 11932
45 * 50Hz NTSC 14318
46 * 60Hz PAL 11823
48 if (todcnt > 14188 + (14318 - 14188) / 2)
49 SysBase->PowerSupplyFrequency = 50;
50 else if (todcnt <= 11823 + (11932 - 11823) / 2)
51 SysBase->PowerSupplyFrequency = 60;
52 else if (todcnt > 14188 - (14188 - 11932) / 2)
53 SysBase->PowerSupplyFrequency = 50;
54 else
55 SysBase->PowerSupplyFrequency = 60;
57 return TRUE;
60 ADD2INITLIB(Timer_Init, 0)