|
|
|
@ -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 |
|
|
|
|