* *** FORMULA SYNTAX CHECKER * FSC NOP CLA SET LEFT PARENTHESIS STA TEMPS,I COUNT TO ZERO FSC1 CCA SET UNARY FLAG STA UFLAG TO TRUE FSC2 JSB VAROP LOOK FOR VARIABLE OPERAND JMP FSC9 NOT FOUND JMP FSC6 SUBSCRIPTED VARIABLE FOUND JSB LETCK FOLLOWED BY LETTER? JMP FSC6 NO LDB M2 YES, LOOK FOR JSB MCBCK 'AND' OR 'OR' LDA TEMP1 NOT FOUND, FETCH PREVIOUS ALF,ALF CHARACTER AND LEFT-JUSTIFY IT IOR TEMP2 ADD LATEST CHARACTER CPA FN 'FN'? JMP FSC4 YES STA SBPTR,I NO, LDA PDFNS SEARCH FOR LDB M11 PREDEFINED JSB TSRCH,I FUNCTION JMP FSC3 NOT FOUND ALF,ALF ASSEMBLE ALF,RAR OPERAND IOR FLGBT ADD FLAG BIT JMP FSC5 FSC3 ISZ UFLAG 'NOT' PERMITTED? JMP FSC8-1 NO LDA ANOT YES, CCB SEARCH FOR JSB TSRCH,I 'NOT' JMP FSC8-1 'NOT' NOT FOUND CCB RETRIEVE ADB SBPTR PREVIOUS WORD LDA 1,I WORD AND OPMSK SET TO STA 1,I NULL OPERAND JMP FSC14 FSC4 JSB GETCR IDENTIFYING JMP SYNE4 FUNCTION JSB LETCK LETTER? JMP SYNE4 NO ADA D100 YES, ALF ASSEMBLE AND FSC5 ADA .15 SAVE STA TEMP1 FUNCTION IDENTIFIER CCB RETRIEVE ADB SBPTR PREVIOUS LDA 1,I PROGRAM WORD AND OPMSK EXTRACT OPERATOR, IOR TEMP1 APPEND OPERAND, STA 1,I AND RECORD JSB GETCR LEFT PARENTHESIS FSCE1 JSB ERROR OR JSB LPCK LEFT BRACKET? JSB FRCUR YES, SAVE LOCAL VARIABLES OF FSC JSB FSC FETCH ACTUAL PARAMETER JSB FPOP RESTORE LOCAL VARIABLE OF FSC JSB RPCK FETCH RIGHT PARENTHESIS JMP FSC10+1 FSC7 LDB M2 JSB SYMCK DEF RPARN-1 JMP FSC8 LDA B4000 STA SBPTR,I LDA .41 CCB ADB TEMPS,I SSB JMP FSC8 STB TEMPS,I ISZ SBPTR JSB GETCR LDA .10 FSC6 CPA .10 END OF FORMULA? JMP FSC8 YES STA UFLAG NO, SET UNARY FLAG TO FALSE LDB M5 JSB MCBCK BINARY OPERATOR LDA SBPTR,I NOT FOUND, ALF,ALF RESTORE AND B177 CHARACTER LDB MSFLG SEARCH JSB SYMCK FOR A DEF PLUS-1 BINARY OPERATOR RSS NOT JMP FSC12 CCB ASSIGNMENT JSB SYMCK DEF ASSOP-1 OPERATOR? JMP FSC7 NO STA SFLAG YES, SET JMP FSC1 'STORE OCCURRED' FLAG LDA TEMP2 FSC8 LDB TEMPS,I ALL LEFT PARENTHESES SZB MATCHED? FSCE2 JSB ERROR NO STB SBPTR,I YES, RECORD AN ISZ SBPTR END-OF-FORMULA AND JMP FSC,I EXIT WITH CHARACTER IN (A) FSC9 CPA .40 JMP FSC11 CPA B133 JMP FSC11 CLB STB SIGN POSITIVE JSB NUMCK NUMBER? JMP FSC13 FSC10 JSB NUMOP YES, FIX UP PRECEDING OPERATOR LDB M9 UPDATE STB MSFLG MULTIPLE STORE JMP FSC6 FLAG FSC11 ISZ SBPTR LDA B2300 STA SBPTR,I ISZ TEMPS,I FSC12 LDB M9 STB MSFLG JMP FSC1 FSC13 ISZ UFLAG UNARY OPERATORS PERMITTED? FSCE3 JSB ERROR NO LDB UNMNC CPA .43 '+'? JMP *+4 YES CPA .45 NO, '-'? JMP *+3 YES JMP FSCE3 NO ADB B3000 STORE ISZ SBPTR UNARY STB SBPTR,I OPERATOR FSC14 LDB M9 UPDATE STB MSFLG MULTIPLE STORE FLAG JMP FSC2 FLAG * *** CHECK FOR MULTICHARACTER BINARY OPERATOR * MCBCK NOP STA SBPTR,I SEARCH LDA MCBOP FOR 'AND' JSB TSRCH,I OR 'OR' JMP MCBCK,I NOT FOUND JMP FSC12 ** *** RESTORE FSC LOCAL QUANTITIES ** ** FPOP NOP STA TEMP1 SAVE CHARACTER LDB TEMPS ADB M5 STB TEMPS RESTORE S-STACK TOP INB LDA 1,I STA MSFLG RESTORE MULTIPLE STORE FLAG INB LDA 1,I STA UFLAG RESTORE UNARY OPERATOR FLAG INB LDA 1,I STA FSC RESTORE FSC RETURN ADDRESS INB LDA 1,I RESTORE STA VAROP VAROP RETURN ADDRESS LDA TEMP1 RETRIEVE CHARACTER JMP FPOP,I ** *** SAVE LOCAL QUANTITIES OF FSC ** ** FRCUR NOP LDB TEMPS FETCH CURRENT S-STACK POINTER INB UPDATE IT LDA MSFLG DUMP MULTIPLE STORE STA 1,I FLAG ON S-STACK INB LDA UFLAG STACK UNARY OPERATOR STA 1,I FLAG INB LDA FSC STACK FSC STA 1,I RETURN ADDRESS LDA VAROP STACK VAROP RETURN ADDRESS JSB SSOV AND CHECK FOR S-STACK OVERFLOW JMP FRCUR,I ** *** PUT ITEM ON S-STACK AND CHECK FOR OVERFLOW ** ** SSOV NOP STORE QUANTITY INB ADVANCE S-STACK POINTER STA 1,I SAVE ITEM IN (A) INB ADVANCE S-STACK POINTER STB TEMPS AND RECORD IT CMB,INB LAST WORD ADB LWAM SSB EXCEEDED? FSCE4 JSB ERROR YES JMP SSOV,I ** *** CHECK FOR SUBSCRIPT PART ** ** SBSCK NOP CHARACTER IN (A) LDB M2 LEFT BRACKET JSB SYMCK OR DEF LBRAC-1 LEFT PARENTHESIS? JMP SBSCK,I NO, RETURN VIA (P+1) ISZ SBSCK YES, SET RETURN TO (P+2) LDA ARYAD,I SET AND M16 ARRAY INA TO STA ARYAD,I SINGLE SUBSCRIPT LDA B2200 STA SBPTR,I RECORD IT CLB DIM OR COM CPB DFLAG STATEMENT? JMP SBSC3 NO JSB PGINT,I FETCH INTEGER DEF M256 SUBSCRIPT BOUND BLF,BLF SAVE STB TEMP1 BOUND CCB JSB SYMCK NEXT CHARACTER DEF SCMMA-1 A COMMA? JMP SBSC1 ISZ ARYAD,I NOTE SECOND SUBSCRIPT JSB PGINT,I FETCH SECOND DEF M256 INTEGER SUBSCRIPT BOUND RSS SBSC1 CLB,INB ISZ PFLAG COM STATEMENT? JMP SBSC2 NO STA TEMP2 SAVE CHARACTER LDA 1 IOR TEMP1 RETRIEVE FIRST BOUND JSB MDIM FIND STORAGE NEED ADA TEMPS+7 UPDATE COM STA TEMPS+7 STORAGE POINTER LDA TEMP2 RETRIEVE NEXT CHARACTER SBSC2 LDB M2 RIGHT PARENTHESIS JSB SYMCK OR DEF RPARN-1 RIGHT BRACKET? JMP FSCE2 NO LDA LF STA SBPTR,I RIGHT BRACKET ISZ SBPTR ADJUST S-BUFFER POINTER JSB GETCR FETCH FOLLOWING LDA .10 CHARACTER LDB DFLAG SZB JMP SBSCK,I YES, EXIT JSB FPOP RESTORE FSC LOCAL VARIABLES LDB M2 RESTORE ADB TEMPS S-STACK STB TEMPS POINTER INB FETCH LDB 1,I RETURN ADDRESS JMP 1,I AND EXIT SBSC3 LDA SBSCK SAVE LDB TEMPS RETURN ADDRESS JSB SSOV ON S-STACK JSB FRCUR SAVE FSC LOCAL VARIABLES LDB M9 SET MULTIPLE STORE FLAG STB MSFLG TO FALSE LDA ARYAD SAVE LDB TEMPS OPERAND JSB SSOV ADDRESS JSB FSC GET SUBSCRIPT FORMULA CCB CANCEL ADB SBPTR END-OF-FORMULA STB SBPTR OPERATOR LDB M2 RESTORE ADB TEMPS S-STACK STB TEMPS POINTER INB RESTORE LDB 1,I OPERAND STB ARYAD ADDRESS CCB CANCEL OTHER JSB SYMCK DEF SCMMA-1 JMP SBSC2 ISZ ARYAD,I JSB FSC CCB ADB SBPTR STB SBPTR JMP SBSC2 ** *** CHECK SYNTAX OF ARRAY DEFINITIONS ** ** ARRYS NOP JSB ARRID FETCH ARRAY IDENTIFIER JSB SBSCK RECORD A SUBSCRIPT JSB ERROR MISSING SUBSCRIPT ARRE1 CPA .10 END-OF-STATEMENT? JMP ARRYS,I YES, RETURN VIA (P+1) CCB NO, JSB SYMCK MUST BE DEF COMMA-1 A COMMA JMP NOEOF ISN'T ISZ ARRYS IS, RETURN JMP ARRYS,I VIA (P+2) ** *** FETCH ARRAY IDENTIFIER ** ** ARRID NOP JSB LTR FETCH LETTER JSB ERROR NONE FOUND ARRE2 LDA SBPTR SAVE STA ARYAD OPERAND ADDRESS LDA TEMP1 RECORD LDB .46 ARRAY JSB STROP IDENTIFIER LDA TEMP2 RETRIEVE FOLLOWING CHARACTER JMP ARRID,I ** *** CHECK FOR VARIABLE OPERAND ** ** VAROP NOP JSB LTR LETTER? JMP VAROP,I NO, EXIT VIA (P+1) ISZ VAROP CPA .40 LEFT PARENTHESIS? JMP VARO5 YES CPA B133 NO, LEFT BRACKET? JMP VARO5 YES ISZ VAROP NO JSB DIGCK DIGIT? JMP VARO1 NO LDA TEMP1 YES, RETRIEVE LETTER, ADB .48 AND RESTORE ASCII DIGIT STB TEMP1 JSB STROP RECORD VARIABLE JSB GETCR FETCH FOLLOWING LDA .10 CHARACTER JMP VARO2 VARO1 LDA TEMP1 RETRIEVE LETTER, LDB .47 SET 'NO DIGIT', JSB STROP AND RECORD VARIABLE LDA TEMP2 RETRIEVE FOLLOWING CHARACTER VARO2 STA TEMP2 SAVE CHARACTER CLB INSIDE A CPB PFLAG DEF STATEMENT? JMP VAROP,I NO, EXIT VIA (P+3) CCB ADB SBPTR RETRIEVE LDA 1,I AND MSK1 OPERAND CPA PFLAG MATCH PARAMETER? JMP VARO4 YES VARO3 LDA TEMP2 NO, RETRIEVE JMP VAROP,I CHARACTER AND EXIT VIA (P+3) VARO4 LDA 1,I SET OPERAND TO IOR FLGBT ACTUAL PARAMETER STA 1,I AND RECORD IT JMP VARO3 VARO5 LDA SBPTR SAVE STA ARYAD OPERAND ADDRESS LDA TEMP1 RETRIEVE LETTER LDB .46 RECORD JSB STROP ARRAY IDENTIFIER LDA B133 RETRIEVE LEFT BRACKET JSB SBSCK FETCH SUBSCRIPT NOP JMP VAROP,I EXIT VIA (P+2) ** *** FETCH A LETTER ** ** LTR NOP JSB GETCR LDA .10 JSB LETCK LETTER? JMP LTR,I NO, EXIT VIA (P+1) ISZ LTR YES, STA TEMP1 SAVE IT JSB GETCR NEXT CHARACTER LDA .10 TO (A) STA TEMP2 SAVE SECOND CHARACTER JMP LTR,I EXIT VIA (P+2) ** *** STORE AN OPERAND NAME ** ** STROP NOP LETTER IN (A), NUMBER IN (B) ADA D100 NUMERICALLY ADJUST THE ADB D53 OPERAND NAME ALF COMBINE THE IOR 1 TWO PARTS IOR SBPTR,I COMPLETE OPERAND-OPERATOR PAIR STA SBPTR,I AND STORE IT ISZ SBPTR UPDATE S-BUFFER POINTER JMP STROP,I ** *** CHECK FOR LEFT PARENTHESIS ** ** LPCK NOP CHARACTER IN (A) LDB M2 LEFT PARENTHESIS JSB SYMCK OR DEF LBRAC-1 LEFT BRACKET? JMP FSCE1 NO LDA B2300 STA SBPTR,I PARENTHESIS JMP LPCK,I EXIT ** *** CHECK FOR RIGHT PARENTHESIS ** ** RPCK NOP LDB M2 RIGHT PARENTHESIS JSB SYMCK OR DEF RPARN-1 RIGHT BRACKET? JMP FSCE2 NO LDA B4000 STA SBPTR,I PARENTHESIS ISZ SBPTR UPDATE SYNTAX BUFFER POINTER JSB GETCR FETCH LDA .10 FOLLOWING CHARACTER JMP RPCK,I ** *** FETCH PARENTHESIZED FORMULA ** ** GETPF NOP JSB GETCR JMP EOF ISZ SBPTR JSB LPCK FETCH LEFT PARENTHESIS JSB FSC FETCH FORMULA JSB RPCK GET RIGHT PARENTHESIS JMP GETPF,I ** *** FLAG OPERATOR WHICH PRECEDES NUMBER ** ** NUMOP NOP STA TEMP4 LDB M3 FETCH ADB SBPTR PRECEDING LDA 1,I OPERATOR IOR FLGBT ADD FLAG BIT STA 1,I REPLACE OPERATOR LDA TEMP4 JMP NUMOP,I SKP * * SYSTEM COMMAND TABLE * SYCMD OCT 23004 STCMD ASC 2,STOP STOP COMMAND ENTRY * OCT 00003 ASC 2,RUN RUN COMMAND * OCT 02003 ASC 2,SCR SCRATCH COMMAND ENTRY * OCT 04005 ASC 3,PUNCH * OCT 03004 ASC 2,LIST LIST COMMAND * OCT 34004 ASC 2,TAPE TAPE COMMAND * OCT 41003 ASC 2,BYE LOG-OFF COMMAND * OCT 42004 ASC 2,MESG MESSAGE COMMAND * OCT 43003 ASC 2,REN RENUMBER COMMAND ** *** PRINT NAME TABLE FOR OPERATORS ** ** LET OCT 32003 BITS 15-9 OF THE LABELLED WORD ASC 2,LET DIM OCT 33003 ARE THE BASIC CODE OPERATOR ASC 2,DIM COM OCT 34003 NUMBERS. BITS 2-0 ARE THE ASC 2,COM DEF OCT 35003 LENGTH IN CHARACTERS OF THE ASC 2,DEF REM OCT 36003 SYMBOL. THE ASCII VERSION OF ASC 2,REM GOTO OCT 37004 THE SYMBOL FOLLOWS. ASC 2,GOTO IF OCT 40002 ASC 1,IF FOR OCT 41003 ASC 2,FOR NEXT OCT 42004 ASC 2,NEXT GOSUB OCT 43005 ASC 3,GOSUB RTRN OCT 44006 ASC 3,RETURN END OCT 45003 ASC 2,END STP OCT 46004 ASC 2,STOP DATA OCT 51004 ASC 2,DATA READ OCT 52004 ASC 2,READ PRINT OCT 53005 ASC 3,PRINT INPUT OCT 54005 ASC 3,INPUT RSTOR OCT 55007 ASC 4,RESTORE MAT OCT 56003 ASC 2,MAT THEN OCT 57004 ASC 2,THEN TO OCT 60002 ASC 1,TO STEP OCT 61004 ASC 2,STEP NOT OCT 27003 ASC 2,NOT AND OCT 26003 ASC 2,AND OR OCT 25002 ASC 1,OR GTE OCT 30002 ASC 1,>= LTE OCT 31002 ASC 1,<= AUNEQ OCT 17002 ASC 1,<> TAB OCT 1003 ASC 2,TAB SIN OCT 2003 THIS SECTION HAS THE PRE-DEFINED ASC 2,SIN COS OCT 3003 FUNCTIONS. HERE BITS 13-9 ARE ASC 2,COS TAN OCT 4003 THE IDENTIFYING NUMBER OF THE ASC 2,TAN ATN OCT 5003 FUNCTION. ASC 2,ATN EXPN OCT 6003 ASC 2,EXP LOG OCT 7003 ASC 2,LOG ABS OCT 10003 ASC 2,ABS SQR OCT 11003 ASC 2,SQR INT OCT 12003 ASC 2,INT RND OCT 13003 ASC 2,RND SGN OCT 14003 ASC 2,SGN ZER OCT 15003 MATRIX FUNCTIONS ASC 2,ZER CON OCT 16003 ASC 2,CON IDN OCT 17003 ASC 2,IDN INV OCT 20003 ASC 2,INV TRN OCT 21003 ASC 2,TRN ** *** TABLE SEARCH FOR MULTICHARACTER SYMBOLS ** ** TBSRH NOP STA TABLE STORE TABLE ADDRESS STB LNGTH STORE -(NUMBER OF ENTRIES) LDA BADDR SAVE STA TEMP3 INPUT LDA CCNT BUFFER STA TEMP4 STATUS LDA SBPTR INITIALIZE END-OF-SYMBOL STA SMEND POINTER CLA,INA COUNT FIRST CHARACTER OF STA SLENG SYMBOL LDA SBPTR,I FETCH PARTIAL SYMBOL AND B177 TWO CPA SBPTR,I CHARACTERS? RSS NO JMP TSR10 YES ALF,ALF LEFT-JUSTIFY IOR .32 FIRST CHARACTER AND STA SBPTR,I APPEND BLANK TSRC1 JSB GETCR FETCH NEXT CHARACTER JMP TSRC9 END-OF-STATEMENT LDB SLENG CHECK FOR CPB .7 IMPOSSIBLE LENGTH JMP TSRC9 SLB EVEN-NUMBERED CHARACTER? JMP TSRC2 YES ISZ SMEND NO, FETCH FRESH WORD, ALF,ALF LEFT-JUSTIFY CHARACTER, IOR .32 APPEND BLANK, STA SMEND,I AND STORE JMP TSR10 TSRC2 ADA M32 DELETE BLANK, ADA SMEND,I FILL SECOND CHARACTER, STA SMEND,I AND STORE TSR10 ISZ SLENG COUNT IT LDB LNGTH INITIALIZE TABLE LENGTH STB COUNT COUNTER LDA TABLE TSRC3 STA TBLPT SET TABLE POINTER LDA TBLPT,I EXTRACT SYMBOL LENGTH AND .7 FROM TABLE AND COMPARE CPA SLENG WITH CURRENT SYMBOL JMP TSRC5 EQUAL? TSRC4 ADA .3 DIFFERENT, ARS UPDATE ADA TBLPT TABLE POINTER ISZ COUNT MORE ENTRIES? JMP TSRC3 YES JMP TSRC1 NO TSRC5 LDB TBLPT SET POINTER TO STB TSPTR TABLE SYMBOL LDB SBPTR SET (B) TO INPUT JMP TSRC7 SYMBOL POINTER TSRC6 CPB SMEND ALL OF SYMBOL CONSIDERED? JMP TSRC8 YES, MATCH OCCURRED INB NO, INCREMENT TSRC7 ISZ TSPTR SYMBOL POINTERS LDA TSPTR,I FETCH WORD FROM TABLE CPA 1,I MATCH WITH INPUT SYMBOL? JMP TSRC6 YES LDA SLENG NO, WRONG JMP TSRC4 SYMBOL TSRC8 LDA TBLPT,I EXTRACT AND OPMSK SYMBOL CODE STA SBPTR,I ISZ TBSRH AND RETURN VIA JMP TBSRH,I 'SUCCESS' EXIT TSRC9 LDA TEMP3 RESTORE STA BADDR INPUT LDA TEMP4 BUFFER STA CCNT STATUS JMP TBSRH,I 'FAILURE' EXIT ** *** FETCH AND RECORD PROGRAM INTEGER ** ** PRGIN NOP LDA SBPTR,I SET IOR FLGBT 'INTEGER ADA .3 FOLLOWS' STA SBPTR,I OPERAND LDA PRGIN,I GIVE ADDRESS STA PRGI1 TO INTCK ISZ SBPTR JSB GETCR SYE25 JSB ERROR JSB INTCK FETCH PRGI1 NOP ISZ PRGIN JMP PRGIN,I ** *** BUILD AN INTEGER ** ** INTCK NOP CHARACTER IN (A) CLB STORE STB INTGR PARTIAL RESULT INTC1 JSB DIGCK DIGIT? JMP INTC2 NO CLO LDB INTGR MULTIPLY ADB 1 PARTIAL ADB 1 RESULT ADB INTGR BY ADB 1 10 ADB 0 ADD LATEST DIGIT SOC OVERFLOW? JMP SYE25 YES STB INTGR STORE PARTIAL RESULT JSB GETCR NO, FETCH LDA .10 NEXT CHARACTER JMP INTC1 INTC2 LDB INTGR ZERO SZB,RSS INTEGER? JMP SYE25 YES STB SBPTR,I NO, RECORD IT LDB INTCK,I INTEGER LDB 1,I TOO ADB INTGR LARGE? SSB,RSS JMP SYE25 YES LDB INTGR NO, ISZ SBPTR RETURN WITH ISZ INTCK INTEGER JMP INTCK,I IN (B) ** *** PROCESS CHARACTER STRING ** ** CHRST NOP STA TEMP2 RECORD TERMINATOR CHARACTER LDA .10 DUMMY STA BLANK DELETE CHARACTER CHRS1 JSB GETCR JMP CHRS3 TO END-OF-STATEMENT EXIT CPA TEMP2 TERMINATOR CHARACTER? JMP CHRS2 YES IOR SBPTR,I NO, FILL STA SBPTR,I SECOND CHARACTER JSB GETCR JMP CHRS3 TO END-OF-STATEMENT EXIT CPA TEMP2 TERMINATOR CHARACTER? JMP CHRS2 YES ISZ SBPTR NO, MOVE TO NEW WORD ALF,ALF AND STORE STA SBPTR,I FIRST CHARACTER JMP CHRS1 CHRS2 ISZ CHRST SET (P+2) EXIT CHRS3 ISZ SBPTR MOVE TO NEXT BUFFER WORD LDA .32 RESTORE BLANK AS STA BLANK DELETE CHARACTER JMP CHRST,I ** *** DELETE STATEMENT ** ** DLSTM LDA SBUFA,I LOAD SEQUENCE NUMBER JSB FNDPS FIND STATEMENT TO BE DELETED JMP PEXMA,I JMP PEXMA,I CLA ZERO WORD SKIP FOR DESTINATION INB ADDRESS OF SOURCE WORD SKIP IN B JSB CLPRG CLOSE UP PROGRAM JMP PEXMA,I * *** ACCEPT STATEMENT * ACTST LDA SBUFA COMPUTE CMA,INA LENGTH ADA SBPTR OF STATEMENT STA TEMP,I AND RECORD IT LDA SBUFA,I LOAD SEQUENCE NUMBER JSB FNDPS SEARCH ON SEQUENCE NUMBER JMP ACCS1 APPEND STATEMENT TO PROGRAM JMP ACCS4 INSERT STATEMENT IN PROGRAM INB REPLACE STATEMENT IN PROGRAM LDA 1,I COMPARE LENGTHS OF CMA,INA STATEMENT BEING REPLACED ADA TEMP,I AND STATEMENT SZA,RSS REPLACING IT JMP ACCS2 EQUAL SSA,RSS JMP ACCS4+1 SHORTER LDA TEMP,I LONGER, JSB CLPRG CLOSE UP PROGRAM JMP ACCS2 ACCS1 LDA TEMP,I LOAD PROGRAM SPACE REQUIREMENT JSB OVCHK SUFFICIENT PROGRAM SPACE LEFT? ACCS2 CLB YES, SET COUNTER TO ZERO LDA SBUFA INITIALIZE STA TEMP2 SOURCE ADDRESS ACCS3 LDA TEMP2,I TRANSFER WORD FROM STA TEMP3,I S-BUFFER TO PROGRAM SPACE ISZ TEMP2 INCREMENT SOURCE AND ISZ TEMP3 DESTINATION ADDRESSES INB BUMP COUNTER CPB TEMP,I ENTIRE STATEMENT MOVED? JMP PEXMA,I JMP ACCS3 NO ACCS4 LDA TEMP,I LOAD PROGRAM SPACE REQUIREMENT JSB OVCHK SUFFICIENT PROGRAM SPACE LEFT? JSB MVTOH MAKE JMP ACCS2 ROOM ** *** FIND SEQUENTIAL POSITION ** ** FNDPS NOP STA TEMP3 SAVE SEQUENCE NUMBER LDB PBUFF STARTING ADDRESS FNDP1 CPB PBPTR END OF PROGRAM? JMP FNDP4 YES, EXIT VIA (P+1) LDA 1,I SUBTRACT PROGRAM CMA,INA SEQUENCE NUMBER FROM ADA TEMP3 S-BUFFER SEQUENCE NUMBER SZA,RSS EQUAL? JMP FNDP2 YES, SET EXIT TO (P+3) SSA NO, P-SEQ NO > S-SEQ NO ? JMP FNDP3 YES, SET EXIT TO (P+2) LDA 1 POINT (A) TO INA PROGRAM ADDRESS INCREMENT ADB 0,I COMPUTE NEW ADDRESS JMP FNDP1 FNDP2 ISZ FNDPS FNDP3 ISZ FNDPS FNDP4 STB TEMP3 SAVE STATEMENT ADDRESS JMP FNDPS,I ** *** DELETE SPACE IN PROGRAM ** ** CLPRG NOP REFERENCE LOCATION IN TEMP3 ADA TEMP3 SKIP (A) LOCATIONS FROM TEMP3 STA TEMP4 AND SAVE DESTINATION ADDRESS LDB 1,I SKIP TO END OF STATEMENT BEING ADB TEMP3 DELETED, SOURCE ADDRESS IN (B) CLPR1 CPB PBPTR ALL OF PROGRAM MOVED? JMP CLPR2 YES LDA 1,I NO, MOVE WORD FROM SOURCE TO STA TEMP4,I DESTINATION ADDRESS ISZ TEMP4 INCREMENT DESTINATION ADDRESS INB INCREMENT SOURCE ADDRESS JMP CLPR1 CLPR2 LDA TEMP4 SET END-OF-PROGRAM STA PBPTR POINTER JMP CLPRG,I ** *** CHECK FOR PROGRAM SPACE OVERFLOW ** ** OVCHK NOP NEW WORD REQUIREMENT IN (A) LDB PBPTR SET SOURCE ADDRESS STB TEMP2 FOR PROGRAM RELOCATION ADB 0 SET DESTINATION STB TEMP4 ADDRESS CMB,INB SUBTRACT FROM ADDRESS ADB LWAM SSB NON-NEGATIVE RESULT? JMP FSCEF,I NO, PROGRAM SPACE OVERFLOW LDB TEMP4 YES, RELOCATE FREE STB PBPTR PROGRAM SPACE POINTER JMP OVCHK,I 22255-80012 D