.file	"rtc.s"

.global	getrtc,setrtc,rtc

.equ RTC_0,  0x0c08001
.equ RTC_1,  0x0c08003
.equ RTC_2,  0x0c08005
.equ RTC_3,  0x0c08007
.equ RTC_4,  0x0c08009
.equ RTC_5,  0x0c0800b
.equ RTC_6,  0x0c0800d
.equ RTC_7,  0x0c0800f
.equ RTC_8,  0x0c08011
.equ RTC_9,  0x0c08013
.equ RTC_A,  0x0c08015
.equ RTC_B,  0x0c08017
.equ RTC_C,  0x0c08019
.equ RTC_D,  0x0c0801b
.equ RTC_E,  0x0c0801d
.equ RTC_F,  0x0c0801f

.text
getrtc:		move.l	%d0,-(%a7)
		move.l	%d1,-(%a7)
getrtc1:	move.b	&0x0,RTC_D	|HOLD Setzen
		move.b	&0x1,RTC_D	|HOLD Setzen
		btst	&0x1,RTC_D	|BUSY ?
		bne	getrtc1
		clr.l	%d1
		move.b	RTC_0,%d0
		andi.l	&0xf,%d0
		or.l	%d0,%d1
		move.b	RTC_1,%d0
		andi.l	&0x7,%d0
		rol.w	&0x4,%d0
		or.l	%d0,%d1
		move.l	%d1,rtc
		clr.l	%d1
		move.b	RTC_2,%d0
		andi.l	&0xf,%d0
		or.l	%d0,%d1
		move.b	RTC_3,%d0
		andi.l	&0x7,%d0
		rol.w	&0x4,%d0
		or.l	%d0,%d1
		move.l	%d1,rtc+4
		clr.l	%d1
		move.b	RTC_4,%d0
		andi.l	&0xf,%d0
		or.l	%d0,%d1
		move.b	RTC_5,%d0
		andi.l	&0x3,%d0
		rol.w	&0x4,%d0
		or.l	%d0,%d1
		move.l	%d1,rtc+8
		clr.l	%d1
		move.b	RTC_6,%d0
		andi.l	&0xf,%d0
		or.l	%d0,%d1
		move.b	RTC_7,%d0
		andi.l	&0x3,%d0
		rol.w	&0x4,%d0
		or.l	%d0,%d1
		move.l	%d1,rtc+12
		clr.l	%d1
		move.b	RTC_8,%d0
		andi.l	&0xf,%d0
		or.l	%d0,%d1
		move.b	RTC_9,%d0
		andi.l	&0x1,%d0
		rol.w	&0x4,%d0
		or.l	%d0,%d1
		move.l	%d1,rtc+16
		clr.l	%d1
		move.b	RTC_A,%d0
		andi.l	&0xf,%d0
		or.l	%d0,%d1
		move.b	RTC_B,%d0
		andi.l	&0xf,%d0
		rol.w	&0x4,%d0
		or.l	%d0,%d1
		move.l	%d1,rtc+20
		clr.l	%d1
		move.b	RTC_C,%d1
		andi.l	&0x7,%d1
		move.l	%d1,rtc+24
		move.b	&0x0,RTC_D	|HOLD zuruecksetzen
		move.l	(%a7)+,%d1
		move.l	(%a7)+,%d0
		rts

setrtc:		move.l	%d0,-(%a7)
		move.l	%d1,-(%a7)
		move.l	%a0,-(%a7)
		move.l	%a1,-(%a7)
setrtc1:	move.b	&0x0,RTC_D	|HOLD Setzen
		move.b	&0x1,RTC_D	|HOLD Setzen
		btst	&0x1,RTC_D	|BUSY ?
		bne	setrtc1
		move.b	&0x7,RTC_F
		move.b	&0x0,RTC_E
		move.l	&0x5,%d1
		move.l	&rtc,%a0
		move.l	&RTC_0,%a1
setrtc2:	move.l	(%a0)+,%d0
		move.b	%d0,(%a1)
		addq.l	&0x2,%a1
		ror.b	&0x4,%d0
		move.b	%d0,(%a1)
		addq.l	&0x2,%a1
		dbf	%d1,setrtc2
		move.b	&0x0,(%a1)
		move.b	&0x0,RTC_D
		move.b	&0x4,RTC_F
		move.l	(%a7)+,%a1
		move.l	(%a7)+,%a0
		move.l	(%a7)+,%d1
		move.l	(%a7)+,%d0
		rts

