.TITLE RTCSET .LIST TTM .NLIST BEX .IDENT /V01.3/ ; ; ;+ ; RTCSET -- SUBROUTINE TO LOAD RTC WITH DATE AND TIME ; ; CALL: CALL RTCSET(PRM) ; PRM 8 WORD FIELD CONTAINING TIME AND DATE ; W0 YEAR SINCE 1900 ; W1 MONTH(1-12) ; W2 DAY(1-31) ; W3 HOUR(0-23) ; W4 MINUTE(0-59) ; W5 SECOND(0-59) ; W6,W7 RESERVED LOCATIONS ; ; ---- THE PRM BLOCK IS DESTROYED BY RTCSET ---- ;- RTCCSR=177160 BF=2 ;OFFSET TO PARAMETER FIELD CS.F=4 ;CSR OFFSET TO FUNCTION CS.V=2 ;CSR OFFSET TO LOAD VALUE CS.T=0 ;CSR OFFSET READY BUSY=20 ;CLOCK BUSY BIT P.YR=0 ;OFFSET TO YEAR IN PRM BLOCK P.MON=2 ;OFFSET TO MONTH IN PRM BLOCK P.DAY=4 ;OFFSET TO DAY IN PRM BLOCK P.HR=6 ;OFFSET TO HOUR IN PRM BLOCK H24=80. ;BITS TO 24 HOUR SYSTEM LAPB=40. ;LEAP YEAR BIT ; RTCSET:: MOV #RTCCSR,R2 ;GET CSR MOV BF(R5),R3 ;PARAMETER FIELD ADD #H24,P.HR(R3) ;SET 24 HOUR SYSTEM BIT MOV #12.,R4 ;FNC HIGH PART OF YEAR MOV P.YR(R3),R0 ;LEAP YEAR ? BIC #^C3,R0 ; BNE 1$ ;IF NE NO CMP #2,P.MON(R3) ;JAN OR FEB ? BLT 1$ ;IF LT NO ADD #LAPB,P.DAY(R3) ;YES - SET LEAP YEAR BIT 1$: CALL SETVAL ;START LOADING DEC R4 ;READY BPL 1$ ;IF MI YES RETURN ; SETVAL: CMP #6,R4 ;DATE DONE BNE 9$ DEC R4 ;YES - READ TIME 9$: MOV (R3)+,R1 ;GET PARAMETER CLR R0 DIV #10.,R0 ;MAKE BCD CALL SETBCD MOV R1,R0 DEC R4 ;LOAD LOW PART CALL SETBCD RETURN ; SETBCD: MOV R0,CS.V(R2) ;LOAD VALUE 20$: BIT #BUSY,CS.T(R2) ;DONE? BNE 20$ MOV R4,CS.F(R2) ;LOAD FNC 10$: BIT #BUSY,CS.T(R2) ;DONE? BNE 10$ RETURN .END