.TITLE EVALUATE DATA FROM MEASUREMENT PROGRAM .SBTTL CALL IN MACROS .MCALL FSRSZ$,FDBDF$,FDAT$A,FDRC$A,FDOP$A,OPEN$U,CLOSE$ .MCALL OPEN$W,PUT$,QIOW$S,FDBDF$A,READ$,WRITE$,WAIT$,DELET$ .MCALL FDBK$A,FDBF$A,EXIT$S,PRINT$ LINPAG=60. A0=%0 A1=%1 A2=%2 A3=%3 A4=%4 A5=%5 .PAGE .SBTTL INIT(ASSEMBLE TIME) FILE STRUCTURE MACROS FSRSZ$ 2,2*512. ;ALLOCATE FILE BUFFER SPACE RUNFIL: FDBDF$ FDAT$A R.FIX,,20.,1 FDRC$A FD.RWM FDBK$A IPAGE,512.,,1,IOSTAT FDOP$A 1,RUNDES,,FO.MFY FDBF$A 1 RUNDES: .WORD 0,0,0,0,RUNSIZ,RUNAD RUNAD: .ASCII /MEASURE.DAT/ RUNSIZ=.-RUNAD .EVEN INSFIL: FDBDF$ ;INIT THE INPUT FILE FOR INSTRUCTIONS FDAT$A R.FIX,,4,-512. FDRC$A FD.RWM FDBK$A IPAGE,512.,,1,IOSTAT FDOP$A 1,INSDES,,FO.MFY FDBF$A 1 INSDES: .WORD 0,0,0,0,INSIZ,INSAD INSAD: .ASCII /INSTCTR.DAT/ INSIZ=.-INSAD .EVEN LOCFIL: FDBDF$ ;INIT THE INPUT FILE FOR LOCATIONS FDAT$A R.FIX,,4,-256. FDRC$A FD.RWM FDBK$A IPAGE,512.,,1,IOSTAT FDOP$A 2,LOCDES,,FO.MFY FDBF$A 1 LOCDES: .WORD 0,0,0,0,LOCSIZ,LOCAD LOCAD: .ASCII /LOCTCTR.DAT/ LOCSIZ=.-LOCAD .EVEN RESFIL: FDBDF$ ;INIT THE DATA OUTPUT FILE FDAT$A R.VAR,FD.CR FDRC$A FDOP$A 3,LSTDES,,FO.WRT LSTDES: .WORD 0,0,0,0,LSTSZ,LSTAD LSTAD: .ASCII /EVALUATE.LST/ LSTSZ=.-LSTAD .EVEN .PAGE .SBTTL IMPURE DATA AREA LINCTR: .WORD 0 PAGCTR: .WORD 0 .WORD 0,-1,-1 LOCBUF: .REPT 6*+1 .WORD 0 ;ADDRESS .WORD 0,0 ;COUNT .ENDR IPAGE: .BLKW 256. ;INPUT RAW DAT PAGE IOSTAT: .WORD 0,0 ;I/O STAUS BLOCK VBN: .WORD 0,0 ;PAGE NUMBER ACCREG: .BLKW 256. ;PROGRAM ACCUMULATED REGESTER USEAGE STORAGE AREA ILINE: .BLKB 132. ; ; INTEGER*4 ACCREG(8(REG0-7),8(MOSE 0-8),2(SRC/DST)) ACCFPR: .BLKW 32. ;F.P. ACCUMULATORS USEAGE ; FOR EACH INSTRUCTION-TEMP WORKING AREA WORK: .BLKW 512. TCOUNT: .WORD 0,0 PCOUNT: .WORD 0,0 LOCP1: .WORD 0 DATLIN: .ASCII /PROGRAM / PRGNAM: .ASCII / RUN AT / PRGTIM: .ASCII / / DATSIZ=.-DATLIN .EVEN BLNKLN: .ASCII / / .EVEN .PAGE .SBTTL CODE AREA/START UP-LOCACTION INFO BREAKOUT START: CLR LINCTR ;CLEAR COUNTERS FOR PAGE FORMATING CLR PAGCTR OPEN$U #RUNFIL ;GET PROG INFO FILE BCC RUNOK QIOW$S #IO.WLB,#5,#1,,,,<#NRUN,#NRUNS,#40> JMP NORUN NRUN: .ASCII /NO RUN TIME INFORMATION FILE EXISTS/ NRUNS=.-NRUN .EVEN RUNOK: CLR VBN MOV #1,VBN+2 READ$ #RUNFIL,#IPAGE,#512.,#VBN WAIT$ #RUNFIL MOV #PRGNAM,R0 MOV IPAGE,R1 CALL $C5TA MOV IPAGE+2,R1 CALL $C5TA MOV #PRGTIM,R0 MOV #IPAGE+4,R1 CALL $DAT MOVB #40,(R0)+ MOV #3,R2 CALL $TIM DELET$ #RUNFIL NORUN: OPEN$W #RESFIL ;OPEN OUTPUT FILE OPEN$U #LOCFIL ;OPEN FILE OF INSRUCTION PC'S EXECUTED BCC LOCFOK ;HANDLE CASE OF NO LOC FILE QIOW$S #IO.WLB,#5,#1,,,,<#NOLOC,#NOLOCS,#40> JMP DOITYP NOLOC: .ASCII /NO LOCATION COUNTER FILE EXISTS/ NOLOCS=.-NOLOC .EVEN LOCFOK: MOV #1,LOCP1 ;SE UP FIRST LOC PRINT OUT-BY LOC CALL CLCBUF ;CLEAR LOC STORAGE BUFFER MOV #-1,R1 ;CURRENT VBN-1 CLR R2 ;OFFSET POIINTER TO LOCBUF 20$: INC R1 ;NEXT VBN CMP #256.,R1 ;SEE IF FILE FULLY READ BLOS 27$ ;IF YES-PRINT OUT PARTIAL BUFFER AND DO NEXT CLR VBN MOV R1,VBN+2 ;SET UP TO INPUT NEXT VBN INC VBN+2 READ$ #LOCFIL,#IPAGE,#512.,#VBN ;INPUT NEXT SET OF LOC'S WAIT$ #LOCFIL ;WAIT TILL INPUT COMPLETE CLR R3 ;CLEAR POINTER TO NEXT LOC IN BUFFER 21$: TST IPAGE(R3) ;SEE IF LOC USED BNE 22$ ;IF SO -LOAD IN LOCBUF TST IPAGE+2(R3) ;TRY I*4 COUNT BEQ 23$ 22$: MOV R3,R5 ;GOT ADDR TO LOAD-CALC ADDR ASR R5 ;CVT FRM DOUBLE WORD MOV R1,R0 ;GET VBN-1 SWAB R0 ;GET UPPER 8 BITS BIS R0,R5 ;FULL ADDR BUILT MOV R5,LOCBUF(R2) ;LOAD ADDR MOV IPAGE(R3),LOCBUF+2(R2) ;LOAD COUNT MOV IPAGE+2(R3),LOCBUF+4(R2) ADD #6,R2 ;BUMP POINTER INTO LOCBUF CMP #6**3*2,R2;SEE IF BUF FULL BHI 23$ ;NO-DO NEXT LOC MOV R1,-(SP) ;SAVE REG'S TO PRINT OUT BUFFER MOV R3,-(SP) CALL PTLBUF ;PRINT OUT CONTENTS OF BUFFER CALL CLCBUF ;CLEAR UFFER MOV (SP)+,R3 ;RESTORE FOR FURTER ACC OF BUFFER MOV (SP)+,R1 CLR R2 ;RESET POINTER INTO OUTPUT BUFF 23$: ADD #4,R3 ;BUMP POINTER TO NEXT LOC CMP #512.,R3 ;SEE IF COMPLETED THIS BUFFER BHI 21$ BR 20$ 27$: CALL PTLBUF ;PRINT OUT PARTIAL BUFFER CLR LOCP1 ;SET FLAG- TO DO NEXT LOC TYPE OUTPUT 28$: CALL CLCBUF ;CLEAR STOIRAGE BUFFER FOR LOCATION DATA CLR R1 ;INIT POINTER TO FIRST RECORED IN THE FILE MOV R1,VBN+2;SET UP NEXT PAGE IS FIRST PAGE CLR VBN MOV #IPAGE+512.,R5;START AT END OF PREVIOUS PAGE 1$: CMP #IPAGE+512.,R5 ;END OF PAGE YET BHI 8$ ;NO-SKIP READIN INC R1 ;NEXT RECORD CMP #400,R1 ;WHOLE FILE READ YET ?? BHIS 9$ ;NO-GET NEXT PAGE JMP 10$ ;WHOLE FILE HANDLED-PRINT RESULTS 9$: CLR VBN MOV R1,VBN+2 READ$ #LOCFIL,#IPAGE,#512.,#VBN ;GET NEXT PAGE WAIT$ #LOCFIL ;WAIT TIL XFER COMPLETE MOV #IPAGE,R5 ;RESET POINTER 8$: TST (R5) ;SEE IF COUNT IS ZERO BNE 2$ ;HIGH ORDER IS NOT TST 2(R5) ;HIGH ORDER IS ZERO-CHECK LOW ORDER BEQ 3$ ;ZERO-CHECK NEXT RECORD 2$: CMP (R5),LOCBUF+<3*6**2>-6+2;SEE IF COUNT LESS THAN CURRENT ;END OF INTERNAL BUFFER BLO 3$ ;IF LOWER-IGNORE THIS TIME AROUND BGT 4$ ;IF HIGHER-HAVE IT PUT IN CMP 2(R5),LOCBUF+<3*6**2>-6+4 ;SAME-CHECK LOW ORDER BLOS 3$ ;LOWER OR SAME-SKIP IT 4$: MOV #LOCBUF+<3*6**2>-6,R3;SET UP POINTER TO BUFFER FOR INSERT 5$: MOV (R3),6(R3) ;DROP RECORD DOWN ONE SLOT MOV 2(R3),10(R3) ;ALL 3 WORDS MOV 4(R3),12(R3) CMP (R5),-4(R3) ;CHECK HIGH ORDER COUNT AGINST NEXT RECORD UP BLO 6$ ;LESS-INSERT HERE BHI 7$ ;HIGHER-KEEP SHUFFLING CMP 2(R5),-2(R3) ;CHECK LOW ORDER BHI 7$ ;HIGHER-KEEP SHUFFLING 6$: MOV R5,R0 ;LOAD THE ADDRESS(MUST BE CALCULATED) SUB #IPAGE,R0 ;GET OFFSET INTO PAGE ASR R0 ;CVT FROM DBL WORD TO WORD OFFSET MOV R1,R4 ;GET VBN NUMBER DEC R4 ;CVT TO PAGE NUMBER SWAB R4 ;CVT TO UPPER 8 BITS BIS R4,R0 ;GOT COMPLETE ADDRESS MOV R0,(R3) ;STORE ADDRESS MOV (R5),2(R3) ;STORE HIGH ORDER COUNT MOV 2(R5),4(R3) ;LOW ORDER COUNT BR 3$ 7$: SUB #6,R3 ;NEXT RECORD CHECK-BUMP POINTER UP BR 5$ ;CHECK NEXT RECORD UP 3$: ADD #4,R5 ;BUMP PAGE POINTER TO NEXT RECORD JMP 1$ ;REPEAT UNTILL FILE FULLY SCANED 10$: CALL PTLBUF ;PRINT THE BUFFER RESULTS TST LOCBUF+<3*6**2>-6;SEE IF WE USED UP ALL NO ZERO COUNTS BEQ 11$ JMP 28$ ;NO-REPEAT UNTILL USED UP 11$: CLR LINCTR ;FORCE NEW PAGE FOR NEXT PART DELET$ #LOCFIL ;CLOSE THE LOC DATA FILE JMP DOITYP ;DO THE NEXT SECTION .PAGE .SBTTL UTILITIES FOR LOCATION EVALUATION .SBTTL CLEAR THE LOC COUNT BUFFER CLCBUF: MOV #LOCBUF,R0 MOV #3*6*+3,R1 1$: CLR (R0)+ SOB R1,1$ RETURN .SBTTL PRINT THE CONTENTS OF THE LOC COUNT BUFFER L1TIT: .ASCII <14>/PROGRAM LOCATION USEAGE TABLE BY LOCATION PAGE / L1PAGE: .ASCII / / L1TSIZ=.-L1TIT LTITLE: .ASCII <14>/PROGRAM LOCATION USEAGE TABLE SORTED BY COUNT PAGE / ;THE TITLE LINE LPAGE: .ASCII / / LTSIZ=.-LTITLE .EVEN LLINE: .BLKB 132. ;DATA LINE PTLBUF: MOV #LOCBUF,R5 ;POINTER TO RECORD IN LOC BUFFER MOV #,R4 ;MAX LINES CLR LINCTR ;FORCE NEW PAGE MOV #LOCBUF+<3*6**2>-6,R0 ;FIND NUMBER OF ENTRIES-POINT TO ENDO BUFFER MOV #6*,R1 ;COUNT CLR 6(R0) ;CLEAR TRAILER ENTRY-AS FLAG FOR LATER PROCESSING 6$: TST (R0) ;SEE IF ZERO ADDR BNE 7$ ;IF NOT-BOTTOM OF DATA SUB #6,R0 ;DEC TO NEXT ENTRY SLOT UP SOB R1,6$ ; NO ENTRIES-JUST QUIT RETURN 7$: CLR R0 ;GET NO OF LINES ON PAGE DIV #6,R0 TST R1 ;IF REMAINDER-ADD 1 LINE BEQ 8$ INC R0 8$: MOV #LOCBUF,R5 ; CALCULATE OFF SET/NEXT ENTRY (*6) ASL R0 ;*2 MOV R0,R4 ASL R0 ;*4 ADD R0,R4 ;*4+*2=*6 ; GET FIRST OF 6 ENTRIES ACCROSS LINE 10$: MOV #LLINE,R1 ;SET UP TO CLEAR LINE MOV #132.,R0 5$: MOVB #40,(R1)+ SOB R0,5$ MOV #LLINE,R3 MOV R5,-(SP) ;SAVE CURRENT POINTER INTO LOCATION BUFFER MOV (R5),R1 BNE 9$ 15$: ADD #2,SP ;CLEAN UP THE STACK JMP 2$ ;EMPTY LINE-DONE WITH PRINT OUT OF THIS BUFFER 9$: MOV R4,R2 ;CHECK FOR END OF TABLE ADD #LOCBUF,R2 CMP R2,R5 BLOS 15$ CALL BINOCT ;CVT BINARY ADRESS TO OCTAL ASCII IN LINE MOV #LLINE+7,R3;SET UP TO OUTPUT THE COUNT MOV 2(R5),R1 ;HIGH ORDER COUNT MOV 4(R5),R2 ;LOW ORDER COUNT CALL I4DEC ;CVT TO DECIMAL ASCII ADD R4,R5 ;NEXT ENTRY MOV (R5),R1 BNE 11$ JMP 50$ 11$: MOV #LLINE+20.,R3 CALL BINOCT MOV #LLINE+27.,R3 MOV 2(R5),R1 MOV 4(R5),R2 CALL I4DEC ADD R4,R5 ;3RD ENTRY MOV (R5),R1 BNE 12$ JMP 50$ 12$: MOV #LLINE+40.,R3 CALL BINOCT MOV #LLINE+47.,R3 MOV 2(R5),R1 MOV 4(R5),R2 CALL I4DEC ADD R4,R5 ;4TH ENTRY MOV (R5),R1 BNE 13$ JMP 50$ 13$: MOV #LLINE+60.,R3 CALL BINOCT MOV #LLINE+67.,R3 MOV 2(R5),R1 MOV 4(R5),R2 CALL I4DEC ADD R4,R5 ;5TH ENTRY MOV (R5),R1 BNE 14$ JMP 50$ 14$: MOV #LLINE+80.,R3 CALL BINOCT MOV #LLINE+87.,R3 MOV 2(R5),R1 MOV 4(R5),R2 CALL I4DEC ADD R4,R5 ;6TH ENTRY MOV (R5),R1 BEQ 50$ MOV #LLINE+100.,R3 CALL BINOCT MOV #LLINE+107.,R3 MOV 2(R5),R1 MOV 4(R5),R2 CALL I4DEC 50$: TST LINCTR ;SEE IF PAGE FULL BGT 3$ ;IF NOT-SKIP NEW PAGE STUFF INC PAGCTR ;NEXT PAGE TST LOCP1 BEQ 80$ MOV #L1PAGE,R3 MOV PAGCTR,R1 CALL I2DEC PUT$ #RESFIL,#L1TIT,#L1TSIZ BR 81$ 80$: MOV #LPAGE,R3 ;SET UP TO ENCODE THE PAGE NUMBER MOV PAGCTR,R1 ;GET PAGE NUMBER CALL I2DEC ;CONVERT TO DECIMAL ASCII PUT$ #RESFIL,#LTITLE,#LTSIZ ;PRINT TITLE 81$: PUT$ #RESFIL,#DATLIN,#DATSIZ ;PRINT RUN INFORMATION PUT$ #RESFIL,#BLNKLN,#1 ;BLANK SEPERATOR LINE MOV #LINPAG-3,LINCTR ;RESET LINE COUNTER 3$: PUT$ #RESFIL,#LLINE,#120. ;PRINT LOCATIOAN COUNTER LINE MOV (SP)+,R5 ;RESET R5 DEC LINCTR ADD #6,R5 ;BUMP R5 TO NEXT STARTER ENTRY JMP 10$ ;NEXT LINE 2$: ;PRINT OU COMPLETE-ZERO ENTRIES IN DATA FILE TST LOCP1 BNE 70$ MOV #LOCBUF,R5 MOV #6*,R4 60$: MOV (R5),R1 ;GET ADDR TO BE CLEARED BEQ 70$ ;IF ZERO-DONE CLR R0 ;CLR LOC TO CONTAIN HIGH ORDER BITS ASHC #8.,R0 ;GET VBN-1 INC R0 ;VBN MOV R0,-(SP) ;SAVE VBN MOV R0,VBN+2 ;STORE CLR VBN ;ZERO HIGH RDER READ$ #LOCFIL,#IPAGE,#512.,#VBN ;GET PAGE WAIT$ #LOCFIL MOV (R5),R1 ;GE OFFSET ASL R1 ;CVT TO DOUBLE WORDS BIC #177000,R1 ;LOP OF HIGH ORDER BITS CLR IPAGE(R1) ;ZERO COUNTS CLR IPAGE+2(R1) CLR VBN ;SET UP FOR WRITE OUT MOV (SP)+,VBN+2 ;VBN NO WRITE$ #LOCFIL,#IPAGE,#512.,#VBN WAIT$ #LOCFIL ADD #6,R5 ;NEXT ENTRY JMP 60$ ;REPEAT LOOP 70$: RETURN .SBTTL BINARY TO OCTAL ASCII BINOCT: CLR R0 MOV #6,R2 ASHC #1,R0 BR 2$ 1$: CLR R0 ASHC #3,R0 2$: ADD #60,R0 MOVB R0,(R3)+ SOB R2,1$ RETURN .SBTTL INTEGER*4 BINARY TO ASCII DECIMAL I4DEC: ADD #10.,R3 SETL SETD MOV R2,-(SP) MOV R1,-(SP) LDCLD (SP)+,A0 SETI MOV #10.,R2 1$: DIVF #^F10.,A0 MODF #^F1.,A0 MULF #^F10.,A0 STCFI A0,R0 STF A1,A0 ADD #60,R0 MOVB R0,-(R3) SOB R2,1$ MOV #9.,R2 2$: CMPB #'0,(R3) BNE 3$ MOVB #40,(R3)+ SOB R2,2$ 3$: SETF RETURN .SBTTL INTEGER*2 BINARY TO ASCII DECIMAL I2DEC: ADD #5.,R3 SETI SETF LDCIF R1,A0 MOV #5,R2 1$: DIVF #^F10.,A0 MODF #^F1.,A0 MULF #^F10.,A0 STCFI A0,R0 STF A1,A0 ADD #60,R0 MOVB R0,-(R3) SOB R2,1$ MOV #4.,R2 2$: CMPB #'0,(R3) BNE 3$ MOVB #40,(R3)+ SOB R2,2$ 3$: RETURN .PAGE .SBTTL MACROS USED TO EVALUATE INSTRUCTIONS .SBTTL SINGLE WORD-NO ARGUMANTES TYPE .MACRO INOA NAME,BINARY,?A,?B,?C,?D,?E MOV #BINARY,R1 ;GET VBN-OFFSET CALL VBNOFF ;CALL UTILITY ROUTINE ;R0 IS VBN-(VBN IS ALREADY SET UP) ;R1 IS OFFSET INTO IPAGE ;IPAGE CONTAINS THE PAGE MOV IPAGE(R1),TCOUNT;LOAD COUNT MOV IPAGE+2(R1),TCOUNT+2 TST TCOUNT ;IF COUNT IS ZERO BNE E ;DON'T BOTHER PRINTING IT OUT TST TCOUNT+2 BEQ C E: MOV #B,R5 ;SET UP CALL TO PRINT OUT ROUTINE CALL PRTNOA ;PRINT THIS INSTRUCTIONS USEAGE B: BR C .WORD D .NCHR I, D: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TOO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC C: .ENABL LSB .ENDM INOA .SBTTL INSTRUCTION HAS 1 SRC .MACRO I1SRC NAME,BINARY,?A,?B,?D,?C CALL CLRWRK ;CLEAR TEMP WORK AREA CLR TCOUNT CLR TCOUNT+2 MOV #BINARY,R1 CALL VBNOFF ;GET ALL INSTRUCTION IN MEMORY PAGE CALL EVLSRC ;EVALUATE SOURCE MODE INSTR ;CALLED R1 CONTAINS OFFSET TO FIRST COUNTER OF ;SOURCE INSTRUCTION IN PAGE. ;R1 IS USED TST TCOUNT ;WAS THIS INSTRUCTION USED BNE C TST TCOUNT+2 BEQ A ;IF NOT-DONT PRINT OUT C: MOV #B,R5 ;PRINT OUT THE INSTRUCTION CALL P1SRC B: BR A .WORD D .NCHR I, D: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC A: .ENABL LSB .ENDM I1SRC .SBTTL INSTRUCTION HAS 1 DST .MACRO I1DST NAME,BINARY,?A,?B,?D,?C CALL CLRWRK ;CLEAR TEMP WORK AREA CLR TCOUNT CLR TCOUNT+2 MOV #BINARY,R1 CALL VBNOFF ;GET ALL INSTRUCTION IN MEMORY PAGE CALL EVLDST ;EVALUATE DESTINATION MODE INSTR ;CALLED R1 CONTAINS OFFSET TO FIRST COUNTER OF ;SOURCE INSTRUCTION IN PAGE. ;R1 IS USED TST TCOUNT ;WAS THIS INSTRUCTION USED BNE C TST TCOUNT+2 BEQ A ;IF NOT-DONT PRINT OUT C: MOV #B,R5 ;PRINT OUT THE INSTRUCTION CALL P1DST B: BR A .WORD D .NCHR I, D: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC A: .ENABL LSB .ENDM I1DST .SBTTL INSTRUCTON WITH LAST 8 BITS NOT CONSIDERED(EMT/TRAP/BRANCHES) ; FILE UESES 2 PAGES FOR EACH INSTRUCTION .MACRO I8BIT NAME,BINARY,?A,?B,?C,?D,?E CLR TCOUNT ;CLEAR COUNTER CLR TCOUNT+2 MOV #BINARY,R1 ;GET FIRST PAGE OF INSTRUCTION USEAGE CALL VBNOFF ;GET PAGE CALL SUMPAG ;SUMM USEAGES ON PAGE MOV #BINARY+128.,R1 ;SET UP FOR SECOND PAGE CALL VBNOFF ;NEXT PAGE CALL SUMPAG ;SUM IT UP TST TCOUNT ;SEE IF USED BNE A TST TCOUNT+2 BEQ D A: MOV #C,R5 ;OUTPUT NAME AND USEES CALL PRTNOA C: BR D .WORD E .NCHR I, E: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM I8BIT .SBTTL 2 ARGUMENT (SRC/DST) INSTRUCTIONS .MACRO I2ASD NAME,BINARY,?A,?B,?C,?D,?E CALL CLRWRK ;CLEAR WORKING STORAGE AREA MOV #BINARY,R1 CALL EVL2A ;EVALUATE THIS INSTRUCTION MOV #WORK,R0 ;SEE IF THIS INSTRUCTION WAS USED MOV #64.,R1 CLR TCOUNT CLR TCOUNT+2 A: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,A ;REPAET UNTILL FOUND OR DONE TST TCOUNT BNE B TST TCOUNT+2 BEQ C B: MOV #D,R5 ;PRITN OUT INSTRUCTION NAME CALL PRT2A ;PRINT IT OUT D: BR C .WORD E .NCHR I, E: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC C: .ENABL LSB .ENDM .SBTTL INSTRUCTION WITH 6 BITS TO IFGNORE-MARK .MACRO I6BIT NAME,BINARY,?A,?B,?C,?D,?E CLR TCOUNT ;THIS IS JUST A QUICK ACCUMULATION CLR TCOUNT+2 MOV #BINARY,R1 ;GET THE PROPER PAGE IN MEMORY CALL VBNOFF MOV #64.,R2 ;64 POSABLE VALUES A: ADD IPAGE+2(R1),TCOUNT+2 ADC TCOUNT ADD IPAGE(R1),TCOUNT SOB R2,A TST TCOUNT ;SEE IF NEED TO PRINT OUT THE COUNT BNE B TST TCOUNT+2 BEQ C B: MOV #D,R5 CALL PRTNOA D: BR C .WORD E .NCHR I, E: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC C: .ENABL LSB .ENDM I6BIT .SBTTL REGESTER ONLY INSTRUCTIONS (RTS/FADD-ETC) ALL REGS CONSIDERD SOURCE MODE 0 .MACRO IREG NAME,BINARY,?A,?B,?C,?D,?E CLR TCOUNT ;ACCUM COUNTER FOR ALL USES CLR TCOUNT+2 CALL CLRWRK MOV #BINARY,R1 ;GET PAGE CALL VBNOFF MOV #8.,R0 ;REPET BASIC LOOP 8 TIMES-1 EACH REGESTER CLR R2 ;OFFSET INTO ACCREG AND WORK A: MOV IPAGE(R1),WORK(R2) ;LOAD WORK FILE DIRECTLY MOV IPAGE+2(R1),WORK+2(R2) ADD IPAGE+2(R1),ACCREG+2(R2) ;SUMM INTO ACCREG COUNTERS ADC ACCREG(R2) ADD IPAGE(R1),ACCREG(R2) ADD IPAGE+2(R1),TCOUNT+2 ;FLAG THAT INSTR WS USED ADC TCOUNT ADD IPAGE(R1),TCOUNT ADD #4,R1 ;BUMP POINTERS ADD #4,R2 SOB R0,A ;REPEAT UNTILL DONE TST TCOUNT ;SEE IF PRINT OUT NEEDED BNE E TST TCOUNT+2 BEQ B E: MOV #C,R5 ;PRINT OUT DATA CALL PRTREG ;PRINT REGESTER USEAGE C: BR B .WORD D .NCHR I, D: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC B: .ENABL LSB .ENDM IREG .SBTTL INSTRUCTION HAS REGESTER AND FULL DESTINATION .MACRO IRDST NAME,BINARY,?A,?B,?C,?D,?E,?F CALL CLRWRK ;CLEAR THE WORK AREA ; SET UP FOR EVALUATEING EACH REGESTERS FULL SET OF MODES MOV #BINARY,-(SP) CLR -(SP) ;POINTER TO SOURCE PART OF ACCREG AND WORK MOV #8.,-(SP) ;FOR EACH OF THE 8 REG A: MOV 4(SP),R1 ;GET INSTR FOR THIS TIME THROUGH LOOP CALL VBNOFF ;GET THE PAGE CLR TCOUNT CLR TCOUNT+2 CALL EVLDST ;GET DEST MODE INFO FOR THIS REG MOV 2(SP),R0 ;GET OFFSET FOR MODE 0 SOURCE ADD TCOUNT+2,ACCREG+2(R0) ADC ACCREG(R0) ;ADD IN COUNT ADD TCOUNT,ACCREG(R0) MOV TCOUNT+2,WORK+2(R0) ;UPDATE THE WORK ARRAY MOV TCOUNT,WORK(R0) ADD #100,4(SP) ;UPDATE INSTR BINARY TO NEXT REG ADD #4,2(SP) ;OFFSET POINTER FOR SOURCE DEC (SP) ;SEE IF DONE BGT A ;IF NOT REPEAT ADD #6,SP ;CLEAN UP STACK ; SEE IF ANY INSTRUCTION USES WERE FOUND-SEE IF NON ZERO COUNT IN WORK MOV #WORK,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 B: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,B TST TCOUNT BNE C TST TCOUNT+2 BEQ D ;NOT USED-DONT PRINT OUT C: MOV #E,R5 CALL PRGDST E: BR D .WORD F .NCHR I, F: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TOO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM IRDST .SBTTL INSTRUCTION HAS REG AND FULL SOURCE .MACRO IRSRC NAME,BINARY,?A,?B,?C,?D,?E,?F CALL CLRWRK ;CLEAR THE WORK AREA ; SET UP FOR EVALUATEING EACH REGESTERS FULL SET OF MODES MOV #BINARY,-(SP) MOV #256.,-(SP) ;POINTER TO DST PART OF ACCREG AND WORK MOV #8.,-(SP) ;FOR EACH OF THE 8 REG A: MOV 4(SP),R1 ;GET INSTR FOR THIS TIME THROUGH LOOP CALL VBNOFF ;GET THE PAGE CLR TCOUNT CLR TCOUNT+2 CALL EVLSRC ;GET SRC MODE INFO FOR THIS REG MOV 2(SP),R0 ;GET OFFSET FOR MODE 0 DST ADD TCOUNT+2,ACCREG+2(R0) ADC ACCREG(R0) ;ADD IN COUNT ADD TCOUNT,ACCREG(R0) MOV TCOUNT+2,WORK+2(R0) ;UPDATE THE WORK ARRAY MOV TCOUNT,WORK(R0) ADD #100,4(SP) ;UPDATE INSTR BINARY TO NEXT REG ADD #4,2(SP) ;OFFSET POINTER FOR SOURCE DEC (SP) ;SEE IF DONE BGT A ;IF NOT REPEAT ADD #6,SP ;CLEAN UP STACK ; SEE IF ANY INSTRUCTION USES WERE FOUND-SEE IF NON ZERO COUNT IN WORK MOV #WORK+256.,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 B: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,B TST TCOUNT BNE C TST TCOUNT+2 BEQ D ;NOT USED-DONT PRINT OUT C: MOV #E,R5 CALL PRGSRC E: BR D .WORD F .NCHR I, F: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TOO LARGE .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM IRSRC .SBTTL INSTRUCTION HAS REG AND 6 BITS TO BE IGNORED(SOB) .MACRO IR6BIT NAME,BINARY,?A,?B,?C,?D,?E,?F,?G CALL CLRWRK MOV #BINARY,-(SP) ;SET UP STACK FOR SUMMATION LOOP ON EACH REG CLR -(SP) ;ENTRY INTO ACCREG AND WORK MOV #8.,-(SP) ;SET UP LOOP COUNTER A: CLR TCOUNT ;CLR COUNTERS CLR TCOUNT+2 MOV 4(SP),R1 ;GET PAGE INTO MEMORY CALL VBNOFF MOV #64.,R2 ;SUMM UP 64 POSSABLE INSTR FOR THIS REG B: ADD IPAGE+2(R1),TCOUNT+2 ADC TCOUNT ADD IPAGE(R1),TCOUNT ADD #4,R1 SOB R2,B MOV 2(SP),R2 ;STORE RESULTS OF THIS REG SUMMATION MOV TCOUNT,WORK(R2) MOV TCOUNT+2,WORK+2(R2) ADD TCOUNT+2,ACCREG+2(R2) ADC ACCREG(R2) ADD TCOUNT,ACCREG(R2) ; UPDATE THE COUNTERS/POINTERS ADD #4,2(SP) ADD #100,4(SP) DEC (SP) BGT A ADD #6,SP ;CLEAN UP THE STACK ; SEE IF PRINT OUT NEEDED MOV #WORK,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 C: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,C TST TCOUNT BNE D TST TCOUNT+2 BEQ E ; NO USEAGE-NO PRINTOUT D: MOV #F,R5 CALL PRTREG F: BR E .WORD G .NCHR I, G: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TOO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC E: .ENABL LSB .ENDM IR6BIT .SBTTL INSTRUCTION WITH FLOATNG DESTINATION .MACRO IFDST NAME,BINARY,?A,?B,?C,?D,?E,?F,?G CLR TCOUNT CLR TCOUNT+2 CALL CLRWRK MOV #BINARY,R1 CALL VBNOFF CALL EVFDST TST TCOUNT BNE A TST TCOUNT+2 BEQ B A: MOV #C,R5 CALL P1DST C: BR B .WORD D .NCHR I, D: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC B: .ENABL LSB .ENDM IFDST .SBTTL ISTRUCTION HAS ACCUMULATOR PLUSS FLOATING SOURCE .MACRO IAFSRC NAME,BINARY,?A,?B,?C,?D,?E,?F,?G CALL CLRWRK ;CLEAR WORL AREA ; SET UP THE STACKFOR A AC BY AC SUMMATION OF SRC MODES MOV #BINARY,-(SP) MOV #32.,-(SP) ;ACCUM STORAGE OFFSET MOV #256.,-(SP) ;WORK STORAGE OFFSET MOV #4,-(SP) ;COUNTER A: CLR TCOUNT CLR TCOUNT+2 MOV 6(SP),R1 CALL VBNOFF CALL EVFSRC ;COUNT SOURCES FOR THIS DST MOV 2(SP),R0 MOV TCOUNT,WORK(R0) MOV TCOUNT+2,WORK+2(R0) MOV 4(SP),R0 ADD TCOUNT+2,ACCFPR+2(R0) ADC ACCFPR(R0) ADD TCOUNT,ACCFPR(R0) ADD #100,6(SP) ;BUMP ALL POINTERS AND COUNTERS ADD #4,4(SP) ADD #4,2(SP) DEC (SP) BGT A ADD #8.,SP ;CLEAN UP THE STACK ; SE IF INSTR USED SO MUST PRINT OUT MOV #WORK+256.,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 B: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,B TST TCOUNT BNE C TST TCOUNT+2 BEQ D C: MOV #E,R5 CALL PRGSRC E: BR D .WORD F .NCHR I, F: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM IAFSRC .SBTTL ISTRUCTION HAS ACCUMULATOR PLUSS FLOATING DEST .MACRO IAFDST NAME,BINARY,?A,?B,?C,?D,?E,?F,?G CALL CLRWRK ;CLEAR WORL AREA ; SET UP THE STACKFOR A AC BY AC SUMMATION OF DST MODES MOV #BINARY,-(SP) CLR -(SP) ;ACCUM STORAGE OFFSET CLR -(SP) ;WORK STORAGE OFFSET MOV #4,-(SP) ;COUNTER A: CLR TCOUNT CLR TCOUNT+2 MOV 6(SP),R1 CALL VBNOFF CALL EVFDST ;COUNT SOURCES FOR THIS DST MOV 2(SP),R0 MOV TCOUNT,WORK(R0) MOV TCOUNT+2,WORK+2(R0) MOV 4(SP),R0 ADD TCOUNT+2,ACCFPR+2(R0) ADC ACCFPR(R0) ADD TCOUNT,ACCFPR(R0) ADD #100,6(SP) ;BUMP ALL POINTERS AND COUNTERS ADD #4,4(SP) ADD #4,2(SP) DEC (SP) BGT A ADD #8.,SP ;CLEAN UP THE STACK ; SE IF INSTR USED SO MUST PRINT OUT MOV #WORK,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 B: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,B TST TCOUNT BNE C TST TCOUNT+2 BEQ D C: MOV #E,R5 CALL PRGDST E: BR D .WORD F .NCHR I, F: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM IAFDST .SBTTL ISTRUCTION HAS ACCUMULATOR PLUS SOURCE .MACRO IASRC NAME,BINARY,?A,?B,?C,?D,?E,?F,?G CALL CLRWRK ;CLEAR WORL AREA ; SET UP THE STACKFOR A AC BY AC SUMMATION OF SRC MODES MOV #BINARY,-(SP) MOV #32.,-(SP) ;ACCUM STORAGE OFFSET MOV #256.,-(SP) ;WORK STORAGE OFFSET MOV #4,-(SP) ;COUNTER A: CLR TCOUNT CLR TCOUNT+2 MOV 6(SP),R1 CALL VBNOFF CALL EVLSRC ;COUNT SOURCES FOR THIS DST MOV 2(SP),R0 MOV TCOUNT,WORK(R0) MOV TCOUNT+2,WORK+2(R0) MOV 4(SP),R0 ADD TCOUNT+2,ACCFPR+2(R0) ADC ACCFPR(R0) ADD TCOUNT,ACCFPR(R0) ADD #100,6(SP) ;BUMP ALL POINTERS AND COUNTERS ADD #4,4(SP) ADD #4,2(SP) DEC (SP) BGT A ADD #8.,SP ;CLEAN UP THE STACK ; SE IF INSTR USED SO MUST PRINT OUT MOV #WORK+256.,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 B: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,B TST TCOUNT BNE C TST TCOUNT+2 BEQ D C: MOV #E,R5 CALL PRGSRC E: BR D .WORD F .NCHR I, F: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM IASRC .SBTTL ISTRUCTION HAS ACCUMULATOR PLUS DESTINATION .MACRO IADST NAME,BINARY,?A,?B,?C,?D,?E,?F,?G CALL CLRWRK ;CLEAR WORL AREA ; SET UP THE STACKFOR A AC BY AC SUMMATION OF SRC MODES MOV #BINARY,-(SP) CLR -(SP) ;ACCUM STORAGE OFFSET CLR -(SP) ;WORK STORAGE OFFSET MOV #4,-(SP) ;COUNTER A: CLR TCOUNT CLR TCOUNT+2 MOV 6(SP),R1 CALL VBNOFF CALL EVLDST ;COUNT SOURCES FOR THIS DST MOV 2(SP),R0 MOV TCOUNT,WORK(R0) MOV TCOUNT+2,WORK+2(R0) MOV 4(SP),R0 ADD TCOUNT+2,ACCFPR+2(R0) ADC ACCFPR(R0) ADD TCOUNT,ACCFPR(R0) ADD #100,6(SP) ;BUMP ALL POINTERS AND COUNTERS ADD #4,4(SP) ADD #4,2(SP) DEC (SP) BGT A ADD #8.,SP ;CLEAN UP THE STACK ; SE IF INSTR USED SO MUST PRINT OUT MOV #WORK,R0 MOV #8.,R1 CLR TCOUNT CLR TCOUNT+2 B: ADD 2(R0),TCOUNT+2 ADC TCOUNT ADD (R0),TCOUNT ADD #4,R0 SOB R1,B TST TCOUNT BNE C TST TCOUNT+2 BEQ D C: MOV #E,R5 CALL PRGDST E: BR D .WORD F .NCHR I, F: .ASCII /'NAME'/ .IIF LT,14.-I, .ERROR ;NAME TO LONG .IF GT,14.-I .REPT <14.-I> .ASCII / / .ENDR .ENDC D: .ENABL LSB .ENDM IADST .PAGE .SBTTL EVALUATE EXECUTED INSTRUCTION DATA DOITYP: OPEN$U #INSFIL ;OPEN FILE OF INSTRUCTION USE COUNTS BCC INSFOK ;SEE IF FILE EXISTS QIOW$S #IO.WLB,#5,#1,,,,<#NOINS,#NOINSS,#40> ;NO FILE JMP FINISH ;SHUT DOWN CLEANLY NOINS: .ASCII /NO INSTRUCTION USE COUNTER FILE EXISTS/ NOINSS=.-NOINS .EVEN INSFOK: MOV #ACCREG,R0 ;ZERO TOTAL PROGRM USEAGE COUNTERS MOV #256.,R1 ;REGESTER USEAGE 1$: CLR (R0)+ SOB R1,1$ MOV #ACCFPR,R0 MOV #32.,R1 ;ZERO TOTAL ACCUMULATOR USEAGE 2$: CLR (R0)+ SOB R1,2$ CLR PCOUNT CLR PCOUNT+2 ; EVALUATE EACH INSTRUCTION IFDST ABSF,170600 I1DST ADC,5500 I1DST ADCB,105500 I2ASD ADD,60000 IAFSRC ADDF,172000 INOA ADDN,76050 INOA ADDNI,76150 INOA ADDP,76070 INOA ADDPI,76170 IRSRC ASH,72000 IRSRC ASHC,73000 INOA ASHN,76056 INOA ASHNI,76156 INOA ASHP,76076 INOA ASHPI,76176 I1DST ASL,6300 I1DST ASLB,106300 I1DST ASR,6200 I1DST ASRB,106200 I8BIT ,103000 I8BIT ,103400 I8BIT BEQ,1400 I8BIT BGE,2000 I8BIT BGT,3000 I8BIT BHI,101000 I8BIT BHIS,103000 I2ASD BIC,40000 I2ASD BICB,140000 I2ASD BIS,50000 I2ASD BISB,150000 I2ASD BIT,30000 I2ASD BITB,130000 I8BIT BLE,3400 I8BIT BLO,103400 I8BIT BLOS,101400 I8BIT BLT,2400 I8BIT BMI,100400 I8BIT BNE,1000 I8BIT BPL,100000 INOA BPT,3 I8BIT BR,400 I8BIT BVC,102000 I8BIT BVS,102400 INOA CFCC,170000 INOA CLC,241 INOA CLV,242 INOA ,243 INOA CLZ,244 INOA ,245 INOA ,246 INOA ,247 INOA CLN,250 INOA ,251 INOA ,252 INOA ,253 INOA ,254 INOA ,255 INOA ,256 INOA CCC,257 I1DST CLR,5000 I1DST CLRB,105000 IFDST CLRF,170400 I2ASD CMP,20000 I2ASD CMPB,120000 INOA CMPC,76044 INOA CMPCI,76144 IAFSRC CMPF,173400 INOA CMPN,76052 INOA CMPNI,76152 INOA CMPP,76072 INOA CMPPI,76172 I1DST COM,5100 I1DST COMB,105100 I1DST CSM,7000 INOA CVTLN,76057 INOA CVTLNI,76157 INOA CVTLP,76077 INOA CVTLPI,76177 INOA CVTNL,76053 INOA CVTNLI,76153 INOA CVTNP,76055 INOA CVTNPI,76155 INOA CVTPL,76073 INOA CVTPLI,76173 INOA CVTPN,76054 INOA CVTPNI,76154 I1DST DEC,5300 I1DST DECB,105300 IRSRC DIV,71000 IAFSRC DIVF,174400 INOA DIVP,76075 INOA DIVPI,76175 I8BIT EMT,104000 IREG FADD,75000 IREG FDIV,75030 IREG FMUL,75020 IREG FSUB,75010 INOA HALT,0 I1DST INC,5200 I1DST INCB,105200 INOA IOT,4 I1DST JMP,100 IRDST JSR,4000 IAFSRC LDCFD,177400 IASRC LDCIF,177000 IASRC LDEXP,176400 IAFSRC LDF,172400 I1SRC LDFPS,170100 INOA LDUB,170003 INOA LOCC,76040 INOA LOCCI,76140 IREG L2DR,76020 IREG L3DR,76060 I6BIT MARK,6400 INOA MATC,76045 INOA MATCI,76145 INOA MED,76600 I1SRC MFPD,106500 I1SRC MFPI,6500 I1DST MFPS,106700 INOA MFPT,7 INOA MNS,170004 IAFSRC MODF,171400 I2ASD MOV,10000 I2ASD MOVB,110000 INOA MOVC,76030 INOA MOVCI,76130 INOA MOVRC,76031 INOA MOVRCI,76131 INOA MOVTC,76032 INOA MOVTCI,76132 INOA MPP,170005 I1DST MTPD,106600 I1DST MTPI,6600 I1SRC MTPS,106400 IRSRC MUL,70000 IAFSRC MULF,171000 INOA MULP,76074 INOA MULPI,76174 I1DST NEG,5400 I1DST NEGB,105400 IFDST NEGF,170700 INOA NOP(CLR),240 INOA NOP(SET),260 INOA RESET,5 I1DST ROL,6100 I1DST ROLB,106100 I1DST ROR,6000 I1DST RORB,106000 INOA RTI,2 IREG RTS,200 INOA RTT,6 I1DST SBC,5600 I1DST SBCB,105600 INOA SCANC,76042 INOA SCANCI,76142 INOA SEC,261 INOA SEV,262 INOA ,263 INOA SEZ,264 INOA ,265 INOA ,266 INOA ,267 INOA SEN,270 INOA ,271 INOA ,272 INOA ,273 INOA ,274 INOA ,275 INOA ,276 INOA SCC,277 INOA SETD,170011 INOA SETF,170001 INOA SETI,170002 INOA SETL,170012 INOA SKPC,76041 INOA SKPCI,76141 INOA SPANC,76043 INOA SPANCI,76143 IR6BIT SOB,77000 INOA ,230 INOA ,231 INOA ,232 INOA ,233 INOA ,234 INOA ,235 INOA ,236 INOA ,237 IAFDST STCDF,176000 IADST STCFI,175400 IADST STEXP,175000 IAFDST STF,174000 I1DST STFPS,170200 I1DST STST,170300 I2ASD SUB,160000 IAFSRC SUBF,173000 INOA SUBN,76051 INOA SUBNI,76151 INOA SUBP,76071 INOA SUBPI,76171 I1DST SWAB,300 I1DST SXT,6700 I8BIT TRAP,104400 I1DST TST,5700 I1DST TSTB,105700 IFDST TSTF,170500 INOA WAIT,1 I6BIT XFC,76700 IRDST XOR,74000 .DSABL LSB ; ACCUMULATION COMPLETE, ALL INDICIDUAL INSTRUCTIONS HAVE BEEN ; PRINTED OUT- NOW IS THE TIME ; TO OUT PUT THE GENEL REGESTER USEAGE DATA CLR LINCTR ;FORCE A NEW PAGE MOV #ICT,R3 MOV PCOUNT,R1 MOV PCOUNT+2,R2 CALL I4DEC MOV #INSCNT,R1 MOV #ICTLEN,R2 CALL PSLINE CALL PRTBLK MOV #PUSE,R1 ;OUPUT TITLE FOR WHOEPROG DATA MOV #PUSIZ,R2 CALL PSLINE MOV #ACCREG,R5 ;OUT PUT THE SOURCE INFO CALL PRTSRC MOV #ACCREG+256.,R5 ;DITTO FOR DEST CALL PRTDST CALL PRTBLK MOV #ACCFPR,R1 MOV #32.,R2 3$: TST (R1)+ BNE 4$ SOB R2,3$ BR 5$ 4$: MOV #FPUSE,R1 ;NEXT IS THE FPU ACCUM USEAGE MOV #FPUSIZ,R2 CALL PSLINE MOV #FPSRC,R1 MOV #FPSSIZ,R2 CALL PSLINE MOV #ACCFPR,R5 ;RT SRC CALL REGOUT MOV #FPDST,R1 ;REPEAT FOR DESTINATION MOV #FPDSIZ,R2 CALL PSLINE MOV #ACCFPR+32.,R5 CALL REGOUT 5$: DELET$ #INSFIL ;DELETE THE DATA FILE FINISH: PRINT$ #RESFIL ;CLOSE THE OUTPUT FILE EXIT$S ;QUIT-DONE INSCNT: .ASCII /INSTRUCTIONS EXECUTED / ICT: .ASCII / / ICTLEN=.-INSCNT PUSE: .ASCII /PROGRAM CPU REGESTER USEAGE SUMMARY/ PUSIZ=.-PUSE FPUSE: .ASCII /PROGRAM FPU REGESTER USEAGE SUMMARY/ FPUSIZ=.-FPUSE FPSRC: .ASCII / SOURCE ACCUMULATOR USEAGE/ FPSSIZ=.-FPSRC FPDST: .ASCII / DESTINATION ACCUMULATOR USEAGE/ FPDSIZ=.-FPDST .EVEN .PAGE .SBTTL UTILITY ROUTINES FOR INSTRUCTION SUMMARY .SBTTL INSERT BLANK LINE IF 1 OR MORE LINES REMAINE PRTBLK: CMP #1,LINCTR ;SEE IF NEED TO PUT IN BLANK BGT 1$ ;IF NO DONT PUT$ #RESFIL,#BLNKLN,#1 ;OUPUT BLANK LINE DEC LINCTR ;BUMP COUNTER 1$: RETURN .SBTTL CLEAR TEMP WORK AREA FOR EACH INSTRUCTION CLRWRK: MOV #WORK,R0 MOV #512.,R1 1$: CLR (R0)+ SOB R1,1$ RETURN .SBTTL GET FIRST INSTRUCTION LOC IN R1-RETURN VBN IN R0 & VBN .SBTTL R1 CONTAINS OFFSET,IPAGE CONTAINS WANTED PAGE VBNOFF: CLR R0 ;CLEAR VBN NUMBER ASHC #9.,R0 ;SHIFT OUT HIGH ORDER BITS ASH #-7.,R1 ;LOW ORDER 9 BITS CONTIAN THE OFFSET BIC #177000,R1 INC R0 ;BUMP TO VBN CLR VBN MOV R0,VBN+2;LOAD VBN MOV R0,-(SP);SAVE VBN READ$ #INSFIL,#IPAGE,#512.,#VBN WAIT$ #INSFIL MOV (SP)+,R0 ;RESTORE VBN TO R0 RETURN .SBTTL PRINT INFO LINE FOR INSTRUCTION WITH NO ARGUMENTS ; CALLED CALL PRTNOA ; R5 POINTS TO ARGUMENT LIST-FORTRAN STANDARD ; FIRST ARGUNET IS COUNT I*4 ; SECOND ARGUMNT IS NAME OF INSTRUCTION IN ASCII-14 CHRS LONG PNMCT: MOV TCOUNT,R1 ;GET THE COUNT MOV TCOUNT+2,R2 ADD R2,PCOUNT+2 ADC PCOUNT ADD R1,PCOUNT MOV #ILINE+15.,R3 CALL I4DEC ;ENCODE THE COUNT MOV 2(R5),R1 MOV #14.,R0 MOV #ILINE,R2 1$: MOVB (R1)+,(R2)+ ;COPY THE INSTRUCTION ASCII NAME MOVB #40,(R2) ;BLANK BETWEEN NAME AND COUNT SOB R0,1$ MOV #ILINE,R1 MOV #25.,R2 CALL PILINE ;PRINT THE LINE RETURN PRTNOA: CALL PNMCT CALL PRTBLK ;BLANK LINE SPACER TO FINISH RETURN .SBTTL PRINT AA LINE FOR INSTRUCTION EVALUATION TSLINE: .ASCII <14>/PROGRAM SUMMARY PAGE / ISPAGE: .ASCII / / TSLEN=.-TSLINE TILINE: .ASCII <14>/PROGRAM INSTRUCTION USAGE TABLE PAGE / ;TITLE LINE ITPAGE: .ASCII / / ITLEN=.-TILINE .EVEN ; CALLED R1=ADDR OF LINE TO BE PRINTED, R2=NO OF BYTES TO PRINT PSLINE: TST LINCTR BGT PIL MOV R1,-(SP) MOV R2,-(SP) INC PAGCTR MOV #ISPAGE,R3 MOV PAGCTR,R1 CALL I2DEC PUT$ #RESFIL,#TSLINE,#TSLEN BR ILIN PILINE: TST LINCTR ;NEW PAGE ?? BGT PIL ;NO MOV R1,-(SP) MOV R2,-(SP);SAVE REGESTER DURING NEW PAGE UPDATE INC PAGCTR ;NEXT PAGE NO MOV #ITPAGE,R3 MOV PAGCTR,R1 CALL I2DEC ;ENCODE THE PAGE NUM,BNER PUT$ #RESFIL,#TILINE,#ITLEN ;PRINT TITLE ILIN: PUT$ #RESFIL,#DATLIN,#DATSIZ ;RUN INFORMATION PUT$ #RESFIL,#BLNKLN,#1 ;BLANK LINE MOV (SP)+,R2 ;RESTORE REG MOV (SP)+,R1 MOV #LINPAG-3,LINCTR PIL: PUT$ #RESFIL,R1,R2 DEC LINCTR RETURN .SBTTL EVALUATE A SOURCE ONLY INSTRUCTION ; R1 IS OFFSET INTO PAGE TO FIRST COUNTER EVLSRC: ;SORCE ONLY INSTR CONTAINS ONLY 64 ENTRIES IN COUNTER AND ;WILL BE COMPLTELY CONTAINED ON ONE PAGE MOV #ACCREG,R2 ;GET POINTER TO PROGRAM COUNTER TABLE MOV #WORK,R3 ;TABLE TO CURRENT INSTRUCTION ACC TABLE MOV #64.,R4 ;8 REG*8 MODES 1$: ADD IPAGE+2(R1),2(R2) ;ADD LO ORDER TO PROGRAM ACCUM ADC (R2) ADD IPAGE(R1),(R2) ;HIGH ORDER ADD IPAGE+2(R1),2(R3) ;REPEAT FOR INSTRUCTION ACCUM ADC (R3) ADD IPAGE(R1),(R3) ADD IPAGE+2(R1),TCOUNT+2 ;GET A CUMLITIVCE COUNT ADC TCOUNT ADD IPAGE(R1),TCOUNT ADD #4,R1 ;BUMP ALL COUNTERS ADD #4,R2 ADD #4,R3 SOB R4,1$ ;REPEAT FOR EACH REGESTER AND MODE RETURN .SBTTL EVALUATE A DEST ONLY INSTRUCTION ; R1 IS OFFSET INTO PAGE TO FIRST COUNTER EVLDST: ;DEST ONLY INSTR CONTAINS ONLY 64 ENTRIES IN COUNTER AND ;WILL BE COMPLTELY CONTAINED ON ONE PAGE MOV #ACCREG+256.,R2 ;GET POINTER TO PROGRAM COUNTER TABLE MOV #WORK+256.,R3 ;TABLE TO CURRENT INSTRUCTION ACC TABLE MOV #64.,R4 ;8 REG*8 MODES 1$: ADD IPAGE+2(R1),2(R2) ;ADD LO ORDER TO PROGRAM ACCUM ADC (R2) ADD IPAGE(R1),(R2) ;HIGH ORDER ADD IPAGE+2(R1),2(R3) ;REPEAT FOR INSTRUCTION ACCUM ADC (R3) ADD IPAGE(R1),(R3) ADD IPAGE+2(R1),TCOUNT+2 ADC TCOUNT ADD IPAGE(R1),TCOUNT ADD #4,R1 ;BUMP ALL COUNTERS ADD #4,R2 ADD #4,R3 SOB R4,1$ ;REPEAT FOR EACH REGESTER AND MODE RETURN .SBTTL PRINT STATS ON ISTRUCTIONS WITH 1 SOURCE ARGUMENT ; STANDARD FORTRN CALL- 1 ARG 14 CHR ASCII NAME P1SRC: ; THIS ROUTINE GENRATES 11 LINES- MAKE SURE ALL GO ON ONE PAGE CMP #11.,LINCTR BLE 1$ CLR LINCTR ;FORCE A NEW PAGE 1$: ;PRINT THE INSTRUCTION NAME CALL PNMCT ;PRINT THE FIRST LINE MOV #WORK,R5 ;TO PRINT OUT COUNTS-POINT TO MODE INFO CALL PRTSRC ;CALL ROUTINE TO PRINT SOURCE CALL PRTBLK RETURN .SBTTL PRINT STATS ON ISTRUCTIONS WITH 1 DESTINATION ARGUMENT ; STANDARD FORTRN CALL- 1 ARG 14 CHR ASCII NAME P1DST: ; THIS ROUTINE GENRATES 11 LINES- MAKE SURE ALL GO ON ONE PAGE CMP #11.,LINCTR BLE 1$ CLR LINCTR ;FORCE A NEW PAGE 1$: ;PRINT THE INSTRUCTION NAME CALL PNMCT ;PRINT THE FIRST LINE MOV #WORK+256.,R5 ;TO PRINT OUT COUNTS-POINT TO MODE INFO CALL PRTDST ;CALL ROUTINE TO PRINT SOURCE CALL PRTBLK RETURN .SBTTL PRINT SOURCE PART OFDATA ; CALLED R5 POINTS TO ATART OF AREA CONTIANING STATS PRTSRC: MOV #SLIN,R1 ;PRINT 'SOURCE' MOV #SLSIZ,R2 CALL PILINE ;PRINT SUB HEADER CALL PRTSTS ;PRINT THE STATISTICS RETURN SLIN: .ASCII / SOURCE ARGUMENT USEAGE/ SLSIZ=.-SLIN .EVEN .SBTTL PRINT DESTINATION PART OFDATA ; CALLED R5 POINTS TO ATART OF AREA CONTIANING STATS PRTDST: MOV #DLIN,R1 ;PRINT 'SOURCE' MOV #DLSIZ,R2 CALL PILINE ;PRINT SUB HEADER CALL PRTSTS ;PRINT THE STATISTICS RETURN DLIN: .ASCII / DESTINATION ARGUMENT USEAGE/ DLSIZ=.-DLIN .EVEN .SBTTL PRINT REGESTER USEAGE STATS ; R5 POINTS TO SRC/DST SET OF ACCUM STATS PRTSTS: MOV #REGLIN,R1 ;PRINT THE REGESTER HEADER MOV #REGSIZ,R2 CALL PILINE MOV #MODES,-(SP) ;POINTER TO MODE SYMBOLS MOV #8.,-(SP) ;8 MODES 1$: MOV #ILINE,R0 ;CLEAR THE FIRST PART OF THE LINE MOV #13.,R1 ;13 BLANKS 2$: MOVB #40,(R0)+ SOB R1,2$ MOVB #'M,(R0)+ ;MOV IN THE WORD 'MODE' MOVB #'O,(R0)+ MOVB #'D,(R0)+ MOVB #'E,(R0)+ MOVB #40,(R0)+ ;BLANK MOV #5,R4 ;MOVE IN THE NEXT 5 CHRS FROM MODE LINE CLR TCOUNT 3$: MOVB @2(SP),(R0)+ INC 2(SP) SOB R4,3$ MOV #89.,R1 ;CLEAR THE REST OF THE LINE 4$: MOVB #40,(R0)+ SOB R1,4$ MOV #8.,R4 ;FOR 8 REG IN MODE MOV #ILINE+24.,-(SP);STARTING LOC IN OUTPUT LINE 5$: MOV (R5)+,R1 ;GET COUNT HIGH MOV (R5)+,R2 ;LOW BIS R1,TCOUNT BIS R2,TCOUNT MOV (SP),R3 ;STORAGE ADDR CALL I4DEC ;CVT TO ASCII ADD #11.,(SP) ;NEXT STORAGE LOC SOB R4,5$ ; LINE IS BUILT-CLEAN UP STACK AND PRINT CLR (SP)+ ; BUT IS THERE ANYTHING TO PRINT ?? TST TCOUNT BEQ 7$ ;IF TCOUNT ZERO-DON'T BOTHER MOV #ILINE,R1 MOV #111.,R2 CALL PILINE ; DO WE DO ANOTHER MODE 7$: DEC (SP) BGT 1$ ;NO-GO BACK AND DO NEXT ADD #4,SP ;CLEAN UP STACK RETURN ;AND DONE REGLIN: .ASCII / R0/ .ASCII / R1/ .ASCII / R2/ .ASCII / R3/ .ASCII / R4/ .ASCII / R5/ .ASCII / R6/ .ASCII / R7/ REGSIZ=.-REGLIN .EVEN MODES: .ASCII / R (R) (R)+@(R)+ -(R)@-(R) X(R)@X(R)/ .SBTTL SUMM UP THE CONTENTS OF A PAGE SUMPAG: MOV #IPAGE,R1 MOV #128.,R2 1$: ADD 2(R1),TCOUNT+2 ADC TCOUNT ADD (R1),TCOUNT ADD #4,R1 SOB R2,1$ RETURN .SBTTL EVALUATE A 2 ARGUMENT INSTRUCTION (SRC/DST) ; THIS TAKES 32 PAGES IN THE DISK FILE, AND THE BASIC SUMATION ; OF THE DESTINATION INFO HAS TO BE REPAETED FOR EACH SOURCE ; REGESTER AND MODE OF REGETER EVL2A: MOV R1,-(SP) ;SAVE STARTING NUMBER OF INSTRUCTION MOV #64.,-(SP) ;REPEAT 64 TIMES (8REG*8MODES) CLR -(SP) ;PONTER TO STORAGE LOC FOR SOURCE INFO ; FOR THE BASIC LOOP- THE STACK IS AS FOLLOWS ;SP=> OFFSET POINTER INTO WORK AND ACCREG FOR CURRENT SOURCE REG AND MODE ;+2 COUNTER FOR NUMBER OF TIMES THROUGH LOOP ;+4 BINARY VALUE FOR INSTUCTION 1$: CLR TCOUNT ;CLEAR ACCUM COUNTER FOR CURRENT SOURCE MODE/REG CLR TCOUNT+2 MOV 4(SP),R1;GET CURRENT INSTRUCTION STARTING POINT CALL VBNOFF ;GET PAGE AND OFFSET CALL EVLDST ;ACCUM DEST INFO AND STORE CURR SRC REG/MODE COUNT IN TCOUNT MOV (SP),R1 ;GET CURRENT OFFSET INTO SOURCE ARRAYS ADD TCOUNT+2,ACCREG+2(R1) ;ADD INTO PROGRAM WIDE DATA ADC ACCREG(R1) ADD TCOUNT,ACCREG(R1) ADD TCOUNT+2,WORK+2(R1) ;AND FOR THE TEMP THIS INS WORK ARRAY ADC WORK(R1) ADD TCOUNT,WORK(R1) ADD #4,(SP) ;UPDATE THE OFFSET TO NEXT REG/MODE ADD #100,4(SP) ;UPDATE INSTRUCTION BINARY TO NEXT ALSO DEC 2(SP) ;SEE IF DONE BGT 1$ ;IF NOT-REPEAT ADD #6,SP ;CLEAN UP STACK RETURN .SBTTL OUTPUT 2 ARG INSTR (SRC/DST) PRT2A: CMP #21.,LINCTR ;SEE IF ENOUGH ROOM FOR DATA IN ONE PAGE BLOS 1$ ;YES CLR LINCTR ;NO-FORCE TO NEW PAGE 1$: CALL PNMCT MOV #WORK,R5 ;OUTPUT SOURCE ARG DATA CALL PRTSRC MOV #WORK+256.,R5 ;SAME FOR DESTINTION CALL PRTDST CALL PRTBLK RETURN .SBTTL PRINT OUT A REGESTER ONLY INSTRUCTION PRTREG: CMP #3,LINCTR ;3 LINES NEEDED-SEE IF FIT ON 1 PAGE BLE 1$ CLR LINCTR ;IF NOT FORCE NEW PAGE 1$: CALL PNMCT MOV #WORK,R5 ;SHOW LOC OF REG'S CALL REGOUT ;PRINT REGESTERS ONLY CALL PRTBLK RETURN .SBTTL PRINT REGESTER USEAGE REGOUT: MOV #REGLIN,R1 ;PRINT REGESTER HEADER LINE MOV #REGSIZ,R2 CALL PILINE MOV #ILINE,R0 MOV #130.,R1 ;CLEAR LINE TO BE ENCODED 1$: MOVB #40,(R0)+ SOB R1,1$ MOV #ILINE+24.,-(SP) MOV #8.,R4 5$: MOV (R5)+,R1 MOV (R5)+,R2 MOV (SP),R3 ;SET UP ENCODE CALL I4DEC ADD #11.,(SP) SOB R4,5$ TST (SP)+ MOV #ILINE,R1 ;OUTPUT FORMED LINE MOV #111.,R2 CALL PILINE RETURN .SBTTL PRINT INSTR HAVEING REG SRC AND DST MODE PRGDST: CMP #13.,LINCTR ;SEE IF IT WILL FIT ON A PAGE BLE 1$ CLR LINCTR ;IF NOT FORCE A NEW PAGE 1$: CALL PNMCT MOV #WORK,R5 ;PRINT REGESTER INFO CALL REGOUT MOV #WORK+256.,R5 ;PRINT DEST INFO CALL PRTDST CALL PRTBLK RETURN .SBTTL PRINT INSTR HAVEING REG DEST AND SRC MODE PRGSRC: CMP #13.,LINCTR ;MAKE SURE ENOUGH ROOM LEFT IN PAGE BLE 1$ CLR LINCTR 1$: CALL PNMCT MOV #WORK+256.,R5 ;OUT PUT REGESTERS CALL REGOUT MOV #WORK,R5 ;OUPUT SRC CALL PRTSRC CALL PRTBLK RETURN .SBTTL EVALUATE FLOATING SOURCE EVFSRC: MOV #WORK,R3 ;GET OUTPUT TO WORK AREA MOV #ACCREG,R2 ;REGACUM PROGRAM WIDE MOV #64.,R4 ;8 REG *8 MODES 1$: CMP #56.,R4 ;MODE 0 IS ACCUM NOT REG BGE 2$ ;NOT MODE 0 ADD IPAGE+2(R1),ACCFPR+32.-ACCREG+2(R2) ADC ACCFPR+32.-ACCREG(R2) ADD IPAGE(R1),ACCFPR+32.-ACCREG(R2) BR 3$ 2$: ADD IPAGE+2(R1),2(R2) ADC (R2) ADD IPAGE(R1),(R2) 3$: ADD IPAGE+2(R1),2(R3) ADC (R3) ADD IPAGE,(R3) ADD IPAGE+2(R1),TCOUNT+2 ADC TCOUNT ADD IPAGE(R1),TCOUNT ADD #4,R1 ADD #4,R2 ADD #4,R3 SOB R4,1$ RETURN .SBTTL EVALUATE FLOATING DESTINATION EVFDST: MOV #WORK+256.,R3 ;GET OUTPUT TO WORK AREA MOV #ACCREG+256.,R2 ;REGACUM PROGRAM WIDE MOV #64.,R4 ;8 REG *8 MODES 1$: CMP #56.,R4 ;MODE 0 IS ACCUM NOT REG BGE 2$ ;NOT MODE 0 ADD IPAGE+2(R1),ACCFPR-ACCREG-256.+2(R2) ADC ACCFPR-ACCREG-256.(R2) ADD IPAGE(R1),ACCFPR-ACCREG-256.(R2) BR 3$ 2$: ADD IPAGE+2(R1),2(R2) ADC (R2) ADD IPAGE(R1),(R2) 3$: ADD IPAGE+2(R1),2(R3) ADC (R3) ADD IPAGE,(R3) ADD IPAGE+2(R1),TCOUNT+2 ADC TCOUNT ADD IPAGE(R1),TCOUNT ADD #4,R1 ADD #4,R2 ADD #4,R3 SOB R4,1$ RETURN .END START