4 #include <aros/debug.h>
5 #include <aros/libcall.h>
7 #include "battclock_intern.h"
9 UBYTE
getreg(volatile UBYTE
*p
, UBYTE regnum
)
11 return p
[regnum
* 4 + 3] & 15;
13 void putreg(volatile UBYTE
*p
, UBYTE regnum
, UBYTE v
)
15 p
[regnum
* 4 + 3] = v
;
17 UBYTE
getbcd(volatile UBYTE
*p
, UBYTE regnum
)
19 return getreg(p
, regnum
+ 1) * 10 + getreg(p
, regnum
);
21 void putbcd(volatile UBYTE
*p
, UBYTE regnum
, UBYTE v
)
23 putreg(p
, regnum
+ 1, v
/ 10);
24 putreg(p
, regnum
, v
% 10);
27 void stopclock(struct BattClockBase
*Battclock
)
29 volatile UBYTE
*p
= Battclock
->clockptr
;
30 if (Battclock
->clocktype
== MSM6242B
) {
31 putreg(p
, 0xf, 4 + 2);
32 } else if (Battclock
->clocktype
== RF5C01A
) {
36 void startclock(struct BattClockBase
*Battclock
)
38 volatile UBYTE
*p
= Battclock
->clockptr
;
39 if (Battclock
->clocktype
== MSM6242B
) {
41 } else if (Battclock
->clocktype
== RF5C01A
) {
46 void resetbattclock(struct BattClockBase
*Battclock
)
48 volatile UBYTE
*p
= Battclock
->clockptr
;
54 if (Battclock
->clocktype
== MSM6242B
) {
58 for (i
= 0; i
< 12; i
++)
60 putreg(p
, 0xf, 7); // reset
61 putreg(p
, 0xf, 4); // leave 24h on
62 } else if (Battclock
->clocktype
== RF5C01A
) {
63 putreg(p
, 0xd, 0); // stop
65 for (j
= 0; j
< 4; j
++) {
67 for (i
= 0; i
< 12; i
++)
71 putreg(p
, 0xf, 3); // reset
72 putreg(p
, 0xf, 0); // reset off
73 putreg(p
, 0xd, 8); // timer en