.TITLE ADDLBL .IDENT /01/ .PSECT CODE,RO ; ; VERSION 01 ; ; TOM GETZINGER 06-AUG-80 ; ; THIS ROUTINE ADDS A LABEL TO A BUFFER ; ; INPUTS: ; R0 = PSECT # ; R1 = ADDRESS ; R5 = OUTPUT ADDRESS .ENABL LSB .NLIST BEX ; ; LOCAL DATA ; .PSECT RODATA,RO,D HEX: .ASCII "0123456789ABCDEF" .PSECT RWDATA,RW,D GBLADR::.BLKW 1 ; ADDRESS OF GLOBAL SYMBOL IN SYMBOL TABLE LBLFLG: .BLKW 1 ; NON-ZERO IF THIS IS A LABEL .PSECT CODE ADDLBL::MOV SP,LBLFLG ; SET LABEL FLAG BR 5$ ADDSYM::CLR LBLFLG ; CLEAR LABEL FLAG 5$: JSR R2,$SAVVR ; SAVE R0-R2 MOV PSCEND,R2 ; GET STARTING ADDRESS OF GLOBAL SYMBOL TABLE CLR GBLADR ; CLEAR GLOBAL SYMBOL ADDRESS 10$: CMP R2,GBLEND ; IS THAT THE END OF THE GLOBAL SYMBOL TABLE? BEQ 30$ ; YES CMPB R0,5(R2) ; NO, DO THE PSECTS MATCH? BNE 20$ ; NO CMP R1,6(R2) ; YES, DO THE ADDRESSES MATCH? BNE 20$ ; NO TST LBLFLG ; IS THIS A LABEL? BEQ 50$ ; NO, SO WE FOUND A SYMBOL TSTB 4(R2) ; YES, HAS THIS SYMBOL BEEN DEFINED YET? BEQ 20$ ; YES, SO DON'T DEFINE IT AGAIN CLRB 4(R2) ; NO, BUT IT WILL BE NOW BR 50$ ; GO USE IT 20$: ADD #8.,R2 ; SKIP TO THE NEXT SYMBOL BR 10$ ; AND GO TRY IT 30$: CMP NPSCTS,#13. ; ARE THERE FEW ENOUGH PSECTS FOR OCTAL LABELS? BLE 60$ ; YES MOV R1,-(SP) ; NO, SAVE R1 MOV R0,R1 CLR R0 DIV #10.,R0 ; SPLIT PSECT IN HALF ADD #'A,R0 ; OUTPUT A-Z MOVB R0,(R5)+ ADD #'0,R1 ; OUTPUT 0-9 MOVB R1,(R5)+ MOV (SP)+,R1 ; RESTORE R1 MOV #4,R2 ; 4 HEX DIGITS TO ADD 40$: CLR R0 ASHC #4,R0 ; GET THE NEXT DIGIT MOVB HEX(R0),(R5)+ ; ADD TO OUTPUT SOB R2,40$ ; CONTINUE UNTIL ALL DIGITS ARE ADDED RETURN ; AND THEN WE'RE DONE 50$: MOV R2,GBLADR ; SAVE ADDRESS OF GLOBAL SYMBOL MOV R2,R0 ; COPY THE ADDRESS OF THE SYMBOL NAME CALL ADDR50 ; ADD THE SYMBOL NAME RETURN ; AND WE'RE DONE 60$: ASL R0 ; DOUBLE THE PSECT # ROL R1 ; IS THE ADDRESS IN THE UPPER 16K? BCC 70$ ; NO INC R0 ; YES, SO USE THE ODD CHAR 70$: ADD #'A,R0 ; MAKE IT AN ALPHA CHAR MOVB R0,(R5)+ ; OUTPUT IT MOV #5,R2 ; 5 OCTAL DIGITS TO ADD 80$: CLR R0 ASHC #3,R0 ; GET THE NEXT DIGIT MOVB HEX(R0),(R5)+ ; ADD IT TO THE OUTPUT SOB R2,80$ ; CONTINUE UNTIL ALL DIGITS ARE ADDED RETURN ; AND THEN WE'RE DONE .END