.TITLE CC300 .IDENT /X01/ .NLIST BEX .ENABL LC ; ; C COMPILER ; WRAPUP ; ; VERSION X01 ; ; DAVID G. CONROY 13-JAN-78 ; LAST UPDATED: 30-APR-79 ; .GLOBL CC300 .GLOBL METER .MCALL RETURN .MCALL DELET$ .MCALL CLOSE$ ; ; LOCAL DATA. ; CTIME: .BLKW 2. ;COMPILE TIME. MBUF: .BLKB 80. ;FOR METER FORMATTING. INPH: .ASCIZ "Phase 0: " ;HEADER FOR METER. .EVEN ;+ ; ** CC300 - WRAPUP ; ; THIS OVERLAY WRAPS UP THE COMPILATION. THE ERROR FILE IS CLOSED. THE ; EXPANDED SOURCE FILE IS DELETED IF THE -S OPTION WAS NOT SPECIFIED, ; ELSE IT IS CLOSED. THE ASM OUTPUT FILE IS DELETED IF THERE WERE ANY ; ERRORS, ELSE IT IS CLOSED. THE PHASE 1 TO PHASE 2 INTERMEDIATE FILE ; IS DELETED IF THE -I OPTION WAS NOT SPECIFIED, ELSE IT IS CLOSED. ; ; THIS OVERLAY IS ALSO RESPONSIBLE FOR FORMATTING AND PRINTING METER ; INFORMATION (-M). CC300: TSTB MFLAG ;-M BEQ 5$ ;NO CALL METER ;FORMAT METER INFORMATION. 5$: CLOSE$ #EFDB ;ERRORS MOV #SFDB,R0 ;GET PTR TO EXPANDED SOURCE FDB TSTB SFLAG ;-S BNE 10$ ; DELET$ ;NO, DELETE IT BR 20$ ; 10$: CLOSE$ ;YES, KEEP IT 20$: MOV #AFDB,R0 ;GET PTR TO ASM OUTPUT FDB TST NERRS ;ANY ERRORS BEQ 30$ ; DELET$ ;YES, DELETE IT BR 40$ ; 30$: CLOSE$ ;NO, KEEP IT 40$: MOV #IFDB,R0 ;GET PTR TO INTERMEDIATE FDB TSTB IFLAG ;-I BNE 50$ ; DELET$ ;NO, DELETE IT BR 60$ ; 50$: CLOSE$ ;YES, KEEP IT 60$: RETURN ;TO CC0RT ;+ ; ** METER -- FORMAT METER INFORMATION. ; ; THIS ROUTINE FORMATS ANY METER INFORMATION ACCUMULATED BY VARIOUS ; COMPILER PHASES. THE INFORMATION IS WRITTEN TO THE ERROR FILE. ; ; USES: ; ALL. ;- METER: CMP TODPTR,#TODBUF+4;IF NO TIMES IN THE BUFFER BLOS 30$ ;JUST DUCK. MOV TODPTR,R5 ;GET THE LAST TIME MOV -(R5),R3 ;LOW MOV -(R5),R2 ;HIGH MOV TODBUF,R0 ;GET START TIME. MOV TODBUF+2,R1 ; CALL DIFF ;COMPUTE TOTAL COMPILE TIME. MOV R2,CTIME ;SAVE IT MOV R3,CTIME+2 ; MOV #TODBUF+4,R5 ;POINT AT FIRST ENTRY. 10$: CMP R5,TODPTR ;MORE TO DO? BHIS 30$ ;NO. MOV #MBUF,R4 ;POINT AT MESSAGE BUFFER. MOV #INPH,R0 ;HEADER. 20$: MOVB (R0)+,(R4)+ ;TO BNE 20$ ;OUTPUT DEC R4 ;BUFFER INCB INPH+6 ;FIX FOR NEXT PHASE. MOV -4(R5),R0 ;START MOV -2(R5),R1 ;TIME MOV (R5)+,R2 ;END MOV (R5)+,R3 ;TIME CALL DIFF ;COMPUTE RUN TIME. MOV R2,R1 ;SET UP FOR CALL MOV R3,R2 ;TO DDIV. MOV TPS,R0 ;TICKS. CALL $DDIV ; MOV R0,-(SP) ;SAVE TICKS. MOV #60.,R0 ;SECONDS. CALL $DDIV ; MOV R0,-(SP) ;SAVE SECONDS. MOV #60.,R0 ;MINUTES CALL $DDIV ; MOV R0,-(SP) ;SAVE MINUTES. CALL 40$ ;HOURS MOVB #':,(R4)+ ; MOV (SP)+,R2 ;THEN CALL 40$ ;MINUTES MOVB #':,(R4)+ ; MOV (SP)+,R2 ;THEN CALL 40$ ;SECONDS MOVB #'+,(R4)+ ; MOV (SP)+,R2 ;THEN CALL 50$ ;FORMAT TICKS. CLRB (R4) ;MAKE ASCIZ. MOV #MBUF,R0 ;THEN CALL CCERR ;SEND IT TO THE ERROR STREAM. BR 10$ ;MORE 30$: RETURN ;DONE 40$: ASHC #-16.,R2 ;SXT TO R2, R3 DIV #10.,R2 ;2 DIGITS. ADD #'0,R2 ;MAKE ADD #'0,R3 ;ASCII MOVB R2,(R4)+ ;HI PART MOVB R3,(R4)+ ;LO PART RETURN ;DONE 50$: ASHC #-16.,R2 ;SIGN EXTEND. DIV #10.,R2 ;DIVIDE. MOV R3,-(SP) ;SAVE REMAINDER. TST R2 ;IS QUOTIENT = 0? BEQ 60$ ;YES, START COMING UP. CALL 50$ ;ELSE RECURSE. 60$: MOV (SP)+,R3 ;GET REMAINDER. ADD #'0,R3 ;TO ASCII. MOVB R3,(R4)+ ;TO BUFFER. RETURN ;DONE ;+ ; ** DIFF -- TIME DIFFERENCE. ; ; SUBTRACT TWO TIMES, TAKING INTO ACCOUNT WRAP AROUND MIDNIGHT. ; ; INPUTS: ; R0=HI PART, SUBTRAHEND. ; R1=HI PART, SUBTRAHEND. ; R2=HI PART, MINUEND. ; R3=LO PART, MINUEND. ; ; OUTPUTS: ; R2=HI PART, DIFFERENCE. ; R3=LO PART, DIFFERENCE. ;- DIFF: SUB R1,R3 ;DOUBLE SBC R2 ;PRECISION SUB R0,R2 ;SUBTRACT BPL 10$ ;ALL OK. MOV R2,-(SP) ;FIGURE MOV R3,-(SP) ;OUT MOV TPS,R0 ;THE MOV #1,R2 ;NUMBER MOV #50600,R3 ;OF CALL $DMUL ;TICKS MOV (SP)+,R3 ;PER MOV (SP)+,R2 ;DAY ADD R1,R3 ;ADD TO ADC R2 ;TIME ADD R0,R2 ;DIFFERENCE. 10$: RETURN ;DONE .END