.TITLE FMTCPU .IDENT /V7.02/ ;+ ; ; *** FM.CPU ; ; THIS ROUTINE TAKES A TIME IN TICKS (2 WORDS) AND FORMATS IT AS ; HOURS, MINUTES, SECONDS AND HUNDREDTHS OF A SECOND. ; TO BE USED WITH ACCOUNTING SYSTEM VERSION 7. ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; INPUT: ; R0 BUFFER ADDRESS ; R1 ADDRESS OF 2-WORD BLOCK CONTAINING TIME. ; ; OUTPUT: ; R0 UPDATED ; R1,R2 USED ; R3,R4,R5 PRESERVED ; ; REVISION HISTORY ; ---------------- ; ; SMT755 7-OCT-81 TIME REPORTED AS SECONDS AND HUNDREDTHS ; OF A SECOND RATHER THAN AS SECONDS AND ; TICKS, TO MAKE THE DISPLAY INDEPENDENT ; OF CLOCK FREQUENCY. ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; ;- SPA = 40 ; SPACE DPT = '. ; DECIMAL POINT .ENABL LC FM.CPU::JSR R5,$SAVRG ; SAVE R3,R4 AND R5 MOV R0,R5 ; COPY BUFFER POINTER MOV 2(R1),R2 ; GET LOW ORDER TIME MOV (R1),R1 ; GET HIGH ORDER TIME MOV #<60.*K$$TPS>,R0 ; GET TICKS PER MINUTE CALL $DDIV ; CONVERT TO MINUTES MOV R0,-(SP) ; PUSH REMAINING TICKS ON STACK MOV #60.,R0 ; SET MINUTES PER HOUR CALL $DDIV ; CONVERT TO HOURS MOV R0,-(SP) ; PUSH REMAINING MINUTES ON STACK MOV R5,R0 ; RESTORE BUFFER POINTER TO R0 MOV R2,R1 ; PUT HOURS IN R1 BEQ 10$ ; IF EQ THERE AREN'T ANY CALL DE.CML ; FORMAT HOURS MOVB #'h,(R0)+ ; INSERT UNIT TEXT MOVB #SPA,(R0)+ ; AND A SPACE 10$: MOV (SP)+,R1 ; GET NUMBER OF MINUTES BEQ 20$ ; IF EQ THERE ARE NONE CALL DE.CML ; FORMAT AS DECIMAL MOVB #'m,(R0)+ ; INSERT UNIT TEXT MOVB #SPA,(R0)+ ; AND A SPACE 20$: MOV (SP)+,R1 ; GET TICKS MOV R0,R5 ; SAVE BUFFER POINTER MOV #100.,R0 ; GET MULTIPLIER CALL $MUL ; COMPUTE TICKS*100. ADD #,R1 ; ROUND UP LAST DIGIT ADC R0 ; MOV R1,R2 ; COPY REGISTERS FOR $DDIV MOV R0,R1 ; MOV #K$$TPS,R0 ; SET DIVISOR CALL $DDIV ; CONVERT TO SECONDS*100 ; (HIGH ORDER RESULT WILL BE ZERO) CMP R2,#100. ; RESULT LESS THAN 100.? BGE 30$ ; IF GE NO, NO ZERO FILL REQUIRED MOVB #'0,(R5)+ ; INSERT A ZERO IN THE BUFFER CMP R2,#10. ; RESULT LESS THAN 10.? BGE 30$ ; IF GE NO, NO MORE ZERO FILL MOVB #'0,(R5)+ ; INSERT ANOTHER ZERO CHARACTER 30$: MOV R5,R0 ; COPY BUFFER ADDRESS BACK TO R0 MOV R2,R1 ; COPY NUMBER TO R1 CALL DE.CML ; FORMAT AS ASCII DECIMAL MOVB -(R0),1(R0) ; MOVE OVER TWO DIGITS MOVB -(R0),1(R0) ; MOVB #DPT,(R0)+ ; INSERT A DECIMAL POINT ADD #2,R0 ; STEP PAST LAST DIGIT MOVB #'s,(R0)+ ; INSERT UNIT TEXT RETURN ; AND RETURN TO CALLER .END