*************************************** * OPERATOR TABLES *************************************** OPR$TAB$B5: DW BLK1$A DW BLK2$A DW BLK3$A DW BLK4$A DW BLK5$A DW BLK1$B OPR$TAB$C1: DB (BLK2$A-BLK1$A) DB (BLK3$A-BLK2$A)/2 DB (BLK4$A-BLK3$A)/3 DB (BLK5$A-BLK4$A)/4 DB (BLK1$B-BLK5$A)/5 OPR$TAB$C6: DW BLK1$B DW BLK2$B DW BLK3$B DW BLK4$B DW BLK5$B BLK1$A: DB CR DB '(' DB ')' DB '*' DB '+' DB ',' DB '-' DB '/' DB 'A' DB 'B' DB 'C' DB 'D' DB 'E' DB 'H' DB 'L' DB 'M' DB 'X' DB 'Y' BLK2$A: DB 'DB' DB 'DI' DB 'DS' DB 'DW' DB 'EI' DB 'IF' DB 'IN' DB 'OR' DB 'SP' BLK3$A: DB 'ACI' DB 'ADC' DB 'ADD' DB 'ADI' DB 'ANA' DB 'AND' DB 'ANI' DB 'BIT' DB 'CCD' DB 'CCI' DB 'CMA' DB 'CMC' DB 'CMP' DB 'CPI' DB 'DAA' DB 'DAD' DB 'DCR' DB 'DCX' DB 'DEF' DB 'END' DB 'EQU' DB 'EXX' DB 'HLT' DB 'IM0' DB 'IM1' DB 'IM2' DB 'IND' DB 'INI' DB 'INP' DB 'INR' DB 'INX' DB 'JMP' DB 'JRC' DB 'JRZ' DB 'LDA' DB 'LDD' DB 'LDI' DB 'LXI' DB 'MOD' DB 'MOV' DB 'MVI' DB 'NEG' DB 'NOP' DB 'NOT' DB 'ORA' DB 'ORG' DB 'ORI' DB 'OUT' DB 'POP' DB 'PSW' DB 'RAL' DB 'RAR' DB 'RES' DB 'RET' DB 'RLC' DB 'RLD' DB 'RRC' DB 'RRD' DB 'RST' DB 'SBB' DB 'SBI' DB 'SET' DB 'SHL' DB 'SHR' DB 'STA' DB 'STC' DB 'SUB' DB 'SUI' DB 'SYM' DB 'XOR' DB 'XRA' DB 'XRI' BLK4$A: DB 'CALL' DB 'CCDR' DB 'CCIR' DB 'COPY' DB 'DADC' DB 'DADX' DB 'DADY' DB 'DJNZ' DB 'DSBC' DB 'EXAF' DB 'INDR' DB 'INIR' DB 'JMPR' DB 'JRNC' DB 'JRNZ' DB 'LBCD' DB 'LDAI' DB 'LDAR' DB 'LDAX' DB 'LDDR' DB 'LDED' DB 'LDIR' DB 'LHLD' DB 'LINK' DB 'LIXD' DB 'LIYD' DB 'LSPD' DB 'OTDR' DB 'OTIR' DB 'OUTD' DB 'OUTI' DB 'OUTP' DB 'PCHL' DB 'PCIX' DB 'PCIY' DB 'PUSH' DB 'RALR' DB 'RARR' DB 'RETI' DB 'RETN' DB 'RLCR' DB 'RRCR' DB 'SBCD' DB 'SDED' DB 'SHLD' DB 'SIXD' DB 'SIYD' DB 'SLAR' DB 'SPHL' DB 'SPIX' DB 'SPIY' DB 'SRAR' DB 'SRLR' DB 'SSPD' DB 'STAI' DB 'STAR' DB 'STAX' DB 'XCHG' DB 'XREF' DB 'XTHL' DB 'XTIX' DB 'XTIY' BLK5$A: DB 'EJECT' DB 'ENDIF' DB 'MACRO' DB 'OUTDR' DB 'OUTIR' DB 'TITLE' ****************************************************** * OPCODE INDEX * FORMAT (SOURCE FORM) * XX-- OPCODE * --XX INDEX ****************************************************** BLK1$B: DW 0A0FH ;CR DW 140CH ;( DW 1E0DH ;) DW 5000H ;* DW 4605H ;+ DW 0A0EH ;COMMA DW 4606H ;- DW 5001H ;/ DW 0710H ;A DW 0010H ;B DW 0110H ;C DW 0210H ;D DW 0310H ;E DW 0410H ;H DW 0510H ;L DW 0610H ;M DW 1410H ;X DW 2410H ;Y BLK2$B: DW 00111H ;DB DW 0F313H ;DI DW 00211H ;DS DW 00311H ;DW DW 0FB13H ;EI DW 00811H ;IF DW 0DB1AH ;IN DW 0280AH ;OR DW 00610H ;SP BLK3$B: DW 0CE1AH ;ACI DW 0881DH ;ADC DW 0801DH ;ADD DW 0C61AH ;ADI DW 0A01DH ;ANA DW 03209H ;AND DW 0E61AH ;ANI DW 04028H ;BIT DW 0A91CH ;CCD DW 0A11CH ;CCI DW 02F13H ;CMA DW 03F13H ;CMC DW 0B81DH ;CMP DW 0FE1AH ;CPI DW 02713H ;DAA DW 00915H ;DAD DW 0051EH ;DCR DW 00B1FH ;DCX DW 00B11H ;DEF (was NOW/SET) DW 00411H ;END DW 00711H ;EQU DW 0D913H ;EXX DW 07613H ;HLT DW 0461CH ;IM0 DW 0561CH ;IM1 DW 05E1CH ;IM2 DW 0AA1CH ;IND DW 0A21CH ;INI DW 04021H ;INP DW 0041EH ;INR DW 0031FH ;INX DW 0C317H ;JMP DW 0382BH ;JRC DW 0282BH ;JRZ DW 03A17H ;LDA DW 0A81CH ;LDD DW 0A01CH ;LDI DW 00114H ;LXI DW 05002H ;MOD DW 04018H ;MOV DW 00619H ;MVI DW 0441CH ;NEG DW 00013H ;NOP DW 03C08H ;NOT DW 0B01DH ;ORA DW 00A11H ;ORG DW 0F61AH ;ORI DW 0D31AH ;OUT DW 0C116H ;POP DW 00610H ;PSW DW 01713H ;RAL DW 01F13H ;RAR DW 08028H ;RES DW 0C913H ;RET DW 00713H ;RLC DW 06F1CH ;RLD DW 00F13H ;RRC DW 0671CH ;RRD DW 0C720H ;RST DW 0981DH ;SBB DW 0DE1AH ;SBI DW 0C028H ;SET DW 05003H ;SHL DW 05004H ;SHR DW 03217H ;STA DW 03713H ;STC DW 0901DH ;SUB DW 0D61AH ;SUI DW 00D11H ;SYM DW 0280BH ;XOR DW 0A81DH ;XRA DW 0EE1AH ;XRI BLK4$B: DW 0CD17H ;CALL DW 0B91CH ;CCDR DW 0B11CH ;CCIR DW 01011H ;COPY DW 04A24H ;DADC DW 00929H ;DADX DW 0092AH ;DADY DW 0102BH ;DJNZ DW 04224H ;DSBC DW 00813H ;EXAF DW 0BA1CH ;INDR DW 0B21CH ;INIR DW 0182BH ;JMPR DW 0302BH ;JRNC DW 0202BH ;JRNZ DW 04B25H ;LBCD DW 0571CH ;LDAI DW 05F1CH ;LDAR DW 00A1BH ;LDAX DW 0B81CH ;LDDR DW 05B25H ;LDED DW 0B01CH ;LDIR DW 02A17H ;LHLD DW 00611H ;LINK DW 02A26H ;LIXD DW 02A27H ;LIYD DW 07B25H ;LSPD DW 0BB1CH ;OTDR DW 0B31CH ;OTIR DW 0AB1CH ;OUTD DW 0A31CH ;OUTI DW 04121H ;OUTP DW 0E913H ;PCHL DW 0E922H ;PCIX DW 0E923H ;PCIY DW 0C516H ;PUSH DW 0102CH ;RALR DW 0182CH ;RARR DW 04D1CH ;RETI DW 0451CH ;RETN DW 0002CH ;RLCR DW 0082CH ;RRCR DW 04325H ;SBCD DW 05325H ;SDED DW 02217H ;SHLD DW 02226H ;SIXD DW 02227H ;SIYD DW 0202CH ;SLAR DW 0F913H ;SPHL DW 0F922H ;SPIX DW 0F923H ;SPIY DW 0282CH ;SRAR DW 0382CH ;SRLR DW 07325H ;SSPD DW 0471CH ;STAI DW 04F1CH ;STAR DW 0021BH ;STAX DW 0EB13H ;XCHG DW 00E11H ;XREF DW 0E313H ;XTHL DW 0E322H ;XTIX DW 0E323H ;XTIY BLK5$B: DW 00F11H ;EJECT DW 00511H ;ENDIF DW 00911H ;MACRO DW 0BB1CH ;OUTDR DW 0B31CH ;OUTIR DW 00C11H ;TITLE *************************************** * JMP,CALL,RET LIST *************************************** JCR$LIST: DB 'NZ' DB 'Z ' DB 'NC' DB 'C ' DB 'PO' DB 'PE' DB 'P ' DB 'M ' *************************************** L0C8F: MVI E,0FFH INR B MVI C,0 *************************************** * SCAN FOR OPERATOR * SCHEME PROCEEDS AS A SUCCESSIVE APPROXIMATION *************************************** L0C94: XRA A MOV A,B ADD C RAR CMP E JZ L0CD0 MOV E,A PUSH H PUSH D PUSH B PUSH H MOV B,D MOV C,B MVI D,0 LXI H,0 L0CA8: DAD D DCR B JNZ L0CA8 POP D DAD D LXI D,STRING L0CB2: LDAX D CMP M ;COMPARE INPUT STRING TO LIST. INX D INX H JNZ L0CC2 DCR C JNZ L0CB2 POP B POP D POP H MOV A,E RET L0CC2: POP B POP D POP H JC L0CCC MOV C,E JMP L0C94 L0CCC: MOV B,E JMP L0C94 L0CD0: XRA A INR A RET L0CD3: LDA STRING LXI B,LC217 CPI 'J' RZ MVI B,0C4H CPI 'C' RZ LXI B,LC013 CPI 'R' RET *************************************** * SCAN JMP,CALL,RET CONDITIONAL LIST *************************************** SCAN$JCR: LDA STR$SIZE CPI 4 JNC L0D19 CPI 3 JZ L0CFE CPI 2 JNZ L0D19 LXI H,STRING+2 MVI M,' ' L0CFE: LXI B,8 LXI D,JCR$LIST L0D04: LXI H,STRING+1 LDAX D CMP M INX D JNZ L0D11 LDAX D INX H CMP M RZ L0D11: INX D INR B DCR C JNZ L0D04 INR C RET L0D19: XRA A INR A RET *************************************** * PREPARE TO SCAN FOR OPERATOR * FIRST INDEX INTO LISTS. *************************************** SCAN$OP: LDA STR$SIZE ;STRING CTR 0120H MOV C,A DCR A MOV E,A MVI D,0 PUSH D CPI 5 JNC L0D66 ;BR IF STRING > 5 CHAR. 0D66H LXI H,OPR$TAB$C1 ;BLOCK SIZE. 0AC1H DAD D MOV B,M ;B=NUMBER OF TABLE ENTRIES LXI H,OPR$TAB$B5 DAD D DAD D MOV D,M INX H MOV H,M MOV L,D ;HL = START TABLE ADDRESS MOV D,C ;D = NUMBER CHARS IN STRING CALL L0C8F JNZ L0D51 ;OPERATOR NOT LISTED POP D LXI H,OPR$TAB$C6 DAD D DAD D MOV E,M INX H MOV D,M ;POINT TO BLOCK ORG MOV L,A MVI H,0 DAD H DAD D MOV A,M ;GET INDEX VALUES (BLK(X)$B INX H MOV B,M RET L0D51: POP D CALL L0CD3 ;IS FIRST CHARACTER A J,C OR R? RNZ ;NO--RETURN OP NOT FOUND PUSH B CALL SCAN$JCR ;IS IT FOLLOWED BY A CONDITION CODE? MOV A,B POP B RNZ ;NO--RETURN OP NOT FOUND ORA A ;A HAS THE CONDITION CODE FROM SCAN$JCR RAL RAL RAL ORA B MOV B,A MOV A,C CMP A RET L0D66: POP D XRA A INR A RET *************************************** * EXPRESSION STACKS * CONSISTS OF THREE STACKS * 00 = PRIMARY LIMIT 16 * 01 = NEXT LEVEL 10 * 02 = NEXT LEVEL 10 *************************************** EXP$STAK$PTR02: DB 0 EXP$STACK$01: ;EXP$STACK$01 DB 0,0,0,0,0,0,0,0,0,0 EXP$STACK$02: DB 0,0,0,0,0,0,0,0,0,0 EXP$STACK$00: DB 0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0 EXP$STAK$PTR01: DB 0 EXP$STAK$PTR$00: DB 0 *************************************** * PUT ITEM ON EXPRESSION STACK *************************************** PUT$EXP00$00: XCHG LXI H,EXP$STAK$PTR$00 MOV A,M CPI 16 ;LIMIT EXCEEDED? JC PUT$EXP00$01 CALL EXP$ERROR MVI M,0 PUT$EXP00$01: MOV A,M INR M INR M MOV C,A MVI B,0 LXI H,EXP$STACK$00 DAD B MOV M,E INX H MOV M,D RET PUT$EXP$02: PUSH PSW LXI H,EXP$STAK$PTR01 MOV A,M CPI 10 ;LIMIT EXCEEDED? JC PUT$EXP$03 MVI M,0 CALL EXP$ERROR PUT$EXP$03: MOV E,M MVI D,0 INR M POP PSW LXI H,EXP$STACK$01 ;EXP$STACK$01H DAD D MOV M,A LXI H,EXP$STACK$02 DAD D MOV M,B RET *************************************** * GET AN EXPRESSION ITEM * RETURN WITH IT IN (HL) *************************************** GET$EXP$ITEM: LXI H,EXP$STAK$PTR$00 MOV A,M ORA A JNZ L0DDC CALL EXP$ERROR LXI H,0 RET L0DDC: DCR M DCR M MOV C,M MVI B,0 LXI H,EXP$STACK$00 DAD B MOV C,M INX H MOV H,M MOV L,C RET *************************************** * GET TWO EXPRESSION ITEMS * RETURN WITH 1ST IN H * 2ND IN D *************************************** GET$2EXP$ITEMS: CALL GET$EXP$ITEM XCHG CALL GET$EXP$ITEM RET *************************************** * GET EXPRESSION OPERATOR *************************************** GET$EXP$OP: MOV L,A MVI H,0 DAD H LXI D,EXP$OP$INDEX DAD D MOV E,M INX H MOV H,M MOV L,E PCHL EXP$OP$INDEX: DW AB$00 ; * DW AB$01 ; / DW AB$02 ; MOD DW AB$03 ; SHL DW AB$04 ; SHR DW AB$05 ; + DW AB$06 ; - DW AB$07 ; (unary) DW AB$08 ; NOT DW AB$09 ; AND DW AB$10 ; OR DW AB$11 ; XOR DW EXP$ERROR *************************************** * GET TWO EXPRESSION ITEMS * RETURN WITH 2ND ITEM IN ACC *************************************** GET$2EXP$01: CALL GET$2EXP$ITEMS MOV A,D ORA A JNZ L0E25 MOV A,E CPI 11H RC L0E25: CALL EXP$ERROR MVI A,10H RET L0E2B: XRA A SUB L MOV L,A MVI A,0 SBB H MOV H,A RET L0E33: CALL GET$2EXP$ITEMS L0E36: XCHG SHLD L0E69 LXI H,L0E6B MVI M,11H LXI B,0 PUSH B XRA A L0E44: MOV A,E RAL MOV E,A MOV A,D RAL MOV D,A DCR M POP H RZ MVI A,0 ACI 0 DAD H MOV B,H ADD L LHLD L0E69 SUB L MOV C,A MOV A,B SBB H MOV B,A PUSH B JNC L0E62 DAD B XTHL L0E62: LXI H,L0E6B CMC JMP L0E44 L0E69: DB 0,0 L0E6B: DB 0 L0E6C: MOV B,H MOV C,L LXI H,0 L0E71: XRA A MOV A,B RAR MOV B,A MOV A,C RAR MOV C,A JC L0E80 ORA B RZ JMP L0E81 L0E80: DAD D L0E81: XCHG DAD H XCHG JMP L0E71 ***************************** * MULTIPLY * ***************************** AB$00: CALL GET$2EXP$ITEMS CALL L0E6C JMP PUT$EXP00$00 ***************************** * DIVIDE / ***************************** AB$01: CALL L0E33 XCHG JMP PUT$EXP00$00 ***************************** * MODULO ARITHMETIC (MOD) ***************************** AB$02: CALL L0E33 JMP PUT$EXP00$00 ***************************** * SHIFT LEFT SHL ***************************** AB$03: CALL GET$2EXP$01 L0EA0: ORA A JZ PUT$EXP00$00 DAD H DCR A JMP L0EA0 ***************************** * SHIFT RIGHT SHR ***************************** AB$04: CALL GET$2EXP$01 L0EAC: ORA A JZ PUT$EXP00$00 PUSH PSW XRA A MOV A,H RAR MOV H,A MOV A,L RAR MOV L,A POP PSW DCR A JMP L0EAC ***************************** * PLUS + ***************************** AB$05: CALL GET$2EXP$ITEMS L0EC0: DAD D JMP PUT$EXP00$00 ***************************** * MINUS - ***************************** AB$06: CALL GET$2EXP$ITEMS XCHG CALL L0E2B JMP L0EC0 ***************************** AB$07: CALL GET$EXP$ITEM L0ED1: CALL L0E2B JMP PUT$EXP00$00 ***************************** * NOT ***************************** AB$08: CALL GET$EXP$ITEM INX H JMP L0ED1 ***************************** * AND ***************************** AB$09: CALL GET$2EXP$ITEMS MOV A,D ANA H MOV H,A MOV A,E ANA L MOV L,A JMP PUT$EXP00$00 ***************************** * OR ***************************** AB$10: CALL GET$2EXP$ITEMS MOV A,D ORA H MOV H,A MOV A,E ORA L MOV L,A JMP PUT$EXP00$00 ***************************** * XOR ***************************** AB$11: CALL GET$2EXP$ITEMS MOV A,D XRA H MOV H,A MOV A,E XRA L MOV L,A JMP PUT$EXP00$00 ***************************** * Input Expression Evaluator ***************************** L0F02: LDA STR$TYPE CPI 4 RNZ LDA STRING CPI CR ;Check Terminators RZ CPI ';' RZ CPI ',' RZ CPI '!' RZ CPI '[' RZ CPI ']' RZ RET L0F17: XRA A STA EXP$STAK$PTR01 STA EXP$STAK$PTR$00 DCR A STA EXP$STAK$PTR02 LXI H,0 SHLD L0161 L0F28: CALL L0F02 JNZ L0F5B L0F2E: LXI H,EXP$STAK$PTR01 MOV A,M ORA A JZ L0F46 DCR M MOV E,A DCR E MVI D,0 LXI H,EXP$STACK$01 DAD D MOV A,M CALL GET$EXP$OP JMP L0F2E L0F46: LDA EXP$STAK$PTR$00 CPI 2 CNZ EXP$ERROR LDA PRN$LINE CPI ' ' RNZ LHLD EXP$STACK$00 SHLD L0161 RET L0F5B: LDA PRN$LINE CPI ' ' JNZ L107D LDA STR$TYPE CPI 3 JNZ L0F87 LDA STR$SIZE ORA A CZ EXP$ERROR CPI 3 CNC EXP$ERROR MVI D,0 LXI H,STRING MOV E,M INX H DCR A JZ L0F83 MOV D,M L0F83: XCHG JMP L106F L0F87: CPI 2 JNZ L0F92 LHLD STR$VAL JMP L106F L0F92: CALL SCAN$OP JNZ L102F CPI 10H JNC L1024 CPI 0CH MOV C,A LDA EXP$STAK$PTR02 JNZ L0FB3 ORA A CZ EXP$ERROR MVI A,0FFH STA EXP$STAK$PTR02 MOV A,C JMP L1001 L0FB3: ORA A JNZ L100C L0FB7: PUSH B LDA EXP$STAK$PTR01 ORA A JZ L0FDC MOV E,A DCR E MVI D,0 LXI H,EXP$STACK$02 DAD D MOV A,M CMP B JC L0FDC LXI H,EXP$STAK$PTR01 MOV M,E LXI H,EXP$STACK$01 DAD D MOV A,M CALL GET$EXP$OP POP B JMP L0FB7 L0FDC: POP B MOV A,C CPI CR JNZ L1001 LXI H,EXP$STAK$PTR01 MOV A,M ORA A JZ L0FFA DCR A MOV M,A MOV E,A MVI D,0 LXI H,EXP$STACK$01 DAD D MOV A,M CPI 0CH JZ L0FFD L0FFA: CALL EXP$ERROR L0FFD: XRA A JMP L1006 L1001: CALL PUT$EXP$02 MVI A,0FFH L1006: STA EXP$STAK$PTR02 JMP L107D L100C: MOV A,C CPI 5 JZ L107D CPI 6 JNZ L101C INR A MOV C,A JMP L0FB7 L101C: CPI 8 CNZ EXP$ERROR JMP L0FB7 L1024: CPI 11H CZ EXP$ERROR MOV L,B MVI H,0 JMP L106F L102F: LDA STR$TYPE CPI 4 JNZ L104E LDA STRING CPI '$' ;24H JZ L1048 CALL EXP$ERROR LXI H,0 JMP L106F L1048: LHLD LOC$CTR2 JMP L106F L104E: CALL SYM$SERCH CALL SYM$05 JNZ L1062 MVI A,'P' ;PHASE ERROR. 50H CALL ERR$COD CALL POST$SYM JMP L106C L1062: CALL SYM$18 ANI 7 MVI A,'U' ;UNDEFINED SYMBOL. 55H CZ ERR$COD L106C: CALL GET$SYM$VAL ; ; PUT XREF ITEM IN TABLE ; LDA PASS$NM ORA A JZ L106F LDA FLAG$BYT ANI XREFF ;XREF FLAG? JZ L106F PUSH H PUSH D INX D ;POINT TO SYMBOL LINE #. LHLD XREF$PTR ;GET NEXT XREF LOCATION LDAX D ;MOV IN SYMBOL LINE #. MOV M,A INX D INX H LDAX D MOV M,A INX H LDA LINE$NM MOV M,A INX H LDA LINE$NM+1 MOV M,A LXI D,-7 DAD D SHLD XREF$PTR XCHG LHLD SYM$TAB$PTR MOV A,L SUB E MOV A,H SBB D POP D POP H JNC SYM$15 L106F: LDA EXP$STAK$PTR02 ORA A CZ EXP$ERROR XRA A STA EXP$STAK$PTR02 CALL PUT$EXP00$00 L107D: CALL GET$STR JMP L0F28 ***************************** * EXPRESSION ERROR ***************************** EXP$ERROR: PUSH H MVI A,'E' ;EXPRESSION ERROR. 45H CALL ERR$COD POP H RET ***************************** * START OF PROCESSING ***************************** MAIN: XRA A STA PASS$NM ;RESET PASS # LHLD CPM+6 ;GET TOP OF MEM LXI D,-808H ;BELOW CCP DAD D SHLD CCP$BEGIN LXI D,-8 DAD D SHLD XREF$PTR ;INIT XREF POINTER CALL CL$SYM$HASH$LST ;CLEAR SYM$HASH$LST MAIN$00: CALL PRN$END$LINE ;PRINT END LINE LDA PASS$NM ADI '1' STA PAS$MSG+5 LXI H,PAS$MSG ;ANNUNCIATE PASS 1 CALL MSGOUT LXI H,SRCFCB ;MOVE FILE NAME CALL MOVNAM ;FROM TFCB TO SRC FCB CALL RESET$SRC ;RESET SOURCE FILE XRA A STA COPY$LEVEL STA OBJ$BYTE$CNT LXI H,0 SHLD L1686 SHLD LOC$CTR1 SHLD LOC$CTR2 SHLD L1688 MAIN$01: CALL GET$STR ;GET STRING MAIN$02: LDA STR$TYPE CPI 2 ;IS IT NUMERIC? JZ MAIN$01 CPI 4 ;OR OTHER DELIMITERS JNZ MAIN$03 LDA STRING CPI '*' JNZ END$LINE CALL L159B JNZ SYNTAX$ERR JMP E$LINE$01 MAIN$03: CPI 1 ;IF IT ISNT ALPHA, THEN ERROR JNZ SYNTAX$ERR CALL SCAN$OP ;SCAN OPERATION. JZ L1125 ;BR IF OPERATION FOUND. CALL SYM$SERCH ;ELSE SEE IF ITS A SYMBOL CALL SYM$05 JNZ MAIN$04 CALL POST$SYM LDA PASS$NM ORA A CNZ PHASE$ERR JMP MAIN$05 MAIN$04: CALL SYM$18 CPI 6 JNZ MAIN$05 CALL NOT$IMP$ERR JMP E$LINE$01 MAIN$05: LHLD L1686 MOV A,L ORA H CNZ LABLE$ERR LHLD SYM$HASH$PTR SHLD L1686 CALL GET$STR LDA STR$TYPE CPI 4 JNZ MAIN$02 LDA STRING CPI ':' JNZ MAIN$02 JMP MAIN$01