** *** TAKE ARITHMETIC INVERSE ** ** ARINV NOP NUMBER IN (A) AND (B) STA STK4 LDA 1 LDB STK4 CMB,CLE COMPLEMENT HIGH PART XOR M256 COMPLEMENT LOW PART ADA B400 ADD IN 1 SEZ,RSS OVERFLOW? JMP ARIN2 NO INB YES, INCREMENT HIGH MANTISSA CPB FLGBT OVERFLOW? JMP ARIN1 YES CPB UNNRM NO, NEGATIVE UNNORMALIZED? RSS YES JMP ARIN2 NO ARIN1 ADB UNNRM FIX HIGH MANTISSA SLA,RAR POSITION EXPONENT IOR MSK4 FILL IN BITS IF NEGATIVE SSB,RSS POSITIVE? INA,RSS YES, BUMP EXPONENT ADA M1 NO, DECREMENT EXPONENT RAL POSITION AND MSK0 EXPONENT ARIN2 STA STK4 LDA 1 LDB STK4 JMP ARINV,I ** *** UNPACK LOW WORD OF NUMBER ** ** .FLUN NOP WORD IN (B) LDA 1 (A) = (B) AND MSK0 EXTRACT EXPONENT IN (A) CMB SUBTRACT OFF ADB 0 EXPONENT FROM CMB MANTISSA IN (B) SLA,RAR NEGATIVE EXPONENT? IOR MSK4 YES, FILL IN LEADING BITS JMP .FLUN,I NO ** *** STACK (B) ON LOW CORE STACK ** ** SLWST NOP ISZ LSTPT ADVANCE 'LOW LDA LSTPT STACK' POINTER CPA HSTPT STACK OVERFLOW? E1 JSB ERROR YES STB LSTPT,I NO, STACK (B) JMP SLWST,I ** *** BUMP HIGH STACK POINTER ** ** BHSTP NOP CCB ADVANCE ADB HSTPT STB HSTPT POINTER CPB LSTPT OVERFLOW? JMP E1 YES JMP BHSTP,I NO ** *** FETCH TOP OF STACK ** ** STTOP NOP JSB OPCHK VALIDATE JSB RSCHK OPERAND LDB HSTPT,I SAVE LDA 1,I LOAD INB LDB 1,I NUMBER JMP STTOP,I ** *** VERIFY LEGITIMACY OF OPERAND ** ** OPCHK NOP LDB HSTPT,I OPERAND ADDRESS TO (B) LDA 1,I HIGH PART OF CPA MNEG OPERAND 100000B? INB,RSS JMP OPCH1 NO LDA 1,I OF OPERAND CPA MNEG+1 776B? JSB ERROR YES E8 ADB M1 OPCH1 CPB TSTPT TEMPORARY OPERAND? RSS YES JMP OPCHK,I NO LDA TSTPT UNSTACK ADA M2 THE TEMPORARY STA TSTPT OPERAND JMP OPCHK,I EXIT WITH ADDRESS IN (B) ** *** ALLOT SPACE FOR INTERMEDIATE RESULT ** ** RSCHK NOP LDA TSTPT ALLOT ADA .2 STA TSTPT SPACE ADA M1 OVERFLOW INTO CPA LSTAK LOW-CORE STACK? RSS YES JMP RSCHK,I NO LDA LSTAK SAVE INA LOWER STA TEMP3 STACK BOUND ADA .9 UPDATE STA LSTAK STACK BOTTOM LDA LSTPT SET INA SOURCE STA TEMP2 ADDRESS ADA .9 UPDATE STA LSTPT STACK TOP INA SET DESTINATION STA TEMP4 ADDRESS CMA,INA OVERFLOW ADA HSTPT INTO SSA HIGH-CORE STACK? JMP E1 YES JSB MVTOH NO, MOVE JMP RSCHK,I LOW-CORE STACK ** *** CHECK FOR DIGIT ** ** DIGCK NOP CHARACTER IN (A) LDB 0 ADB D72 ASCII 72B SSB,RSS OR GREATER? JMP DIGCK,I YES, RETURN WITH CHARACTER ADB .10 NO, ASCII 60B SSB OR GREATER? JMP DIGCK,I NO ISZ DIGCK YES, SET "SUCCESS" EXIT, LDA 1 LOAD DIGIT INTO (A), JMP DIGCK,I AND RETURN ** *** CHECK FOR LETTER ** ** LETCK NOP CHARACTER IN (A) LDB 0 ADB D133 ASCII 133B SSB,RSS OR GREATER? JMP LETCK,I YES, EXIT WITH CHARACTER IN (A) ADB .26 NO, ASCII 101B SSB,RSS ISZ LETCK YES, SET "SUCCESS" EXIT, JMP LETCK,I AND RETURN ** *** GET A CHARACTER FROM INPUT BUFFER ** GETCR NOP ISZ CCNT ANY CHARACTERS LEFT? RSS JMP GETCR,I NO, END-OF-FILE EXIT LDB BADDR LOAD BUFFER ADDRESS ISZ BADDR UPDATE FOR NEXT TIME CLE,ERB SET CHARACTER FLAG LDA 1,I LOAD CURRENT BUFFER WORD SEZ,RSS FIRST CHARACTER? ALF,ALF YES, POSITION IT AND B177 MASK EXTRANEOUS BITS CPA BLANK BLANK? JMP GETCR+1 YES, FETCH NEXT CHARACTER ISZ GETCR UPDATE RETURN ADDRESS JMP GETCR,I AND EXIT ** *** BACKSPACE OVER ONE CHARACTER ** ** BCKSP NOP CCA BACKSPACE ADA CCNT OVER STA CCNT LAST CCA CHARACTER IN ADA BADDR INPUT STA BADDR BUFFER JMP BCKSP,I ** *** PRINT A NUMBER ** ** ENOUT NOP STB BCKSP LDB ENOUT STB STK13 LDB BCKSP CCE SET SIGN FLAG TRUE JSB NUMOA,I OUTPUT THE NUMBER JSB OUTLN END-OF-LINE ACTION LDA .32 OUTPUT JSB OUTCR A BLANK LDB MLBX1+1 ADB CCNT SZB FULL? JMP *-5 NO JMP STK13,I ** *** SPACE FOR A COMMA ** ** EDELM NOP LDB EDELM LOAD ADDRESS STB STK2 LDB CCNT NO, LOAD CHARACTER COUNT EDEL1 SZB,RSS ZERO? JMP STK2,I ADB M15 NO, SUBTRACT ZONE WIDTH SSB,RSS NEGATIVE RESULT? JMP EDEL1 NO STB STK4 LDA .32 FETCH BLANK JSB OUTCR OUTPUT ISZ STK4 JMP *-3 BLANKS LDB CCNT LINE ADB M76 SSB,RSS FULL? JSB OUTLN YES JMP STK2,I ** *** OUTPUT A COMPLETED LINE ** OUTLN NOP LDA OUTLN LOAD RETURN ADDRESS STA STK4 LDA TYPE FETCH 'CHARACTERS PRINTED' COUNT SLA CORRECT FOR START ON INA ODD PRINT POSITION ADA CCNT OUTPUT LDB .BUFA A JSB WRITE,I LINE LDB MLBX1+1 ADB CCNT STB MLBX1+1 CLA RESET COUNT OF STA TYPE CHARACTERS PRINTED JSB PRNIA,I CLEAN UP JMP STK4,I ** *** ADD A CHARACTER TO OUTPUT BUFFER ** ** OUTCR NOP CHARACTER IN (A) STA IFIX SAVE CHARACTER ISZ CCNT COUNT IT LDB CCNT FIRST CHARACTER SLB OF BUFFER WORD? ISZ BADDR YES, MOVE TO FRESH WORD LDA BADDR,I LOAD BUFFER WORD SLB SAVE ALF,ALF OTHER AND M256 CHARACTER IOR IFIX ADD NEW CHARACTER SLB POSITION ALF,ALF WORD AND STA BADDR,I STORE IT JMP OUTCR,I HED BASIC INTERPRETER CONTROL * *** BASIC INTERPRETER CONTROL * * FLUSH LDA FWAM STA PBUFF SET PROGRAM BUFFER ADR STA PBPTR SET PROGRAM BUFFER POINTER LDA .32 INITIALIZE STA BLANK DELETE CHARACTER FOR GETCR CLA SET LINE NUMBER STA .LNUM TO ZERO * RDYPT CLA JSB SEXU,I SET EXU FLAG TO ZERO STA STK12 SET DATA REQUEST TO ZERO STA TFLAG CLEAR PHOTO-READER FLAG STA TTYFL CLEAR TTY TAPE FLAG JSB WRITE,I OUTPUT CR-LF LDA M6 OUTPUT LDB RDYA "READY" JSB WRITE,I ON TTY * *** CHECK IF INPUT IS FROM PHOTOREADER * PEXMK LDA TFLAG LOAD PHOTOREADER FLAG SSA CHECK IF PTAPE MODE JMP PTAPE YES- INPUT FROM PHOTO RDR * LDB LFEED LOAD LF ADDRESS STB RSYM STAOR FOR EMIT LF * *** CHECK FOR TAPE MODE * DATAI LDA TTYFL LOAD TAPE FLAG SZA,RSS IS IT SET? JMP KEYIN NO- GET KEYBOARD INPUT JMP MONIT,I YES: GO DIRECTLY TO MONITOR !TAPE JSB TAPE!,I SET UP TAPE INPUT SZA JMP RPRCS -TAPE: NOT FINISHED RETURN- JMP RDYPT -TAPE: FINISHED RETURN- * KEYIN LDA M2 SET TO OUTPUT 2 CHARS LDB RSYM LOAD LF OR '? X-ON' ADR JSB WRITE,I PRINT LF OR '? X-ON', NO CR * *** GET INPUT FROM TTY KEYBOARD * GTRCD JSB IMOFF,I KEYINT3 LDA .72 LDB .BUFA JSB REED,I GET RECORD FROM TTY CPA M2 JMP RBOUT RUBOUT IN RECORD, INPUT AGAIN RPRCS CMA,SSA,RSS SET A=-U-#CHARS AND JSB ERROR CHECK FOR RECORD TOO LONG RTLE STA CCNT -1-# CHARS <0,SET CCNT LDA .BUFA LOAD BUFFER ADDRESS CLE,ELA SHIFT LEFT, LEAST BIT STA BADDR USED AS ODD/EVEN FLAG JSB GETCR FIRCH FIRST CHARACTER JMP DATAI-2 NULL RECORD- INPUT AGAIN LDB STK12 SZB,RSS DATA REQUEST? JMP CKRCD NO- CHECK FOR COMMAND CPA S ASCII S FIRST CHAR? JSB STOP ASSUME STOP REQUESTED CLA OUTPUT CR-LF JSB WRITE,I ON TTY JSB BCKSP BACKSPACE 1 CHAR JSB IMON,I LDB STK12 CLA CLEAR DATA REQUEST FLAG STA STK12 JMP B,I GO TO DATA REQUEST CALL POINT * ASC 1,\ DEF *-1 RBOUT LDB *-1 OUTPUT '/' WITH CLA,INA CARRIAGE RETURN JSB WRITE,I AND LINE-FEED JMP KEYIN+3 * ** THIS SECTION REQUESTS DATA INPUT * DRQST NOP LDB DRQST SAVE RETURN ADDRESS STB STK12 AND FLAG LDB QMRKA JMP DATAI-1 PRINT '?-X-ON' AND WAIT * ** THIS SECTION CHECKS RECORDS FOR SYS COMMANDS * CKRCD LDB SBUFA STB SBPTR STA SBPTR,I JSB LETCK JMP SYNTX * CLA OUTPUT CR-LF STA TTYFL SET TTY TAPE FLAG JSB WRITE,I ON TTY LDA TBLAD LDB M9 SET TO SEARCH TABLE OF 9 COMMANDS JSB TSRCH,I JSB ERROR INVSC EQU * INVALID CMND ERROR REFERENCE ALF,ALF ARS ADA CMNDA JMP A,I * *** THIS SECTION SETS UP AND EXECUTES THE SYSTEMS COMMANDS * CMNDS EQU * COMMAND LIST REFERENCE * *** RUN COMMAND * RUN JSB IMON,I JMP RUNA,I * *** SCRATCH COMMAND * SCRTH JMP FLUSH DELETE CURRENT PROGRAM * *** LIST COMMAND * CLB * *** PLIST COMMAND * PLIST STB STK18 SET PUNCH FLAG JSB IMON,I JMP LISTA,I GO TO LIST ENTRY POINT * *** PTAPE COMMAND * PTAPE LDA TFLAG LOAD PHOTO/CARD FLAG ERA SET FLAG FOR CARD OR PHOTO LDA .72 ASK FOR 72 CHARS INPUT LDB .BUFA SEZ MAKE CALL TO CORRECT DRIVER JSB .HSPR,I GET INPUT FROM PHOTORDR JSB .CARD,I GET INPUT FROM CARD READER CPA M3 END-OF-TAPE? JMP RDYPT YES- GO TO ENTRY POINT * PRERR SZA,RSS NULL RECORD? JMP PTAPE YES- READ AGAIN JMP RPRCS GO PROCESS RECORD * *** STOP COMMAND * STOP NOP JSB IMOFF,I CLA CLEAR EXECUTION JSB SEXU,I FLAG JSB WRITE,I OUTPUT A CR-LF LDA .4 LDB STOPA PRINT "STOP" JSB WRITE,I JMP RDYPT GO TO READY POINT * *** TAPE COMMAND * TAPE CLB CLEAR TTY FLAG STB TFLAG STA TTYFL JSB IMOFF,I JMP !TAPE SET UP TAPE INPUT * *** EXECUTE LOG-OFF COMMAND * JMP ?OFF,I * *** MESG COMMAND * JMP ?MESG,I * *** RENUMBER COMMAND * JMP ?NBER,I EXECUTE "RENUMBER" COMMAND * ?NBER DEF RENUM LINK TO RENUMBER EXECUTION * HED CHECK SYNTAX AND TRANSLITERATE * * *** CHECK SYNTAX OF STATEMENT *** * ** *** DETERMINE SEQUENCE NUMBER ** ** SYNTX JSB INCHK,I RECORD DEF MAXSN SEQUENCE NUMBER ISZ SBPTR SAVE SPACE FOR LENGTH WORD STB .LNUM SAVE LINE NUMBER LDB SBUFA SET INB TEMP TO STB TEMP (SBUFF)+1 ** *** DETERMINE STATEMENT TYPE ** ** CPA .10 NULL STATEMENT? JMP DELST,I YES, DELETE IT STA SBPTR,I NO, RECORD NEXT CHARACTER LDA STTYP PRINT-TABLE ADDRESS LDB M19 -(NUMBER OF ENTRIES) JSB TSRCH,I FIND STATEMENT TYPE JSB ERROR NOT FOUND SYNE1 LDB M9 STB MSFLG TO FALSE LDB PBPTR SET S-STACK CPB PBUFF RSS JMP SYNT1 LDB FWAM STB PBUFF STB PBPTR SYNT1 STB TEMPS CLB SET DEFINE FLAG STB DFLAG TO FALSE STB PFLAG SET PARAMETER FLAG TO FALSE ALF,ALF COMPUTE RAR ADDRESS OF ADA STBAS SYNTAX ROUTINE AND JMP 0,I BRANCH TO IT ** *** SINGLE CHARACTER AND/OR FORMULA OPERATORS ** ** QUOTE OCT 1000 BITS 15-9 OF THE LABELLED WORD ASC 1," COMMA OCT 2000 ARE THE BASIC CODE OPERATOR ASC 1,, SMCLN OCT 3000 NUMBERS. BITS 3-0 ARE THE ASC 1,; RPARN OCT 4001 OPERATOR'S HIERARCHICAL ASC 1,) RBRAC OCT 5001 PRECEDENCE FOR THOSE OPERATORS ASC 1,] SCMMA OCT 6002 BELONGING TO FORMULAS. THE ASC 1,, ASSOP OCT 7002 UNLABELED WORD GIVES THE ASC 1,= PLUS OCT 10007 ASCII REPRESENTATION OF THE ASC 1,+ MINUS OCT 11007 SINGLE CHARACTER OPERATORS. ASC 1,- TIMES OCT 12010 ASC 1,* DIV OCT 13010 ASC 1,/ EXPS OCT 14012 ASC 1,^ GTR OCT 15005 ASC 1,> LSS OCT 16005 ASC 1,< UNEQL OCT 17005 ASC 1,# EQUAL OCT 20005 ASC 1,= UNMIN OCT 21011 ASC 1,- LBRAC OCT 22020 ASC 1,[ LPARN OCT 23020 ASC 1,( UPLUS OCT 24011 ASC 1,+ OROP OCT 25003 MSFLG NOP ANDOP OCT 26004 DFLAG NOP NOTOP OCT 27011 PFLAG NOP GTREQ OCT 30005 UFLAG NOP LSSEQ OCT 31005 * ** LET STATEMENT SYNTAX ** * LETS STB SFLAG LDA M8 SET MULTIPLE STORE FLAG STA MSFLG TO TRUE JSB FSC FETCH FORMULA CPB SFLAG STORE OCCUR? JSB ERROR NO SYNE2 EQU * ** *** CHECK FOR END OF STATEMENT ** ** EOST CPA .10 END-OF-STATEMENT? JMP ACCST,I YES, ACCEPT STATEMENT JMP NOEOF NO, ILLEGAL CHARACTER * *** DIM STATEMENT SYNTAX * DIMS ISZ DFLAG SET DFLAG TO TRUE JSB ARRYS CHECK AN ARRAY JMP ACCST,I DONE JMP DIMS+1 WAS A COMMA, CONTINUE * *** COM STATEMENT SYNTAX * COMS LDB PBPTR HAS A PROGRAM BUFFER CPB FWAM BEEN MOVED? RSS NO JSB ERROR YES, ILLEGAL COM SYNE3 STB TEMPS+7 SET ARRAY POINTER ISZ DFLAG SET DEFINE FLAG TO TRUE COMS1 CCA SET COMMON FLAG STA PFLAG TO TRUE JSB ARRYS CHECK AN ARRAY RSS DONE JMP COMS1 MORE ARRAYS LDB TEMPS+7 FETCH UPDATED POINTER STB PBUFF SET PROGRAM BUFFER ADDRESS STB PBPTR SET PROGRAM BUFFER POINTER JMP ACCST,I EXIT * *** DEF STATEMENT SYNTAX * DEFS JSB LTR JMP SYNE4 FIRST LDA TEMP1 ALF,ALF TWO CHARACTERS IOR TEMP2 CPA FN 'FN'? RSS YES JMP SYNE4 NO JSB LTR LETTER FOLLOWS? SYNE4 JSB ERROR NO LDA TEMP1 YES, RECORD LDB .58 FUNCTION JSB STROP NAME LDA TEMP2 RETRIEVE NEXT CHARACTER JSB LPCK LEFT PARENTHESIS? IOR FLGBT YES, SET FORMAL STA SBPTR,I PARAMETER BIT JSB VAROP FETCH SIMPLE VARIABLE NOP NONE FOUND JSB ERROR SUBSCRIPTED VARIABLE FOUND SYNE5 JSB RPCK RECORD A RIGHT PARENTHESIS CCB ASSIGNMENT JSB SYMCK DEF ASSOP-1 OPERATOR? SYNE6 JSB ERROR NO LDA M2 YES, ADA SBPTR RETRIEVE LDA 0,I PARAMETER AND MSK1 AND STA PFLAG SAVE IT JSB FSC FETCH DEFINING FORMULA JMP EOST END-OF-STATEMENT TEST * *** REM STATEMENT SYNTAX * REMS LDA .10 DUMMY STRING TERMINATOR JSB CHRSA,I FETCH CHARACTER STRING JMP ACCST,I * *** IF STATEMENT SYNTAX * IFS JSB FSC GET DECISION FORMULA STA SBPTR,I TABLE LDA ATHEN SEARCH CCB FOR JSB TSRCH,I 'THEN' JSB ERROR NOT FOUND SYNE7 EQU * * *** GOTO AND GOSUB STATEMENT SYNTAX * GOTOS JSB PGINT,I FETCH AND RECORD DEF MAXSN SEQUENCE NUMBER JMP EOST END-OF-STATEMENT TEST * *** FOR STATEMENT SYNTAX * FORS JSB VAROP FETCH SIMPLE VARIABLE NOP NONE FOUND SYNE8 JSB ERROR SUBSCRIPTED VARIABLE FOUND CCB JSB SYMCK ASSIGNMENT DEF ASSOP-1 OPERATOR? JMP SYNE6 NO JSB FSC YES, FETCH INITIAL VALUE FORMULA STA SBPTR,I LOOK LDA ATO FOR CCB THE JSB TSRCH,I 'TO' JSB ERROR MISSING SYNE9 JSB FSC CPA .10 END-OF-STATEMENT? JMP ACCST,I YES CCB FOR ADB SBPTR STB SBPTR STA SBPTR,I NO, LDA ASTEP LOOK CCB JSB TSRCH,I THE 'STEP' JSB ERROR MISSING SYE10 JSB FSC JMP EOST END-OF-STATEMENT TEST * *** NEXT STATEMENT SYNTAX * NXTS JSB VAROP FETCH SIMPLE VARIABLE NOP NONE FOUND JMP SYNE8 SUBSCRIPTED VARIABLE FOUND JMP EOST END-OF-STATEMENT TEST * *** END, STOP, RESTORE, RETURN STATEMENT SYNTAX * ENDS ISZ SBPTR JSB GETCR END-OF-STATEMENT? JMP ACCST,I YES JMP NOEOF NO * *** DATA STATEMENT SYNTAX * DATAS JSB CONST FETCH A CONSTANT JMP SYE12-1 JSB NUMOP CCB CHECK JSB SYMCK FOR A DEF COMMA-1 COMMA JMP EOST END-OF-STATEMENT TEST JMP DATAS FETCH ANOTHER NUMBER * *** READ AND INPUT STATEMENT SYNTAX * READS JSB VAROP RECORD VARIABLE OPERAND JSB ERROR MISSING SYE13 NOP CCB CHECK JSB SYMCK FOR A DEF COMMA-1 COMMA RSS JMP READS IS, FETCH NEXT ITEM CLB APPEND STB SBPTR,I END-OF-FORMULA ISZ SBPTR OPERATOR JMP EOST END OF STATEMENT TEXT * *** PRINT STATEMENT SYNTAX * PRIN1 LDB M2 NO, JSB SYMCK COMMA OR DEF COMMA-1 SEMICOLON? JMP PRIN2 NO PRINS CCA YES, ENABLE STA TEMP,I FORMULA ISZ SBPTR JSB GETCR END-OF-STATEMENT? JMP ACCST,I YES PRIN2 CCB JSB SYMCK QUOTE? DEF QUOTE-1 JMP PRIN3 NO LDA .34 YES, SET QUOTE AS TERMINATOR JSB CHRSA,I CHARACTER AND FETCH STRING JSB ERROR MISSING QUOTE SYE14 LDA QUOTE RECORD STA SBPTR,I QUOTE ISZ SBPTR JSB GETCR END-OF-STATEMENT? JMP ACCST,I YES CCB ENABLE STB TEMP,I FORMULA JMP PRIN1 NO PRIN3 ISZ TEMP,I TAB OR FORMULA PERMITTED? JSB ERROR NO SYE15 STA SBPTR,I SEARCH LDA ATAB FOR CCB 'TAB' JSB TSRCH,I CLA,RSS LDA TABCN FOUND, CCB ADB SBPTR STB SBPTR SZA,RSS JMP PRIN4 IOR SBPTR,I STA SBPTR,I RECORD 'TAB' JSB GETPF FETCH PARAMETER CLB STB SBPTR,I ISZ SBPTR JMP PRIN5 PRIN4 JSB BCKSP BACKSPACE OVER LAST CHARACTER JSB FSC FETCH FORMULA PRIN5 CPA .10 END-OF-STATEMENT? JMP ACCST,I YES JMP PRIN1 NO * *** MAT STATEMENT SYNTAX * MATS JSB LTR FIRST JSB ERROR TWO CHARACTERS SYE16 JSB LETCK LETTERS? JMP MATS2 NO ISZ SBPTR YES, MOVE TO FRESH S-BUFFER WORD LDB TEMP1 RETRIEVE FIRST LETTER AND BLF,BLF PUT IT IN THE IOR 1 UPPER CHARACTER OF (A) STA SBPTR,I SEARCH LDA MATIO FOR LDB M2 'READ' OR JSB TSRCH,I 'PRINT' JSB ERROR NOT FOUND SYE17 CPA RDOP JMP MATS1 YES MATS0 JSB ARRID RECORD ARRAY CPA .10 END-OF-STATEMENT? JMP ACCST,I YES LDB M2 NO, JSB SYMCK COMMA OR DEF COMMA-1 SEMICOLON? JSB ERROR NO SYE18 JSB GETCR END-OF-STATEMENT? JMP *+3 YES JSB BCKSP NO JMP MATS0 ISZ SBPTR INCLUDE JMP ACCST,I PARAMETER MATS1 JSB ARRID RECORD ARRAY JSB MAT&,I NOP RECORD IT CPA .10 END-OF-STATEMENT JMP ACCST,I YES CCB NO JSB SYMCK DEF COMMA-1 COMMA? JMP SYE18-1 NO JMP MATS1 YES MATS2 STA TEMP2 LDA SBPTR SAVE STA ARYAD OPERAND ADDRESS LDA TEMP1 RETRIEVE FIRST LETTER LDB .46 RECORD AN JSB STROP ARRAY LDA TEMP2 RETRIEVE CHARACTER CCB ASSIGNMENT JSB SYMCK DEF ASSOP-1 OPERATOR? JMP SYNE6 NO LDA ARYAD,I YES RETRIEVE AND MSK1 AND SAVE STA TEMP,I PREVIOUS ARRAY IDENTIFIER JSB LTR LETTER NEXT? JMP MATS4 NO JSB LETCK YES, SECOND LETTER? JMP MATS5 NO ISZ SBPTR YES, LDB TEMP1 CONCATENATE BLF,BLF LETTERS IOR 1 AND STA SBPTR,I SEARCH LDA MATFN FOR LDB M5 ARRAY JSB TSRCH,I FUNCTION JSB ERROR NOT FOUND SYE19 ALF,ALF FOUND ALF,RAR POSITION IT, ADA .15 COMPLETE OPERAND, CCB COMBINE ADB SBPTR WITH IOR 1,I OPERATOR, IOR FLGBT ADD FLAG BIT, STA 1,I AND STORE AND MSK1 'INV' ADA M256 OR SSA,RSS 'TRN'? JMP MATS3 YES JSB GETCR NO, END-OF-STATEMENT? JMP ACCST,I YES JSB MAT&,I JSB ERROR NO SYE20 JMP NOEOF MATS3 JSB GETCR JMP EOF JSB LPCK GET LEFT PARENTHESIS JSB ARRID FETCH AND RECORD AN ARRAY JSB RPCK RECORD A RIGHT PARENTHESIS LDA ARYAD,I RETRIEVE AND MSK1 PREVIOUS ARRAY IDENTIFIER CPA TEMP,I MATCH LEFT-HAND SIDE ARRAY? JSB ERROR YES SYE21 JMP ACCST,I NO MATS4 ISZ SBPTR JSB LPCK FETCH LEFT PARENTHESIS JSB FSC FETCH FORMULA JSB RPCK FETCH RIGHT PARENTHESIS CCB MULTIPLICATION JSB SYMCK OPERATOR? DEF TIMES-1 JSB ERROR NO SYE22 JSB ARRID YES, FETCH AND RECORD ARRAY CPA .10 END-OF-STATEMENT? JMP ACCST,I YES JMP NOEOF NO MATS5 STA TEMP2 LDA SBPTR SAVE STA ARYAD OPERAND ADDRESS LDA TEMP1 RETRIEVE LDB .46 AND RECORD JSB STROP ARRAY LDA TEMP2 END-OF- CPA .10 STATEMENT? JMP ACCST,I YES LDB M3 NO, MUST BE JSB SYMCK A '+', DEF PLUS-1 '-',OR'*' JSB ERROR ISN'T SYE23 CLB IS, SET FOR FALSE ADA .8 CPA TIMES '*'? JMP MATS7 YES MATS6 STB PFLAG NO, SET PFLAG JSB ARRID GET SECOND ARRAY CPA .10 END-OF-STATEMENT? RSS YES JMP NOEOF NO ISZ PFLAG WAS OPERATOR A '*'? JMP ACCST,I NO LDA ARYAD,I YES RETRIEVE AND MSK1 SECOND ARRAY CPA TEMP,I MATCH LEFT-HAND SIDE ARRAY? SYE24 JSB ERROR YES JMP ACCST,I NO MATS7 LDA ARYAD,I RETRIEVE AND MSK1 ARRAY CCB SET FOR TRUE CPA TEMP,I MATCH LEFT-HAND SIDE ARRAY? JMP SYE24 YES JMP MATS6 NO MAT& DEF MATSB ** *** JUMP TABLE FOR STATEMENT SYNTAX ** ** SYNTB DEF LETS LET DEF DIMS DIM DEF COMS COM DEF DEFS DEF DEF REMS REM DEF GOTOS GO TO DEF IFS IF DEF FORS FOR DEF NXTS NEXT DEF GOTOS GOSUB DEF ENDS RETURN DEF ENDS END DEF ENDS STOP * * THESE TWO STATEMENTS WILL FORCE AN ERROR * CALL AND WAIT * DEF ENDS ANALYZE WAIT AS END STATEMENT DEF ENDS ANALYZE CALL AS END STATEMENT DEF DATAS DATA DEF READS READ DEF PRINS PRINT DEF READS INPUT DEF ENDS RESTORE DEF MATS MAT 22255-80011 D