;*********************************************************************
;
;  B5C-KPAV.INS   -  KAYPRO WITH ADVENT REAL-TIME CLOCK
;
;    5/09/86      -  First Version (1.0)
;                    Robert J. Dix, PENKUG RBBS, (804) 838-1645
;
;*********************************************************************
;
CLKPORT EQU     090H    ; PORT FOR ADVENT CLOCK ON KAYPROS
TCENTURY EQU    019H    ; Current century . . . . to changed
                       ; on January 1, 2000
THOUR   EQU     04H     ; Real Time Clock Hour Register
TMINUTE EQU     03H     ; Real Time Clock Minute Register
TSECOND EQU     02H     ; Real Time Clock Second Register
TMONTH  EQU     07H     ; Real Time Clock Month Register
TDAY    EQU     06H     ; Real Time Clock Day Register
TYEAR   EQU     09H     ; Real Time Clock Year Register
;
;---------------------------------------------------------------------
;
TIME:
;
;  Read Seconds First to Guard Against Rollover
;
       MVI     A,TSECOND       ; Put RTC register # in A
       IN      CLKPORT         ; Get Seconds count
       MOV     E,A             ; and store it in E for Rollover Test
                               ; later on
       MVI     A,TYEAR         ; Put RTC register # in A
       IN      CLKPORT         ; Get Year
       STA     RTCBUF+4        ; Store in RTCBuf BCD buffer
       MVI     A,TCENTURY      ; Move Century to RTC BCD buffer
       STA     RTCBUF+3
       MVI     A,TMONTH        ; Put RTC register # in A
       IN      CLKPORT         ; Get Month
       STA     RTCBUF+5        ; Store in RTCBuf BCD buffer
       MVI     A,TDAY          ;
       IN      CLKPORT         ; Get Day
       STA     RTCBUF+6        ;
       MVI     A,THOUR         ;
       IN      CLKPORT         ; Get Hour
       STA     RTCBUF+0        ;
       MVI     A,TMINUTE       ;
       IN      CLKPORT         ; Get Minute
       STA     RTCBUF+1        ;
       MVI     A,TSECOND       ;
       IN      CLKPORT         ; Get Second
       STA     RTCBUF+2        ;
;
;  Check for rollover first before doing the binary conversion and exit
;
       CMP     E               ; Compare current second value with
                               ; what was stored in register E
       JNZ     TIME            ; If not the same value, then retry
                               ; otherwise....proceed
       LDA     RTCBUF          ; Get Hour Value
       CALL    BCDBIN          ; Convert it to binary format
       STA     CCHOUR          ; Store it for BYE5
       LDA     RTCBUF+1        ;
       CALL    BCDBIN          ; Do the same for Minute
       STA     CCMIN           ;
;
; All done, return to caller . . . . . until next time
;
       RET