Browse Source

RP5C01: Added support for assign date/time

pull/199/head
Dean Netherton 5 years ago
parent
commit
8981a255a7
  1. 168
      Source/HBIOS/rp5rtc.asm

168
Source/HBIOS/rp5rtc.asm

@ -13,11 +13,30 @@ RP5RTC_DAT .EQU $B5
REG_1SEC .EQU $00
REG_10SEC .EQU $01
REG_1MIN .EQU $02
REG_10MIN .EQU $03
REG_1HR .EQU $04
REG_10HR .EQU $05
REG_DAYWEEK .EQU $06
REG_1DAY .EQU $07
REG_10DAY .EQU $08
REG_1MNTH .EQU $09
REG_10MNTH .EQU $0A
REG_1YEAR .EQU $0B
REG_10YEAR .EQU $0C
REG_MODE .EQU $0D
REG_TEST .EQU $0E
REG_RESET .EQU $0F
MD_TIM .EQU 8
MD_ALM .EQU 4
REG_12_24 .EQU $0A
MODE_TIMEST .EQU 0
MODE_ALRMST .EQU 1
MODE_RAM0 .EQU 2
MODE_RAM1 .EQU 3
MD_TIME .EQU 8
MD_ALRM .EQU 4
RP5RTC_INIT:
LD A,(RTC_DISPACT) ; RTC DISPATCHER ALREADY SET?
@ -35,6 +54,16 @@ RP5RTC_INIT:
XOR A
OUT (RP5RTC_DAT), A ; TURN OFF ALL TEST MODE BITS
LD B, MODE_ALRMST
CALL RP5RTC_SETMD
LD A, REG_12_24 ; SET TO 24 HOUR CLOCK
OUT (RP5RTC_REG), A
LD A, 1
OUT (RP5RTC_DAT), A
CALL RP5RTC_RDTIM
; DISPLAY CURRENT TIME
@ -131,6 +160,33 @@ RP5RTC_SETTIM:
LD BC,RP5RTC_BUFSIZ ; LENGTH
CALL HB_BNKCPY ; COPY THE CLOCK DATA
;
LD B, MODE_TIMEST
CALL RP5RTC_SETMD
LD B, REG_1SEC
LD A, (RP5RTC_SS)
CALL RP5RTC_WRVL
LD B, REG_1MIN
LD A, (RP5RTC_MM)
CALL RP5RTC_WRVL
LD B, REG_1HR
LD A, (RP5RTC_HH)
CALL RP5RTC_WRVL
LD B, REG_1DAY
LD A, (RP5RTC_DT)
CALL RP5RTC_WRVL
LD B, REG_1MNTH
LD A, (RP5RTC_MO)
CALL RP5RTC_WRVL
LD B, REG_1YEAR
LD A, (RP5RTC_YR)
CALL RP5RTC_WRVL
XOR A ; SIGNAL SUCCESS
RET ; AND RETURN
;
@ -147,57 +203,101 @@ RP5RTC_DEVICE:
;
; READ OUT THE TIME
RP5RTC_RDTIM:
LD B, MODE_TIMEST
CALL RP5RTC_SETMD
LD B, REG_1SEC
CALL RP5RTC_RDVL
LD (RP5RTC_SS), A
LD B, REG_1MIN
CALL RP5RTC_RDVL
LD (RP5RTC_MM), A
LD B, REG_1HR
CALL RP5RTC_RDVL
LD (RP5RTC_HH), A
LD B, REG_1DAY
CALL RP5RTC_RDVL
LD (RP5RTC_DT), A
LD B, REG_1MNTH
CALL RP5RTC_RDVL
LD (RP5RTC_MO), A
LD B, REG_1YEAR
CALL RP5RTC_RDVL
LD (RP5RTC_YR), A
RET
; SET MODE
; MODE IN B (MODE_TIMEST, MODE_ALRMST, MODE_RAM0, MODE_RAM1)
RP5RTC_SETMD:
LD A, REG_MODE ; SELECT MODE REGISTER
OUT (RP5RTC_REG), A
; CALL DLY32
LD A, MD_TIM | !MD_ALM | 0 ; TURN ON TIME AND TURN OFF ALARM
OUT (RP5RTC_DAT), A ; AND SET MODE 0 (REGISTER BANK 0)
; CALL DLY32
LD A, REG_1SEC ; SELECT 1 SECOND REGISTER
IN A, (RP5RTC_DAT)
AND MD_TIME | MD_ALRM
OR B
OUT (RP5RTC_DAT), A ; ASSIGN MODE
RET
; READ OUT 2 REGISTERS - 2 NIBBLES TO 1 BYTE
; REGISTER IN B
RP5RTC_RDVL:
LD A, B ; SELECT UNIT REGISTER
OUT (RP5RTC_REG), A
; CALL DLY32
IN A, (RP5RTC_DAT)
AND $0F ; RETRIEVE 1 SECOND NIBBLE
AND $0F ; RETRIEVE UNIT NIBBLE
LD L, A
LD A, REG_10SEC ; SELECT 1 SECOND REGISTER
INC B
LD A, B ; SELECT TENS REGISTER
OUT (RP5RTC_REG), A
; CALL DLY32
IN A, (RP5RTC_DAT)
AND $0F
rlca
rlca
rlca
rlca ; MOVE TO TOP NIBBLE
RLCA
RLCA
RLCA
RLCA ; MOVE TO TOP NIBBLE
OR L ; MERGE IN LOW NIBBLE
LD H, A
; A = SECONDS AS BCD
LD (RP5RTC_SS), A
LD H, A ; A = VALUE AS BCD
RET
; WRITE OUT 2 REGISTERS - 1 BYTE TO 2 NIBBLES
; REGISTER IN B (B+1)
; VALUE IN A
RP5RTC_WRVL:
LD C, A
LD A, B ; SELECT UNIT REGISTER
OUT (RP5RTC_REG), A
LD A, C ; WRITE C (ONLY LOW NIBBLE WILL BE USED)
OUT (RP5RTC_DAT), A
INC B
LD A, B ; SELECT TENS REGISTER
OUT (RP5RTC_REG), A
LD A, C ; SHIFT TOP NIBBLE TO LOW NIBBLE
RRCA
RRCA
RRCA
RRCA
OUT (RP5RTC_DAT), A ; WRITE IT
RET
;
; WORKING VARIABLES
; REGISTER EXTRACTED VALUES
;
RP5RTC_BCDBUF: ; ALL IN BINARY
RP5RTC_BCDBUF:
RP5RTC_YR .DB 20
RP5RTC_MO .DB 01
RP5RTC_DT .DB 01
RP5RTC_HH .DB 00
RP5RTC_MM .DB 00
RP5RTC_SS .DB 00
;;
RP5RTC_MONTBL: ; DAYS IN MONTH + 1
.DB 32 ; JANUARY
.DB 29 ; FEBRUARY (NON-LEAP)
.DB 32 ; MARCH
.DB 31 ; APRIL
.DB 32 ; MAY
.DB 31 ; JUNE
.DB 32 ; JULY
.DB 32 ; AUGUST
.DB 31 ; SEPTEMBER
.DB 32 ; OCTOBER
.DB 31 ; NOVEMBER
.DB 32 ; DECEMBER

Loading…
Cancel
Save