.TITLE ORCP2 .IDENT /V01.1/ ; ; ORCAM - PASS 2 ; ; PASS 2 PROCESSES TXT/RLD RECORDS ; READS ENTRIES FROM .OBJ INTO OBJLIN AND OBLIN2 ; WRITES INTERMEDIATE CODE TO .TMP FROM MACPS ; ; DEFINE MACRO: ; .MACRO FTAB JSR PC,TAB8 .ENDM FTAB ; ; ; ; ********************************* ; * PASS 2 - PROCESS TEXT RECORDS * ; ********************************* ; ORCP2:: GETTXT: MOV #OBLIN2,R1 MOV #OBLEN2,R2 JSR PC,RD$OBJ BCC 10$ RTS PC ; ERROR RETURN ; 10$: MOV #OBLIN2,R1 MOV (R1)+,R0 ; GET RECORD TYPE ASL R0 BEQ GETTXT CMP R0,#12. BHI GETTXT JMP @TXTREC-2(R0) ; ; RLD RECORD FOUND - SET UP A DUMMY TXT RECORD IN OBJLIN ; (ALWAYS GET AN RLD RECORD BEFORE A TXT RECORD) ; CALL INTTXT TO PROCESS TXT AND RLD RECORDS ; THIS ROUTINE DOES NOT RETURN UNTIL EOM SEEN ; RLD: MOV #OBJLIN,R1 ; SET UP A DUMMY TXT RECORD MOV #3,(R1)+ MOV R1,OBJLEN JSR PC,INTTXT ; INTERPRET TEXT ; EOM:: MOV #MACPS,R2 MOV #-1,(R2) MOV (R2)+,(R2)+ TST LSB ; IN A LSB? BEQ 5$ MOV #DSLSB,R1 MOV #11.,R0 2$: MOVB (R1)+,(R2)+ SOB R0,2$ JSR PC,WR$SCR MOV #MACLIN,R2 5$: FTAB MOV #".E,(R2)+ ; MOV ".END" TEXT MOV #"ND,(R2)+ MOV #XFR,R0 ; POINT TO XFR ADDRESS CMP (R0),#-1 ; DEFINED? BEQ 100$ ; IF NOT - FINISH CMP 4(R0),#1 ; OFFSET EQUALS 000001? BEQ 100$ ; IF SO - FINISHED MOV 4(R0),OCOBUF ; GET OFFSET JSR PC,GETPS ; GET PSECT NO. JSR PC,PLLL ; PLANT LOCAL SYMBOL ADD #100,R0 ; CONVERT PSECT NUMBER TO LETTER MOVB #11,(R2)+ ; INSERT A TAB MOVB R0,(R2)+ ; INSERT LETTER BIS #100000,OCOBUF ; ENSURE 6 CHARACTERS JSR PC,OCO MOV #OCOBUF+1,R5 DEC R0 10$: MOVB (R5)+,(R2)+ SOB R0,10$ 100$: JSR PC,WR$SCR ; WRITE DONE: CLC ; SHOW SUCCESSFUL RTS PC ; RETURN ; .PSECT ORCDAT,D .NLIST BEX TXTREC: .WORD GETTXT,GETTXT,GETTXT,RLD,GETTXT,EOM ; .END