LDA RPL ENTRY FOR LOAD ADD. FOR RECORD LDB LDADD IF LDADD = 0, SZB,RSS NO, CONTINUE STA LRPL YES, SAVE RPL AT START OF FIRST STA SRPL SAVE BEGINNING OF NEW RECORD. * * PLACE I/O SYNTAX ON STACK * LDA TC CPA B50 IS SYNTAX A LEFT PAREN? JMP PIO01 YES, STACK IT. CPA B51 NO, IS SYNTAX A RIGHT PAREN? JMP PIO01 YES, STACK IT. LDA .A NO, STACK POINTER TO CONTROL VAR IOR KK01 (A) _ .A,I. .A POINTS TO CONT VAR PIO01 JSB PU200 STACK SYNTAX OF I/O LIST ON STK2 LDA TWPE LOAD IM=4 FOR TWO WORD PSEVDO ENT JSB ESC00 ESTABLISH DUMMY A.T.ENTRY JSB AI00 AND ASSIGN IT TO TABLE LDA .A STACK ON TOP OF I/O LIST JSB PU200 SYNTAX,THE A.T. POINTER TO THIS * LDA .A INA SAVE POINTER TO WORD IN ASSIGN STA LDADD TABLE TO HOLD NEXT LOAD ADDRESS. LDB KK01 * * OUTPUT LOAD ADDRESS * LDA R001 INDICATES FOR OW00 ROUTINE STA R THAT NEW REC. STARTS WITH LDA RPL LOAD ADDRESS IN (A). SZB IF LOAD ADD. IS RPL, OUTPUT IT. LDA .A OTHERWISE SET LOAD ADD..A,I IOR B ORS 0 OR 100000 INTO LOAD ADD IN A JSB OW00 OUTPUT LOAD ADDRESS * NREX JMP NR00,I ASSIGNMENT TABLE POINTER KK01 OCT 100000 DEF A,I * * R001 OCT 20000 LOAD LOC. INDICATOR * * * ********************* * * MATCH PARENTHESES * * ********************* * MP00 NOP MATCH PAREN IN STACK 2 STA T0MP LOCATION OF PAREN TO BE MATCHED STB T1MP SEARCH UP STK IS +2, DOWN IS -2 CLB INITIALIZE PAREN COUNTER MP01 LDA T0MP WORD 1 OF 2 WORD STACK 2 ENTRY LDA A,I CONTENTS OF STACK WORD (SYNTAX) CPA B50 IS SYNTAX '('? INB YES, COUNT=COUNT+1 CPA B51 NO, IS SYNTAX ')'? ADB BM1 YES, COUNT = COUNT -1 SZB,RSS IS COUNT = 0? JMP MP03 YES, FINISH UP LDA T0MP NO, ADA T1MP UPDATE POINTER IN STACK TO STA T0MP POINT TO NEXT SYNTAX ELEMENT CMA,INA ADA STK2B (A) _ STK2B - POINTER SSA,RSS HAS BOTTOM OF STACK BEEN PASSED? JMP MP02 YES, MISMATCHED PARENS ERROR. LDA T0MP NO, CMA,INA ADA STK2T (A) _ STK2T - POINTER SSA,RSS HAS TOP OF STACK BEEN PASSED? JMP MP01 NO, CONTINUE SEARCH MP02 LDA K9 YES, MISMATCHED PARENS ERROR JSB ER00 NO RETURN MP03 LDA T0MP RETURN POINTER TO STK WORD +1 INA (POINTS TO WORD FOR A.T. POINTER MPEX JMP MP00,I FOR LOAD ADDRESS STARTING RECORD) * T0MP BSS 1 T1MP BSS 1 * * *********** * * TC TEST * * *********** * ENTRY: (A)=CORRECT TERMINATING CHAR. TCTST NOP CPA TC JMP TCTST,I TC=(A),EXIT LDA K28 JSB ER00 IMPROPER TERMINATING CHARACTER K28 DEC 28 * ****************** * * UNINPUT COLUMN * * ****************** UC00 NOP CCA ADA CC STA CC CC=CC-1 JMP UC00,I EXIT * * ****************** * * FETCH CONSTANT * * ****************** FC00 NOP JSB CLIDI CLEAR IDI BUFFER TO 0 LDB .A LDA B,I AND B7 ADA KM2 CMA,INA STA NW NW=-(# OF WORDS IN ID FIELD) SSA,RSS JMP FCEX DUMMY 1 OR 2 WORD ENTRY LDA BIDI LOC. OF 1ST WORD OF IDI BUFFER STA T1FC LDB .A ADB K2 FC02 LDA B,I STA T1FC,I STORE ID FIELD INTO IDI BUFFER ISZ T1FC BUMP IDI BUFFER PTR BY 1 INB BUMP ID FIELD LOC BY 1 ISZ NW ID FIELD EXHAUSTED ? JMP FC02 NO FCEX JMP FC00,I YES,EXIT T1FC BSS 1 IDI BUFFER POINTER BIDI DEF IDI B7 OCT 7 * ******************************* * * OUTPUT ABSOLUTE INSTRUCTION * * ******************************* * OAI00 NOP LDB R110 R=6 INDICATOR FOR SECOND PASS STB R (SO SECOND PASS LOOKS UP JSB OW00 MNEUMONIC OP CODE FOR INSTR.) JMP OAI00,I OUTPUT INSTR. AND RETURN. R110 OCT 140000 ABSOLUTE INSTRUCTION * ****************************** * * OUTPUT DO TERMINATION CODE * * ****************************** * DT00 NOP TERM. CODE FOR I=M1,M2,M3 LDA LDA LDB CONTR LDA I JSB SOA00 LDB M3 ADA M3 JSB GAD00 LDA STA LDB CONTR STA I JSB SOA00 LDA KK60 CMA,INA JSB OAI00 LDB M2 ADA M2 JSB GAD00 LDB M3 LDA B,I CHECK NAME TAG OF .A (STEP-SIZE) SSA,RSS JMP DT01 IF VARIABLE STEP-SIZE STB .A JSB FC00 IF CONSTANT STEP-SIZE LDA IDI (A) _ CONSTANT M3 SSA,RSS JMP DT02 IF POSITIVE (INCREMENT) LDA KK81 IF NEGATIVE (DECREMENT) SZA JSB OAI00 LDA KK70 SSA JMP DT03 DT01 LDA LDB LDB M3 (IF VARIABLE STEP-SIZE) JSB SOA00 LDA KK61 SSB (IF VARIABLE STEP-SIZE) JSB OAI00 LDA KK60 CMA,INA (IF VARIABLE STEP-SIZE) JSB OAI00 DT02 LDA KK62 SSA,RSS (VAR. OR POS. STEP-SIZE) DT03 JSB OAI00 LDA JMP LDB JMPAD JMP (BEGINNING OF DO BODY) STB T0OMR SAVE 2ND WORD OF INSTRUCTION LDB R101 R=5 FOR MEMORY REFERENCE INST. STB R LDB T0OMR RESTORE 2ND WORD OF INSTRUCTION JSB OW00 OUTPUT INSTRUCTION DTEX JMP DT00,I * * T0OMR BSS 1 R101 OCT 120000 MEMORY REFERENCE KK70 SSA KK81 SZA * * **************** * * GENERATE ADD * * **************** * GAD00 NOP LDA ADA JSB SOA00 OUTPUT ADA (B) JMP GAD00,I ADA OCT 42000 * * *********************** * * OUTPUT DOT FUNCTION * * *********************** * ODF00 NOP STB .A SAVE POINTER TO FUNC TABLE IN .A STB DOTFF LDA JSB JSB OA00 OUTPUT INSTRUCTION CLB STB DOTFF JMP ODF00,I RETURN * *********************** * * STORE AND OUTPUT OA * * *********************** * SOA00 NOP STB .A JSB OA00 JMP SOA00,I * * * * * **************** * * GENERATE DEF * * **************** * DEF00 NOP OPERAND ASSUMED NOT TO BE IN REG CLA JSB SOA00 OUTPUT THE DEF JMP DEF00,I RETURN. * * * * * * * * * * *************** * * INPUT DIGIT * * *************** ID00 NOP JSB ICH00 INPUT CHARACTER LDA NFL IF CHAR. A DIGIT,NFL=0, ELSE NOT JMP ID00,I * * * * * ************** * * INPUT ITEM * * ************** II00 NOP JSB IDN00 INPUT DNA SZA IM=0, POSSIBLE ERROR JSB AI00 ASSIGN ITEM JMP II00,I * END FTN43 24170-80012 C