.TITLE RTCGET .LIST TTM .NLIST BEX .IDENT /V01.3/ ;+ ; RTCGET -- SUBROUTINE TO GET DATE AND TIME FROM RTC ; ; CALL: CALL RTCGET(PRM,FLG) ; PRM 8 WORD FIELD TO BE FILLED WITH TIME AND DATE ; W0 YEAR SINCE 1900 ; W1 MONTH (1-12) ; W2 DAY(1-31) ; W3 HOUR(0-23) ; W4 MINUTE(0-59) ; W6 SECOND(0-59) ; W7,W8 RESERVED ; FLG TIME SET FLAG: 0= DONT SET SYSTEM TIME ; 1= SET SYSTEM TIME ;- RTCCSR=177160 CS.F=0 CS.V=0 CS.T=0 BF=2 ;OFFSET TO BUFFER FLG=4 ;OFFSET TO FLAG BUSY=20 ;CLOCK INTERFACE BUSY BIT LAP=4 ;LEAP YEAR BIT P.YR=0 ;OFFSET TO YEAR IN PRM BLOCK P.MON=2 ;OFFSET TO MONTHS IN PRM BLOCK P.HR=6 ;OFFSET TO HOURS IN PRM BLOCK ; .MCALL STIM$S ; RTCGET:: MOV #RTCCSR,R2 100$: TST -(SP) ;MAKE ROOM FOR SECONDS MOV SP,R3 ;ITS ADRESS MOV #1,R4 ;SECONDS CALL GETVAL ;FETCH IT MOV BF(R5),R3 MOV #12.,R4 ;FNC HIGH PART OF YEAR 1$: CALL GETVAL ;READ VALUE DEC R4 ;READY? BPL 1$ ;IF MI YES CMP -(R3),(SP)+ ;CLEAR STACK ;CHANGE IN SECONDS ? BNE 100$ ;YES, GO MAKE LOOP TST @FLG(R5) ;SET SYSTEM TIME ? BEQ 2$ MOV BF(R5),R0 MOV #-1,S.TICT(R0) MOV #-1,S.TICP(R0) ;DEFAULT FREQUENCY STIM$S R0 2$: MOV BF(R5),R3 ;CHECK IF LEAP YEAR MOV P.YR(R3),R0 BIC #^C3,R0 ;CHECK BNE 6$ CMP #2,P.MON(R3) ;TURN ON LEAP YEAR BIT? BLT 6$ MOV #8.,CS.F(R2) ;GET HIGH PART OF DAY 3$: BIT #BUSY,CS.T(R2) ;READY? BNE 3$ MOV CS.V(R2),R0 ;YES BIS #4,R0 ;MARK LEAP YEAR 4$: BIT #BUSY,CS.T(R2) ;OK TO LOAD BNE 4$ MOV R0,2(R2) ;LOAD 5$: BITB #BUSY,CS.T(R2) ; BNE 5$ MOV #8.,4(R2) ;FNC 6$: RETURN ; GETVAL: CMP #6,R4 ;DATE DONE BNE 9$ DEC R4 ;YES - GET TIME 9$: MOV R4,CS.F(R2) ;LOAD FNC 10$: BIT #BUSY,CS.T(R2) ;READY? BNE 10$ MOV CS.V(R2),R1 ;GET VALUE BICB CLTAB(R4),R1 ;CLEAR FLAGS MUL #10.,R1 DEC R4 ;LOW PART MOV R4,CS.F(R2) ; 20$: BIT #BUSY,CS.T(R2) ;READY? BNE 20$ ADD CS.V(R2),R1 ;ADD LOW PART MOV R1,(R3)+ RETURN ; CLTAB: .BYTE ^C17,^C17,^C17,^C17,^C17,^C7,0 .BYTE ^C17,^C3,^C17,^C1,^C17,^C17 .END