.TITLE SETTIM .IDENT /1/ ; ; A MINI TASK TO SET THE TIME FROM A DIGITAL PATHWAYS ; TCU-150. ;- .MCALL GTIM$,DIR$,EXIT$S,EXST$S EXSTAT: .WORD 1 ; ASSUME SUCCESS .BLKW 7 ; REST OF EXIT STATUS BLOCK GETTIM: GTIM$ TIMBUF TIMBUF: YEAR: .WORD 0 MONTH: .WORD 0 DAY: .WORD 0 HOUR: .WORD 0 MIN: .WORD 0 SEC: .WORD 0 .BLKW 2 ; 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 ; SECMSK=177700 ; BLANK OUT ALL BUT SEC ; ; ASCII MESSAGES ; .EVEN START: ; DIR$ #GETTIM ; SWAB YEAR ; MOVE YEAR TO HIGH BYTE ROL YEAR ; AND SHIFT LEFT 1 BIT .REPT 5 ; ROL MONTH ; SHIFT MONTH OVER .ENDR ; BIS MONTH,YEAR ; SET IT IN YEAR BIS DAY,YEAR ; SET IT IN YEAR SWAB HOUR ; SET IT IN HOUR BIS MIN,HOUR ; SET MIN IN HOUR HRSET: MOV HOUR,R0 ; SET HOUR,MIN MOV #HRMIN,R1 ; GET ADDRESS OF HR-MIN REGISTER MOV R0,(R1) ; START FAST CLOCK HRLOOP: CMP (R1),R0 ; DO WE HAVE A MATCH BNE HRLOOP ; IF NOT LOOP SOME MORE MOV R0,@#SECSET ; IF YES, STOP FAST CLOCK CMP (R1),R0 ; DO WE HAVE A MATCH BNE HRSET ; SHUKS, HAVE TO TRY AGAIN DAYSET: MOV YEAR,R0 ; GET YEAR, MONTH,DAY MOV #YRMODA,R1 ; GET ADDRESS OF YEAR REGISTER MOV R0,(R1) ; START FAST CLOCK DYLOOP: CMP (R1),R0 ; DO WE HAVE A MATCH BNE DYLOOP ; IF NE, NO, LOOP SOME MORE MOV R0,@#SECSET ; IF YES, A MATCH STOP CLOCK CMP (R1),R0 ; DO WE HAVE A MATCH BNE DAYSET ; SHUKS, HAVE TO TRY AGAIN 50$: EXST$S #EXSTAT ; SHOW EXIT STATUS EXIT$S .END START