; Author: Pawel Jablonski
; E-mail: pj@xirx.net
; WWW: xirx.net
; GIT: git.xirx.net
;
; License: You can use this code however you like
; but leave information about the original author.
; Code is free for non-commercial and commercial use.

include io.asm

; No arguments
; No return
external .xRTCRead:
	push A
	; Set command register
	clr A
	call .xIOSetRegister
	; Write rtc read command
	mov 0x90, A
	call .xIOWriteHighHalf
	pop A
	ret
	
; No arguments
; No return
external .xRTCWrite:
	push A
	; Set command register
	clr A
	call .xIOSetRegister
	; Write rtc write command
	mov 0x80, A
	call .xIOWriteHighHalf
	pop A
	ret

; No arguments
; Return:
;	A - year
external .xRTCGetYear:
	mov 0x2, A
	call .xIOSetRegister
	mov 0x4, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	call .xIORead
	ret

; No arguments
; Return:
;	A - month
external .xRTCGetMonth:
	mov 0x2, A
	call .xIOSetRegister
	mov 0x5, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	call .xIORead
	ret

; No arguments
; Return:
;	A - day
external .xRTCGetDay:
	mov 0x2, A
	call .xIOSetRegister
	mov 0x6, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	call .xIORead
	ret

; No arguments
; Return:
;	A - hour
external .xRTCGetHour:
	mov 0x2, A
	call .xIOSetRegister
	mov 0x7, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	call .xIORead
	ret

; No arguments
; Return:
;	A - minute
external .xRTCGetMinute:
	mov 0x2, A
	call .xIOSetRegister
	mov 0x8, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	call .xIORead
	ret

; No arguments
; Return:
;	A - second
external .xRTCGetSecond:
	mov 0x2, A
	call .xIOSetRegister
	mov 0x9, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	call .xIORead
	ret

; Arguments:
;	A - year
; No return
external .xRTCSetYear:
	push A
	mov 0x2, A
	call .xIOSetRegister
	mov 0x4, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	pop A
	call .xIOWrite
	ret

; Arguments:
;	A - month
; No return
external .xRTCSetMonth:
	push A
	mov 0x2, A
	call .xIOSetRegister
	mov 0x5, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	pop A
	call .xIOWrite
	ret

; Arguments:
;	A - day
; No return
external .xRTCSetDay:
	push A
	mov 0x2, A
	call .xIOSetRegister
	mov 0x6, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	pop A
	call .xIOWrite
	ret

; Arguments:
;	A - hour
; No return
external .xRTCSetHour:
	push A
	mov 0x2, A
	call .xIOSetRegister
	mov 0x7, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	pop A
	call .xIOWrite
	ret

; Arguments:
;	A - minute
; No return
external .xRTCSetMinute:
	push A
	mov 0x2, A
	call .xIOSetRegister
	mov 0x8, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	pop A
	call .xIOWrite
	ret

; Arguments:
;	A - second
; No return
external .xRTCSetSecond:
	push A
	mov 0x2, A
	call .xIOSetRegister
	mov 0x9, A
	call .xIOWriteLowHalf
	mov 0x3, A
	call .xIOSetRegister
	pop A
	call .xIOWrite
	ret