.TITLE SETTIM V3.2A 01-MAR-80 .IDENT \01MAR0\ .ENABL LC .REM ! ********************************************************************** TITLE: SETTIM DESCRIPTION: SETTIM is a stand-alone program which runs under RSX-11M V3.2. Its function is to set the date and time for the RSX-11M operating system, replacing the traditional time setting procedure at system start-up and on other occasions. SETTIM gets the correct time and date from the TCU-100 or TCU-150 battery powered timing control unit. USAGE: SETTIM may be used at system start-up, or any other time that the date and time must be set. SETTIM may be invoked as follows: >RUN $SETTIM ********************************************************************** ! .MCALL WSIG$S,EXIT$S .NLIST CND TCU150=1 ; SET TO 0 IF TCU-100 ; SET TO 1 IF TCU-150 TCUADR=160770 ; ADDRESS OF THE TCU-1X0 ON THE BUS TCUSTA=TCUADR+6 ; ADDRESS OF TCU-1X0 STATUS REGISTER ; MASK WORDS YRMSK=177600 ; YEAR MONMSK=177760 ; MONTH DAYMSK=177740 ; DAY HRMSK =177740 ; HOUR MINMSK=177700 ; MINUTE SECMSK=177700 ; SECOND RDYBIT=200 ; READY BIT ; DAYS PER MONTH (+1) TABLE DAYPMN: .BYTE 32.,29. ; JANUARY, FEBRUARY .BYTE 32.,31. ; MARCH, APRIL .BYTE 32.,31. ; MAY, JUNE .BYTE 32.,32. ; JULY, AUGUST .BYTE 31.,32. ; SEPTEMBER, OCTOBER .BYTE 31.,32. ; NOVEMBER, DECEMBER .PAGE SETTIM:: ; CHECK FOR TCU-1X0 READY 1$: BIT #RDYBIT,@#TCUSTA; TEST READY BIT IN STATUS REGISTER BNE 3$ ; READY 2$: WSIG$S 4$ ; NOT READY - WAIT BR 1$ ; TRY AGAIN 3$: MOV #TCUADR,R0 ; ADDRESS OF TCU-1X0 ; GET YEAR MOV #$TTNS-14,R3 ; ADDRESS OF RSX-11M TIME BUFFER .IF NE TCU150 MOV (R0),R1 ; GET CONTENTS OF TCU YEAR/MONTH/DAY REGISTER SWAB R1 ; GET IN LOW-ORDER BYTE ASR R1 BIC #YRMSK,R1 ; CLEAR JUNK BITS MOV R1,(R3)+ ; SET YEAR .IFF MOV (R3),R1 ; GET RSX-11M YEAR .IFTF BIT #3,R1 ; IS THIS LEAP YEAR? BNE 4$ ; IF NE NO INCB DAYPMN+1 ; YES - SET FEBRUARY TO 29. DAYS ; GET MONTH .IFF MOV #$TTNS-12,R3 ; ADDRESS OF RSX-11M TIME BUFFER .IFTF MOV (R0),R1 ; GET CONTENTS OF TCU YEAR/MONTH/DAY REGISTER .IFF SWAB R1 ; GET MONTH IN LOW ORDER BYTE .IFT ASR R1 ; GET MONTH IN LOW ORDER BYTE ASR R1 ASR R1 ASR R1 ASR R1 .ENDC BIC #MONMSK,R1 ; CLEAR JUNK BITS MOV R1,(R3)+ ; SET MONTH MOVB DAYPMN-1(R1),$TKPS-10 ; SET DAYS THIS MONTH ; GET DAY MOV (R0)+,R1 ; GET CONTENTS OF TCU YEAR/MONTH/DAY REGISTER BIC #DAYMSK,R1 ; CLEAR JUNK BITS MOV R1,(R3)+ ; SET DAY ; GET HOUR MOV (R0),R1 ; GET CONTENTS OF TCU HOUR/MINUTE REGISTER SWAB R1 ; GET HOURS IN LOW ORDER BYTE BIC #HRMSK,R1 ; CLEAR JUNK BITS MOV R1,(R3)+ ; SET HOURS ; GET MINUTES MOV (R0)+,R1 ; GET CONTENTS OF TCU HOUR/MINUTE REGISTER BIC #MINMSK,R1 ; CLEAR JUNK BITS MOV R1,(R3)+ ; SET MINUTES ; GET SECONDS MOV (R0)+,R1 ; GET CONTENTS OF TCU SECONDS REGISTER BIC #SECMSK,R1 ; CLEAR JUNK BITS MOV R1,(R3)+ ; SET SECONDS BEQ 2$ ; TOO CLOSE TO TIME TRANSISTION - TRY AGAIN EXIT$S ; EXIT TO RSX 4$: BPT ; DIRECTIVE ERROR .END SETTIM