.TITLE ORCP3 .IDENT /V01.1/ ; ; ORCAM - PASS 3 ; ; PASS 3 PUTS IN THE LABELS ; READS ENTRIES FROM .TMP INTO MACPS ; WRITES MACRO CODE TO .MAC FROM MACLIN ; ; ; DEFINE MACRO: ; .MACRO FTAB JSR PC,TAB8 .ENDM FTAB ; ; ; ; ****************************** ; * PASS 3 - PUT IN THE LABELS * ; ****************************** ; ORCP3:: CLR BLKB ; BLOCK BYTE PROCESSING FLAG 5$: JSR PC,RD$SCR BCC 8$ 7$: JMP FINISH ; ERROR OR EOF - FINISH 8$: MOV GLOBS,R0 ; CHECK FOR GLOBAL DEFS BEQ 140$ ; THERE ARE NONE MOV #GLOBS+2,R1 110$: CMP MACPS,4(R1) BNE 120$ CMP MACLC,6(R1) BEQ 130$ 120$: ADD #8.,R1 SOB R0,110$ BR 140$ 130$: JSR PC,CKBLKB ; CHECK FOR BLKB PROCESSING MOV R0,-(SP) MOV R1,-(SP) MOV #MACLIN,R0 ; POINT TO MACRO LINE JSR PC,R5ASC ; PUT ASCII NAME IN MOV R0,R2 ; MAKE R2 POINT TO MACRO LINE 135$: CMPB -(R2),#40 BEQ 135$ TSTB (R2)+ MOVB #':,(R2)+ MOVB #':,(R2)+ MOV MACLEN,-(SP) MOV #MACLIN+8.,MACLEN JSR PC,WR$MAC MOV (SP)+,MACLEN MOV #MACLIN,R2 ; CLEAR OUT LABEL FTAB MOV (SP)+,R1 ; RESTORE REGISTERS MOV (SP)+,R0 BR 120$ ; ; CHECK FOR LESS LOCAL LABELS (IE. LOCAL SYMBOLS) ; 140$: MOV LLLABS,R0 ; CHECK FOR LESS LOCAL LABELS BEQ 10$ ; THERE ARE NONE MOV #LLLABS+2,R1 150$: CMP MACPS,(R1)+ ; CHECK PSECT NUMBER BNE 160$ CMP MACLC,(R1) ; CHECK LOCATION COUNTER BEQ 170$ 160$: TST (R1)+ ; NO MATCH - POINT TO NEXT ENTRY SOB R0,150$ ; AND TRY AGAIN BR 10$ ; END OF TABLE 170$: JSR PC,CKBLKB ; CHECK FOR BLKB PROCESSING MOV #MACLIN,R2 ; POINT TO MACRO LINE MOV MACPS,R0 ; GET PSECT NUMBER ADD #100,R0 ; CONVERT TO A LETTER (A-Z) MOVB R0,(R2)+ ; INSERT IN LINE MOV (R1),OCOBUF ; GET LOCATION COUNTER BIS #100000,OCOBUF ; ENSURE 6 CHARACTERS JSR PC,OCO ; CONVERT TO ASCII MOV #OCOBUF+1,R1 ; REMOVE INITIAL "1" DEC R0 180$: MOVB (R1)+,(R2)+ ; INSERT IN LINE SOB R0,180$ MOVB #':,(R2)+ ; INSERT COLON ; ; CHECK FOR LOCAL LABELS (IE. NNN$:) ; 10$: MOV LABELS,R0 BEQ 100$ ; IE NO LABELS EXIST MOV #LABELS+2,R1 15$: CMP MACPS,(R1)+ BNE 20$ CMP MACLC,(R1) BEQ 40$ 20$: TST (R1)+ SOB R0,15$ BR 100$ ; NO MATCH 40$: JSR PC,CKBLKB ; CHECK FOR BLKB PROCESSING CMPB #' ,MACLIN ; LOCAL LABEL FOUND - CHECK WHETHER BEQ 45$ ; WE ALREADY HAVE A LOCAL SYMBOL HERE MOV MACLEN,-(SP) MOV #MACLIN+7,MACLEN JSR PC,WR$MAC ; WRITE OUT THE LOCAL SYMBOL FIRST MOV (SP)+,MACLEN MOV #MACLIN,R2 ; CLEAR IT OUT OF THE LINE FTAB 45$: MOV MACLC,OCOBUF TST OCOBUF BNE 50$ INC OCOBUF ; 0$ ISN'T VALID - SO MAKE IT 1$ 50$: JSR PC,OCO MOV #OCOBUF,R1 MOV #MACLIN,R2 70$: MOVB (R1)+,(R2)+ SOB R0,70$ MOVB #'$,(R2)+ MOVB #':,(R2)+ 100$: TST BLKB ; PROCESSING A BLKB? BNE 190$ ; BRANCH IF YES MOV #MACLIN+8.,R0 ; CHECK IF THIS LINE IS .BLKB CMP R0,MACLEN ; SHORT LINE? BGE 300$ ; BRANCH IF YES CMP (R0)+,#".B BNE 300$ CMP (R0)+,#"LK BNE 300$ CMP (R0)+,(R0)+ ; YES - POINT TO SIZE OF BLOCK CLRB @MACLEN ; TERMINATE NUMBER JSR PC,$COTB ; CONVERT TO BINARY MOV R1,R3 ; SIZE IN R3 MOV R1,R5 ; COPY IN R5 190$: MOV #1,R4 ; STEP ON LC BIT R4,MACLC BNE 200$ ; - BY 1, IF IT IS ODD INC R4 ; - BY 2, OTHERWISE 200$: SUB R4,R3 ; NO. OF BYTES LEFT BLE 300$ ; BRANCH IF NONE MOV #1,BLKB ; SHOW PROCESSING BLKB ADD R4,MACLC ; SET UP NEW LC JMP 8$ ; AND LOOK FOR LABELS 300$: CLR BLKB JSR PC,WR$MAC JMP 5$ ; FINISH: RTS PC ; ; ; SUBROUTINE FOR PASS 3 ; ; ; ; CKBLKB - CHECK FOR BLKB BEING PROCESSED ; ON ENTRY: R3 = NO. OF BYTES LEFT IN BLOCK ; R5 = TOTAL SIZE OF BLOCK ; CKBLKB: TST BLKB ; BLKB IN PROGRESS? BEQ 100$ ; RETURN IF NOT MOV R0,-(SP) ; SAVE REGISTERS MOV R1,-(SP) MOV R2,-(SP) SUB R3,R5 ; NO. OF BYTES BEFORE THIS LABEL MOV R5,OCOBUF JSR PC,OCO ; CONVERT TO ASCII MOV #OCOBUF,R1 MOV #MACLIN+16.,R2 10$: MOVB (R1)+,(R2)+ ; PUT INTO MACRO LINE SOB R0,10$ MOV R2,MACLEN ; SET END OF LINE JSR PC,WR$MAC ; OUTPUT THE LINE MOV #MACLIN,R2 FTAB ; CLEAR OUT LABELS MOV R3,OCOBUF ; NO. OF BYTES LEFT JSR PC,OCO ; CONVERT TO ASCII MOV #OCOBUF,R1 MOV #MACLIN+16.,R2 20$: MOVB (R1)+,(R2)+ ; PUT INTO MACRO LINE SOB R0,20$ MOV R2,MACLEN ; SET END OF LINE CLR BLKB MOV (SP)+,R2 ; RESTORE REGISTERS MOV (SP)+,R1 MOV (SP)+,R0 100$: RTS PC ; .END