.TITLE TIMSET .IDENT /1/ ; ; A MINI TASK TO GET THE TIME FROM A DIGITAL PATHWAYS ; TCU-150, CONVERT THE VALUES TO ASCII DATA, INSERT THE DATA ; INTO A PROTO-TYPE TIME STRING AND TO SPAWN THE TIME TO MCR ; VIA THE TIME COMMAND ;- .MCALL SPWN$,GTIM$,DIR$,EXIT$S,EXST$S .MCALL STSE$S ; SPAWN DPB SPNDPB: SPWN$ MCR...,,,,,1,,EXSTAT,TIMMSG,TMSGL EXSTAT: .WORD 1 ; ASSUME SUCCESS .BLKW 7 ; REST OF EXIT STATUS BLOCK ; TCU-150 REGISTER ASSIGNMENTS ; YRMODA=160770 ; BITS 9-15 = YEAR ; BITS 5-8 MONTH ; BITS 0-4 DAY HRMIN=160772 ; BITS 8-12 HOUR ; BITS 0-5 MIN SECSET=160774 ; BITS 0-5 STSCSR=160776 ; STATUS CSR ; ; LOCAL DATA YRVAL: .WORD 0 ; YEAR MONVAL: .WORD 0 ; MONTH DAYVAL: .WORD 0 ; DAY HRVAL: .WORD 0 ; HOUR MINVAL: .WORD 0 ; MIN SECVAL: .WORD 0 ; SECOND ; ; BLANK OUT MASKS YRMSK=777 ; BLANK OUT MONTH, DAY MONMSK=177037 ; BLANK OUT YEAR , DAY DAYMSK=177740 ; BLANK OUT YEAR, MONTH HRMSK=160377 ; BLANK OUT MIN MINMSK=177700 ; BLANK OUT HOUR SECMSK=177700 ; BLANK OUT ALL BUT SEC ; ; ASCII MESSAGES ; TIMMSG: .ASCII /TIME / DATE: .ASCII / / ; DD-MMM-YY TIME: .ASCII / / ; HH:MM:SS TMSGL=.-TIMMSG ER1: .ASCIZ <15><12>/TIMSET -- SPAWN TO MCR TO SET TIME FAILED/ .EVEN START: ; MOV @#YRMODA,YRVAL ; GET YEAR, MONTH DAY MOV @#HRMIN,HRVAL ; GET HOUR, MIN MOV @#SECSET,SECVAL ; GET SEC MOV YRVAL,MONVAL ; COPY MONTH MOV YRVAL,DAYVAL ; COPY DAY MOV HRVAL,MINVAL ; COPY MIN ; CLEAR OFF GARBAGE AND ROTATE BITS BIC #YRMSK,YRVAL ; CLEAR OFF GARBAGE SWAB YRVAL ; SWAP HIGH AND LOW BYTES ROR YRVAL ; BUMP DOWN 1 BIC #MONMSK,MONVAL ; CLEAR OFF GARBAGE .REPT 5 ROR MONVAL ; SHIFT MONTH OVER .ENDR BIC #DAYMSK,DAYVAL ; CLEAR OUT GARBAGE FROM DAY BIC #HRMSK,HRVAL ; CLEAR OUT GARBAGE FROM HOUR SWAB HRVAL ; MOVE VALUE TO LOW BYTE BIC #MINMSK,MINVAL ; CLEAR OUT GARBAGE FROM MIN BIC #SECMSK,SECVAL ; CLEAR OUT GARBAGE FROM SEC MOV #DATE,R0 ; ADDRESS OF DATE STRING MOV #YRVAL,R1 ; ADDRESS OF WHERE YEAR IS CALL $DAT ; CONVERT TO DD-MMM-YY MOVB #40,(R0)+ ; INSERT A SPACE ; USE R0 TO POINT TO WHERE TO ENCODE THE TIME MOV #HRVAL,R1 ; SET ADDRESS OF HOUR MOV #3,R2 ; CONVERT TO HH:MM:SS CALL $TIM ; CONVERT DIR$ #SPNDPB ; SEND COMMAND TO MCR BCC 5$ ; IF CC OK MOV #4,EXSTAT ; SET FATAL STATUS MOV #ER1,R4 ; SHOW ERROR CALL WRIT ; WRITE TO TI: BR 50$ ; EXIT WITH FATAL ERROR 5$: STSE$S #1 ; STOP UNTIL DONE 50$: EXST$S #EXSTAT ; SHOW EXIT STATUS EXIT$S ;+ ; WRITE OUT A ASCIZ MESSAGE TO TI: ; INPUT: ; R4 - MESSAGE ADDRESS ; ;- .MCALL QIOW$ WRTDPB: QIOW$ IO.WLB,5,1,,,, WRIT: ; REF LABLE MOV R1,-(SP) ; SAVE R1 MOV R4,R1 ; COPY BUFFER ADDRESS 10$: TSTB (R1)+ ; END OF MESSAGE? BNE 10$ ; NO, LOOP TILL END SUB R4,R1 ; COMPUTE LENGTH MOV R4,WRTDPB+Q.IOPL ; SET BUFFER ADDRESS MOV R1,WRTDPB+Q.IOPL+2 ; SET BUFFER LENGTH DIR$ #WRTDPB ; WRITE IT OUT MOV (SP)+,R1 ; RESTORE R1 RETURN ; ALL DONE ; JGD .END START