.TITLE ORCP2 .IDENT /V01.7/ ; ; ORC - PASS 2 ; ; PASS 2 PROCESSES TXT/RLD RECORDS ; READS ENTRIES FROM .OBJ INTO OBJLIN AND OBLIN2 ; WRITES INTERMEDIATE CODE TO .TMP FROM MACPS ; ; Modifications Record: ; ===================== ; V01.3 13-Aug-85 CJD ; Check record type in range before doing an indexed jump. (Illegal ; ones were reported in pass 1). ; ; V01.7 2-Oct-86 CJD ; Flag .END with 177776 in 1st word of temp file record, for pass 3. ; 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 BLE GETTXT ; Check range ;V01.3 CMP R0,#6 ;V01.3 BHI GETTXT ;V01.3 ASL R0 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 RECORD SEEN - FIRST MAKE SURE THAT CURRENT PSECT IS COMPLETE ; EOM:: MOV PSNUM,R0 ; CURRENT PSECT NUMBER BEQ 10$ ; BRANCH IF NO PSECT'S SEEN ASL R0 MOV R0,R2 MOV MACLC,PSECLC-2(R0) ; SAVE CURRENT LC ASL R2 ASL R2 CMP PSECTS(R2),MACLC ; PSECT COMPLETE? BEQ 10$ ; BRANCH IF YES MOV #PSDUMY,R1 ; SET UP DUMMY RLD MOV #10,(R1) ; TYPE=LC MOD MOV PSECTS(R2),2(R1) MOV PSECTS(R2),PSECLC-2(R0) ; UPDATE CURRENT LC JSR PC,RLDLC ; PROCESS LC MOD ; ; CHECK ALL PSECTS FOR COMPLETENESS ; 10$: MOV #PSECLC,R5 MOV #PSECTS,R4 MOV (R4)+,R3 CLR R0 ; PSECT NUMBER 40$: INC R0 CMP (R5)+,6(R4) ; PSECT COMPLETE? BEQ 50$ ; BRANCH IF YES MOV #PSDUMY,R1 ; SET UP DUMMY RLD MOV (R4)+,(R1)+ MOV (R4)+,(R1)+ TST (R4)+ MOV (R4)+,(R1) CMP -(R1),-(R1) ; RESET RLD POINTER MOV R0,-(SP) ; SAVE REGISTERS MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) JSR PC,RLDPS ; PROCESS PSECT MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R0 BR 60$ 50$: ADD #8.,R4 60$: SOB R3,40$ ; ; NOW DISABLE LSB, IF NECESSARY ; MOV #MACLIN,R2 FTAB JSR PC,WR$SCR ; OUTPUT BLANK LINE MOV #MACPS,R2 MOV #-1,(R2) MOV (R2)+,(R2)+ TST LSB ; IN A LSB? BEQ 80$ MOV #DSLSB,R1 MOV #11.,R0 70$: MOVB (R1)+,(R2)+ SOB R0,70$ JSR PC,WR$SCR ; ; WRITE OUT ".END" TEXT ; 80$: DEC MACPS ; Flag end for pass 3 cleanup ;V01.7 MOV #MACLIN,R2 MOVB #';,(R2)+ JSR PC,WR$SCR ; OUTPUT SEMICOLON INC MACPS ; Rsstore 177777 ;V01.7 MOV #MACLIN,R2 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 90$: MOVB (R5)+,(R2)+ SOB R0,90$ 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 ; PSDUMY: .BLKW 3 ; .END