ASMB,R,Q,C HED <> 92076-1X007 REV.2040 NAM BASC6,5 92076-1X007 REV.2040 800727 92076-16001 * * * ************************************************************** * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * * PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * * OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ************************************************************** * * * * NAME: BASC6 * SOURCE: 92076-18007 * RELOC: PART OF 92076-16001 * PGRM: B.J.L. * * ************************************************************** ENT BASC6 EXT PRMT,RPRCS,WRITE,OUTCR,OUTIN,EXEC,LURQ EXT PRNIN,OUTLN,OUTER,GETCR,DIGCK,CLOSE,READF EXT RUN,RDYPT,COMND,LOCF,POSNT,LETCK,OPENF COM TEMPS(32),PNTRS(81),FILBF(16),FLDCB(144),SPEC(10) * *PNTRS INCREASED TO 81 800727*************** *TEMPS INCREASED TO 32 800107*************** *****REMOVED CALLS TO RETCK,FNDPS,FINDV 790822************ *****REMOVED CALLS TO OPEN 790829************************ *PNTRS INCREASED TO 79 790831**************************** *PNTRS INCREASED TO 80 791010**************************** ***************************************** * * * SEGMENT #6: EXECUTE THE COMMAND * * * ***************************************** * * THIS PART OF THE INTERPRETER IS LOADED BY SEGMENT 5 COMMAND * WHENEVER A STATEMENT IS NOT FOUND IN THAT MODULE * THE STATEMENT IS THEN CHECKED TO SEE IF IT IS * A LEGAL COMMAND WITH PROPER SYNTAX. IF SO THE CORRECT COMMAND * ROUTINE IS EXECUTED AND CONTROL RETURNED BACK TO THE SYNTAX * SEGMENT, ELSE AN ERROR MESSAGE IS PRINTED. SKP *************************** * * * CONSTANTS AND VARIABLES * * * *************************** * FWAM EQU PNTRS FIRST WORD OF AVAILABLE MEMORY LWBM EQU PNTRS+1 LAST WORD OF AVAILABLE MEMORY .INBF EQU PNTRS+2 INPUT BUFFER ADDRESS SBUFA EQU PNTRS+3 SYNTAX BUFFER ADDRESS SYMTA EQU PNTRS+4 START OF SYMBOL TABLE SYMTF EQU PNTRS+5 END OF SYMBOL TABLE PBUFF EQU PNTRS+6 FIRST WORD OF USER PROGRAM PBPTR EQU PNTRS+7 LAST WORD+1 OF USER PROGRAM INBFA EQU PNTRS+8 INPUT BUFFER POINTER ICCNT EQU PNTRS+9 INPUT CHARACTER COUNT SBPTR EQU PNTRS+10 SYNTAX BUFFER POINTER .LNUM EQU PNTRS+11 CURRENT LINE # FCORE EQU PNTRS+12 START OF FREE CORE MNNAM EQU PNTRS+13 MNEMONIC TABLE NAME:SC:LU BRNAM EQU PNTRS+18 BRANCH TABLE NAME:SC:LU FWAMM EQU PNTRS+23 POINTER TO START OF MNEMONIC TABLE FWAMB EQU PNTRS+24 POINTER TO START OF BRANCH TABLE .OTBF EQU PNTRS+25 POINTER TO OUTPUT BUFFER OCCNT EQU PNTRS+26 OUTPUT CHARACTER COUNT OTBFA EQU PNTRS+27 POINTER INTO OUTPUT BUFFER LUOUT EQU PNTRS+28 CURRENT OUTPUT L.U. # LUINP EQU PNTRS+29 CURRENT INPUT L.U. # SIGN EQU PNTRS+30 SIGN OF CURRENT NUMBER BLANK EQU PNTRS+31 CURRENT TERMINATION CHAR REC# EQU PNTRS+32 COMMAND FILE RECORD NUMBER FLTYP EQU PNTRS+33 TYPE 0 FILE FLAG ********CHANGED FOR L USAGE OF GETST 790409********* TTYPR EQU PNTRS+34 CONSOLE TTY L.U. # TTYP1 EQU PNTRS+35 3RD AND 4TH CHAR TTYP2 EQU PNTRS+36 5TH AND 6TH CHAR TTYP3 EQU PNTRS+37 SECURITY CODE OF FILE TTYP4 EQU PNTRS+38 CRN # OF FILE *************************************************************** DCB EQU PNTRS+39 DATA CONTROL BLOCK ADDRESS FILBK EQU PNTRS+40 FILE CONTROL BLOCK ADDRESS PFLAG EQU PNTRS+41 SAVE,LOAD FILE FLAG LOLIM EQU PNTRS+42 LOW LIMITS OF PROGRAM HILIM EQU PNTRS+43 HIGH LIMITS OF PROGRAM LORUN EQU PNTRS+44 LOW RUN LIMITS HIRUN EQU PNTRS+45 HIGH RUN LIMITS SLSTM EQU PNTRS+46 EXECUTE SLOW STMTS LOTRC EQU PNTRS+47 LOW TRACE LIMITS HITRC EQU PNTRS+48 HIGH TRACE LIMITS BRKP1 EQU PNTRS+49 BREAK POINT #1 BRKP2 EQU PNTRS+50 BREAK POINT #2 BRKP3 EQU PNTRS+51 BREAK POINT #3 BRKP4 EQU PNTRS+52 BREAK POINT #4 SMFLG EQU PNTRS+53 SIMULATE FLAG TYPE EQU PNTRS+54 PARTIAL LINE CHARACTER COUNT DLMTR EQU PNTRS+55 CHAR EDIT DELIMITER MERGF EQU PNTRS+56 MERGE FLAG ************************790713******************************* COMN EQU PNTRS+57 COMMAND FILE NAME:SC:CRN MANT1 EQU PNTRS+62 MANTISSA #1 MANT2 EQU PNTRS+63 MANTISSA #2 EXPNT EQU PNTRS+64 EXPONENT ************************CHANGED 790831************************** ************************CHANGED 791010************************** INNAM EQU PNTRS+65 NAME RTN. FROM CRETS (3 WORDS) INNUM EQU PNTRS+68 SCRATCH FILE # AND COUNTER HSTPT EQU PNTRS+69 HIGH-STACK POINTER TSTPT EQU PNTRS+70 TEMPORARY STACK POINTER LSTPT EQU PNTRS+71 LOW-STACK POINTER LSTAK EQU PNTRS+72 LOW-STACK ADDRESS PRADD EQU PNTRS+73 PROGRAM EXECUTION DSTRT EQU PNTRS+74 DATA NXTDT EQU PNTRS+75 STATEMENT DCCNT EQU PNTRS+76 POINTERS NXTST EQU PNTRS+77 NEXT STMT NUMBER *********MOVED FROM BEHIND TTYPR FOR L 790409***************** PRINT EQU PNTRS+78 LISTING LU# ERTTY EQU PNTRS+79 ERROR LU# TRAPF EQU PNTRS+80 TRAP BUSY FLAG 800727***** ************************790831********************************* *READR NOP **REMOVED 790828**** *PUNCH NOP **REMOVED 790828*** ****************************************************************** SKP TEMPT BSS 22 TEMPORARIES SPC 1 SUP PRESS MULTIPLE LISTINGS SPC 1 .0 DEC 0 .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 *.5 DEC 5 **REMOVED 790822******** .6 DEC 6 .7 DEC 7 .8 DEC 8 .10 DEC 10 .32 DEC 32 .36 DEC 36 .40 DEC 40 ***ADD FOR BUG 790928 MM*** .48 DEC 48 .80 DEC 80 ***ADD FOR BUG 790928 MM*** .122 DEC 122 .9999 DEC 9999 B17 OCT 17 B37 OCT 37 B51 OCT 51 B54 OCT 54 B60 OCT 60 B106 OCT 106 B123 OCT 123 B177 OCT 177 B360 OCT 360 B377 OCT 377 *B400 OCT 400 **REMOVED 790822*********** M4 DEC -4 M32 DEC -32 M64 DEC -64 MAXSN DEC -10000 LOCK OCT 100001 AMASK OCT 40000 P OCT 120 X OCT 130 UNLKA OCT 140000 BIT15 OCT 100000 *PAD ASC 1, **REMOVED 790822************** MAXCT OCT 177777 MSK0 OCT 377 OPMSK OCT 77000 ERBS DEF ERR-1 BPAD DEF BRKP1 *TEMAD DEF TEMP8 BIT BUCKET **REMOVED 790822************* DCBAD DEF FLDCB DATA CONTRL BLK ADDRS LENGC EQU LUOUT-FWAM CSAVE COMMON LENGTH LENCM ABS LENGC PTNAM DEF TTYPR ***********ADDED 790713************ PTCMN DEF COMN ***********ADDED 790713************ #OP ASC 1,# ********ADDED 790822************** SKP * CMDCT DEC -10 -NUMBER OF COMMANDS * CMDS EQU * * * * COMMAND MNEMONICS START HERE * * DEC 4 ASC 2,LOCK LOCK PERIPHERAL * DEC 6 ASC 3,UNLOCK PERIPHERAL * DEC 5 ASC 3,RESEQ RESEQUENCE PROGRAM * DEC 3 ASC 2,SIM SIMULATE SUBROUTINE CALLS * DEC 5 ASC 3,UNSIM TURN OFF SIMULATION * DEC 5 ASC 3,TRACE TRACE BASIC PROGRAM STMTS * DEC 7 ASC 4,UNTRACE TURN OF TRACE * DEC 5 ASC 3,BREAK SET BREAKPOINT IN PROGRAM * DEC 7 ASC 4,UNBREAK TURN OFF BREAKPOINTS * DEC 5 ASC 3,CALLS LIST SUBROUTINE CALLS * ********************************************************************** * * * THE FOLLOWING TABLE DEFINES ENTRY POINTS FOR EXECUTION * OF COMMANDS. * ********************************************************************** * * * * CMDEX DEF *+1 DEF $LOCK LOCK LU DEF $UNLK UNLOCK LU DEF $RESQ RESEQUENCE PROGRAM DEF $SIM SIMULATE CALLS DEF $UNSM TURN OFF SIMULATION DEF $TRAC TRACE PROGRAM STMTS DEF $UNTR TURN OFF TRACE DEF $BRKP SET BREAKPOINT IN PROGRAM DEF $UNBP TURN OFF BREAKPOINTS DEF $CALL LIST CALLS SKP *************************** * * * CHECK FOR LEGAL COMMAND * * * *************************** * BASC6 NOP ********************REMOVED 790713*************************** * LDA PFLAG IS THIS INITIALIZATION?***** * CPA .9999 * RSS YES, GO GET SEGMENT'S FWAM AND LWAM * JMP BAS6C NO, CONTINUE EXECUTION * JSB GMS.C * JMP ROTAT RET. TO MAIN FOR FWAM AND LWAM CHECK***** ***********************************790713*********************** LDA REC# END OF CPA M1 CSAVE'D PROGRAM RUN? JMP GTCS1 YES, STOP EVERY THING LDA DCBAD SET UP DATA CONTROL STA DCB BLOCK ADDRESS LDA PFLAG INPUT FROM CPA .4 COMMAND FILE? JMP COMFL YES! CCA ADA ICCNT SET UP STA CCCNT COMMAND COUNT LDA SBPTR,I GET FIRST LETTER LSR 8 RIGHT JUSTIFY AND B377 LDB CMDCT SEARCH FOR LEGAL COMMAND JSB TBSRH DEF CMDS JMP CHARE CHAR EDIT? ADA CMDCT DETERMINE ORDINAL # IN B&M TABLE LDB ASCER NO, SET FIRST TWO CHARS OF OUTPUT STB .OTBF,I BUFFER TO PREVENT EDITS CLB CLEAR STB .LNUM OUT OLD LINE NUMBER STB TYPE CMA,INA ADA COUNT ADA CMDEX INCREMENT TO ENTRY PT ADDRESS LDA 0,I GET ADDRESS OF COMMAND RSS PEEL LDA 0,I OFF RAL,CLE,SLA,ERA INDIRECTS JMP *-2 JMP 0,I EXECUTE THE COMMAND * * CHARE STA SVCC SAVE COMMNAND CHAR CPA P CHAR EDIT JMP $EDIT YES! * CPA Q EDIT ON DV07?***OUT FOR L * JMP CDV07 LU=DVR07 TYPE?***OUT FOR L CPA X CHANGE DELIMTER JMP CERR1 YES! ERRX LDB ASCER NO, SET OTBF TO *800322* STB .OTBF,I PREVENT EDITS LATER JSB ERROR NO! CERR1 EQU * JSB GETCR WELL, GET IT JMP ERRX NONE FOUND STA DLMTR STUFF IT ***********************ADDED 800320***************************** JSB GETCR JMP PRMT OK GO ON. JMP ERRX ELSE, INVALID COMMAND ****************************800320****************************** JMP PRMT ********REMOVED FOR L 790409*************************************** *CDV07 LDA TTYPR SETUP TO CHECK FOR DRIVER TYPE * JSB FINDV * CPA DVR07 =07? * JMP $EDIT YES ,GO EDIT LINE * JMP CERR1-1 NO, ERROR * ************************************************************* ASCER ASC 1,ER SKP * * HERE FOR: LOCK * $LOCK JSB GETCR GET FIRST CHARACTER JMP CERR1-1 NO LU ERROR **************************ADDED 790822********************** CPA #OP CHECK FOR #LU JSB GETCR YES, GET NEXT CHARACTER NOP EOL, DON'T CARE ***************************790822************************** LDB LOCK SET UP LOCK1 ADB AMASK LOCK CONTROL STB TEM10 AND SET NO ABORT BIT JSB DIGCK NUMBER? JSB ERROR NOT A NUMBER CERR5 EQU * ADA .48 RECONSTRUCT CHAR JSB INTCK CONVERT IT DEF M64 MAX SIZE JMP CERR5-1 BAD STB LU SET UP LU LOCK2 JSB LURQ LOCK DEF *+4 DEF TEM10 THE DEF LU DEF .1 PERIPHERAL NOP * SZA,RSS OK? JMP PRMT YES! JSB ERROR NO, PERIPHERAL LOCKED OR NO RN # CERR4 EQU * SPC 2 * * HERE FOR: UNLOCK [] * $UNLK JSB GETCR GET FIRST CHARACTER JMP UNLK1 UNLOCK ALL ************************************ADDED 790822************** CPA #OP CHECK FOR #LU JSB GETCR GET NEXT CHARACTER NOP EOL, DON'T CARE ***********************************790822********************* CLB JMP LOCK1 * UNLK1 LDB UNLKA UNLOCK ALL STB TEM10 JMP LOCK2 DEVICES * LU BSS 1 SKP * * HERE FOR: TRACE , * $TRAC JSB GETCR GET FIRST CHAR JMP TR2 THERE ISNT ANY JSB INTCK CONVERT FIRST STMT # DEF MAXSN JMP CERR3-1 BAD NUMBER STB LOTRC SET LOW TRACE NUMBER CPA B54 COMMA? JMP TR1 YES! CPA .10 LAST CHAR? JMP TR3 YES, STAND ALONE TRACE JMP CERR1-1 ILLEGAL COMMAND TR1 JSB GETCR GET NEXT CHAR JMP CERR1-1 NONE FOUND JSB INTCK CONVERT LAST STMT # DEF MAXSN JMP CERR3-1 BAD NUMBER STB HITRC SET HIGH TRACE LIMIT CMB,INB IS ADB LOTRC HIGH LIMITS SSB,RSS LARGER THAN LOW LIMITS? JSB ERROR NO! CERR6 EQU * JMP PRMT YES! * TR2 CLB,INB SET FOR STB LOTRC FULL PROGRAM LDB .9999 TRACING TR3 STB HITRC JMP PRMT * * HERE FOR: UNTRACE * $UNTR CLA STA LOTRC CLEAR STA HITRC OUT TRACE STMT #'S JMP PRMT SKP * * HERE FOR: BREAK ,,, * $BRKP LDA M4 SET FOR STA TEMP9 MAXIMUM OF 4 B.P.'S LDA BPAD SET UP STA TEMP8 BREAKPT ADDRESS JSB GETCR GET FIRST CHAR JMP BP6 NON FOUND JMP BP5 OK! * BP1 SZA,RSS WAS BP AVAILABLE? JMP BP3 NO JSB GETCR GET FIRST CHAR JMP CERR3-1 NONE FOUND BP5 JSB INTCK CONVERT NUMBER DEF MAXSN JMP CERR3-1 BAD NUMBER! CPB TEMP8,I ALREADY SET? JSB ERROR YES! CERR8 EQU * STA FERR SAVE (A) BP3 LDA TEMP8,I IS IT SZA AVAILABLE? JMP BP4 NO! LDA FERR RESTORE (A) STB TEMP8,I STORE VALUE CPA B54 COMMA? JMP BP2 YES! CPA .10 NO, END? JMP PRMT YES! BP2 ISZ TEMP8 NEXT ADDRESS ISZ TEMP9 LAST ONE? JMP BP1 NO JSB ERROR YES CERR7 EQU * * BP4 CLA JMP BP2 * * PRINT BREAK POINTS * BP6 JSB PRNIN INITIALIZE LDA BRKP1 PRINT JSB OUTIN BP#1 LDA B54 JSB OUTCR PRINT COMMA LDA BRKP2 PRINT JSB OUTIN BP#2 LDA B54 JSB OUTCR PRINT COMMA LDA BRKP3 PRINT JSB OUTIN BP#3 LDA B54 JSB OUTCR PRINT COMMA LDA BRKP4 PRINT JSB OUTIN BP#4 JSB OUTLN PRINT LINE JMP PRMT GOTO PROMPT * * HERE FOR: UNBREAK ,,, * $UNBP LDA M4 SET UP STA TEMP9 ADDRESS LDA BPAD AND STA TEMP8 COUNTER UNBP1 JSB GETCR GET CHAR JMP UNBP3 NONE FOUND JSB INTCK CONVERT NUMBER DEF MAXSN JMP CERR3-1 BAD NUMBER UNBP4 CPB TEMP8,I IS IT A CURRENT B.P.? JMP UNBP5 YES ISZ TEMP8 ISZ TEMP9 END? JMP UNBP4 NO UNBP2 CPA B54 YES, NOT FOUND, COMMA? JMP UNBP1 YES! CPA .10 NO, END? JMP PRMT YES! JMP CERR1-1 BAD COMMAND UNBP3 CLA CLEAR STA BRKP1 OUT STA BRKP2 ALL STA BRKP3 THE STA BRKP4 BREAKPOINTS JMP PRMT UNBP5 CLB CLEAR OUT STB TEMP8,I INDIVIDUAL B.P. JMP UNBP2 SKP * * HERE FOR: "CHARACTER EDITTING" * $EDIT LDA .OTBF SET UP CLE,ELA OUTPUT STA OTBFA BUFFER PTRS LDA OCCNT SZA,RSS NOTHING IN BUFFER? JSB ERROR YES, ERROR CER11 EQU * CMA SET UP BUFFER STA OCCNT COUNTER LDA .INBF COMMAND ADDRESS LDB .CMBF COMMAND BUFFER CLE,ELB SET UP STB CBUFA BUFFER ERB PTR JSB MVW MOVE COMMAND TO DEC 40 COMMAND ***CHG FOR BUG 790928 MM*** NOP BUFFER CCA SET UP ADA .INBF IINPUT STA INBFA BUFFER PTR CLB INITIALIZE STB ICCNT COUNT JSB CCHAR REMOVE COMMAND NOP CHARACTER JSB OCHAR GOBBLE NOP CPA .32 UP LEADING BLANKS JMP *-3 AND B360 GET CHAR TYPE CPA B60 INTEGER? RSS YES! JMP CER11-1 NO, CAN'T EDIT COMMANDS CCA BACK ADA OCCNT SPACE STA OCCNT OVER CCA LAST ADA OTBFA CHARACTER STA OTBFA IN BUFFER MODE STB PMODE AND MODE PNXT JSB CCHAR GET A CHARACTER JMP PFIN IF EOL THEN EXIT CLB SET FOR MODE CHECK CPA %R CTRL R? JMP MODE YES, GO RESET MODE INB INSERT CPA %I MODE JMP MODE YES, GO RESET CPA %S ALTERNATE COMMAND? JMP MODE YES INB SET FOR DELETE MODE CPA %C DELETE MODE? JMP MODE YES, GO RESET CPA %T TRUNCATE LINE MODE? JMP PFIN1 YES COMPLETE IT LDB PMODE GET THE CURRENT MODE CPB .0 REPLACE? JMP PRPL YES CPB .1 INSERT? JMP PINS YES CPB .2 DELETE JMP PDLS YES * PRPL CPA DLMTR IS IT REALLY A COPY? JMP PCOPY YES JSB OTCHR OUTPUT THE NEW CHAR * PDLS JSB OCHAR GET THE OLD CHAR NOP IGNORE EOL JMP PNXT FORGET THE OLD , GET THE NEW * PCOPY JSB OCHAR GET THE CURRENT CHAR LDA .32 USE BLANK IF UNDEFINED JMP PINS2 * PINS CPA DLMTR INSERT SPACES LDA .32 FOR DELIMITER PINS2 JSB OTCHR SEND IT OUT JMP PNXT GO PROCESS THE NEXT CHAR * PFIN LDA OCCNT END OF SSA,RSS SOURCE RECORD? JMP PFIN1 YES! JSB OCHAR MOVE THE REST OF JMP PFIN1 THE LINE JSB OTCHR TO THE OUTPUT JMP PFIN BUFFER * * PFIN1 LDA .3 OUTPUT LDB BLNK TWO JSB WRITE BLANKS LDA ICCNT GET COUNT LDB .INBF GET BUFFER ADDRESS JSB WRITE PRINT LINE LDA .INBF MOVE LDB .OTBF INPUT BUFFER JSB MVW TO OUTPUT DEC 40 BUFFER SO TO ***CHG FOR BUG 790928 MM*** NOP MAKE CURRENT LINE THE PENDING LDA SVCC DOING A "Q" COMMAND? CPA Q JMP QCNT SEND "ESC" SEQ. LDA ICCNT SET UP PFIN2 STA OCCNT COUNT STA TEMP8 FOR SYNTAX AND ERROR PROCESSING JMP RPRCS GOTO SYNTAX SEG TO PROCESS RECORD QCNT LDA QC "A"-SEQ. LTH. LDB QQP "B"=SEQ.LOC. JSB WRITE WRITE IT CLA FORCE NO PRMPT JMP PFIN2 * SPC 2 * * %R OCT 22 CTRL R %I OCT 11 CTRL I %C OCT 3 CTRL C %S OCT 23 CTRL S %T OCT 24 CTRL T Q OCT 121 "Q" COMMAND *DVR07 EQU .7 DRIVER TYPE 7 **REMOVED 790822*************** SVCC NOP QC EQU .7 QQP DEF *+1 *QQ ASC 4, A _ _ **REMOVED 790822*********************** PMODE NOP .CMBF DEF *+1 BSS 40 CCCNT NOP CBUFA NOP BLNK DEF *+1 ASC 2, _ * * * MOVE WORDS ROUTINE * * CALLING SEQ IS: A=SOURCE ADDRESS * B=DESTINATION ADDRESS * * (P) JSB MVW * (P+1) COUNT OF WORDS * (P+2) NOP * (P+3) RETURN HERE * MVW NOP STA TEMP3 SAVE SOURCE ADDRS LDA MVW,I GET COUNT CMA,INA AND USE ISZ MVW AS COUNTER STA MVW,I FOR MOVE MVW1 LDA TEMP3,I GET WORD STA 1,I PUT AWAY ISZ TEMP3 INCREMENT SOURCE ADDR INB INCREMENT DESTINATION ADDR ISZ MVW,I INCREMENT COUNTER, DONE? JMP MVW1 NO, NOT YET ISZ MVW YES JMP MVW,I * * * ****************************** * * * GET CHAR FROM COMND BUFFER * * * ****************************** CCHAR NOP ISZ CCCNT ANY CHARACTERS LEFT? RSS JMP CCHAR,I NO, END-OF-FILE EXIT LDB CBUFA LOAD BUFFER ADDRESS ISZ CBUFA 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 ISZ CCHAR UPDATE RETURN ADDRESS JMP CCHAR,I AND EXIT ****************************** * * * GET CHAR FROM OUTPUT BUFFR * * * ****************************** OCHAR NOP LDA OCCNT ANY CHARS LEFT? INA STA OCCNT SSA,RSS JMP OCHAR,I NO, END-OF-FILE EXIT LDB OTBFA LOAD BUFFER ADDRESS ISZ OTBFA 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 ISZ OCHAR UPDATE RETURN ADDRESS JMP OCHAR,I AND EXIT * * ***************************** * * * ADD CHAR TO INPUT BUFFER * * * ***************************** OTCHR NOP CHARACTER IN (A) STA TEMP4 SAVE CHARACTER ***************ADD FOR BUG 790928 MM*************** LDA ICCNT IS ICCNT > 80 CHARACTERS? CPA .80 JSB ERROR YES, ERROR *************************************************** CER12 ISZ ICCNT COUNT IT ***CHG FOR BUG 790928 MM*** LDB ICCNT FIRST CHARACTER SLB OF BUFFER WORD? ISZ INBFA YES, MOVE TO FRESH WORD LDA INBFA,I LOAD BUFFER WORD SLB SAVE ALF,ALF OTHER AND M256 CHARACTER IOR TEMP4 ADD NEW CHARACTER SLB POSITION ALF,ALF WORD AND STA INBFA,I STORE IT JMP OTCHR,I SKP * * HERE FOR: CALLS * $CALL LDA MNNAM ANY SZA,RSS B&M TABLES? JSB ERROR NO! CERR9 JSB PRNIN INITIALIZE FOR PRINT LDA PRINT SET TO PRINT STA LUOUT ON LIST DEVICE LDB HEDER PRINT LDA .48 JSB WRITE HEADER LDA MNNAM IS THERE SZA,RSS A MNEMONIC TBL? JMP PRMT NO! LDB FWAMM GET LDA 1,I THE NUMBER STA MCNT MNEMONICS TO BE LISTED INB SAVE CALL1 STB MADDR MNEMONIC TBL ADDRS LDA .32 JSB OUTCR LDB MADDR JSB MCOPY LIST THE MNEMONIC LDA FWAMM,I GETPACE CMA,INA FIRST WORD ADA MCNT ADDRESS RAL,RAL OF ENTRY ADA FWAMB IN BRANCH TABLE STA BADDR AND SAVE IT INA LDB 0,I GET ARRAY/SIMPLE RBL WORD AND STB ARRAY SAVE IT INA DLD 0,I GET VALUE AND REAL/INTEGER RBL AND SAVE RAL THEM STA VALUE STB CONVR LDA MADDR,I GET PARAMETER RRR 4 COUNT AND B17 AND CMA,INA STA PCNT SAVE IT SZA,RSS ANY PARAMETERS? JMP CALL2 NO! CALL3 LDA CONVR GET RAR CONVERSION STA CONVR BIT SLA IS IT REAL? JMP CONV1 NO, INTEGER! LDA R YES CONV2 JSB OUTCR OUTPUT IT LDA VALUE GET VALUE RAR WORD STA VALUE AND SAVE IT SLA,RSS GOING TO SUBROUTINE? JMP *+3 YES! LDA V NO, FROM SUBROUTINE JSB OUTCR OUTPUT IT LDA ARRAY GET RAR SIMPLE/ARRAY STA ARRAY WORD AND SAVE IT SLA,RSS IS IT ARRAY? JMP *+3 NO! LDA A YES! JSB OUTCR OUTPUT LETTER 'A' LDA PCNT ANY SZA,RSS PARAMETERS? JMP CALL2 NO! ISZ PCNT DONE? JMP CALL4 NO! LDA B51 YES, OUTPUT JSB OUTCR CLOSED PAREN CALL2 LDA .32 PRINT JSB OUTCR LDB MADDR,I IS THIS LDA B123 A SUBROUTINE SSB OR A FUNCTION? LDA B106 OUTPUT A JSB OUTCR EITHER A 'S' OR 'F' LDA .32 OUTPUT JSB OUTCR SPACE LDA BADDR,I EXTRACT AND RRR 6 PRINT AND B37 OVERLAY JSB OUTIN NUMBER JSB OUTLN OUTPUT LINE LDB MADDR COMPUTE LDA 1,I POSITION AND .7 OF ADA .3 NEXT ARS ADB 0 MNEMONIC ISZ MCNT DONE? JMP CALL1 NO! JMP PRMT YES! * CALL4 LDA B54 PRINT JSB OUTCR COMMA JMP CALL3 * CONV1 LDA I PRINT JMP CONV2 'I' * * ARRAY BSS 1 CONVR BSS 1 VALUE BSS 1 MCNT BSS 1 PCNT BSS 1 MADDR BSS 1 BADDR BSS 1 V OCT 126 R OCT 122 I OCT 111 A OCT 101 HEDER DEF *+1 ASC 24, <> SKP * * READ MNEMONIC TABLE INTO SPACE BETWEEN LONGEST * SEGMENT AND NEXT TO LONGEST SEGMENT * LOADM NOP JSB OPENF OPEN **CHANGED 790829** DEF *+7 MNEMONIC DEF DCB,I TABLE DEF FERR FILE DEF MNNAM DEF .0 DEF MNNAM+3 DEF MNNAM+4 JSB XCKER ERROR? LDA FWAMM SET STARTING STA TEMP4 ADDRESS OF MNEMONIC TBL LOAD3 JSB READF READ DEF *+6 DEF DCB,I MNEMONIC DEF FERR DEF TEMP4,I TABLE DEF .9999 INTO CORE DEF TEMP3 LDB TEMP3 CPB M1 EOF READ? JMP LOAD7 YES ADB TEMP4 NO, SET NEW READ STB TEMP4 INDEX * JMP LOAD3 NO, READ SOME MORE LOAD7 JSB XCKER ERROR? JSB FCLOS CLOSE JSB XCKER JMP LOADM,I * ********************************** * * * CHECK FOR FILE MANAGER ERROR * * * ********************************** * ********************************** * * * CHECK FOR FILE MANAGER ERROR * * * ********************************** * CKERR NOP LDA FERR IS THERE SSA,RSS AN ERROR? JMP CKERR,I NO! CKER1 CLB RESET STB PFLAG FILE FLAG STB .LNUM AND NO LINE NO. FLAG STA TEMP3 SAVE ERROR JSB FCLOS CLOSE WHATEVER FILE IS OPEN JMP OUTER AND GO TO ERROR PROCESSOR * XCKER NOP CHECK FATAL TABLES ERRORS LDA FERR IS THERE SSA,RSS ANY ERROR ? JMP XCKER,I NO CLB YES, NULL STB MNNAM MNEMONIC AND STB BRNAM BRANCH TABLES JMP CKER1 SPC 2 FCLOS NOP ROUTINE TO CLOSE AN OPEN FILE JSB CLOSE DEF *+4 DEF DCB,I DEF FERR DEF .0 JMP FCLOS,I SKP * ********************************** * * * OUTPUT A MULTICHARACTER SYMBOL * * * ********************************** * MCOPY NOP LDA 1,I COMPUTE AND .7 ENTRY CMA,INA LENGTH STA TEMP7 AND SAVE IT CLE,INB SET FOR FIRST CHARACTER STB TEMP3 SAVE SYMBOL ADDRESS MCOU3 LDA TEMP3,I LOAD WORD SEZ,RSS FIRST CHARACTER? ALF,ALF YES, POSITION IT AND B177 EXTRACT CHARACTER JSB OUTCR OUTPUT IT SEZ,CME SET FOR NEXT CHARACTER ISZ TEMP3 MOVE TO NEXT WORD OF SYMBOL ISZ TEMP7 MORE CHARACTERS? JMP MCOU3 YES JMP MCOPY,I * SKP * * HERE FOR: RESEQ M, N [,Q [,P ]] * * THE RESEQUENCE ROUTINE IS CALLED BY A USER TO ASSIGN NEW * SEQUENCE NUMBERS TO ALL OR A PART OF A PROGRAM. * M IS THE NEW INITIAL SEQUENCE NUMBER (RENM) * N IS THE NEW INCREMENT (RENN) * P IS THE FIRST STATEMENT TO BE RESEQUENCED (RENBA) * Q IS THE LAST STATEMENT TO BE RESEQUENCED. (RENLA) * DEFAULT VALUES ARE ASSIGNED AS FOLLOWS: * M=10, N=10, P=FIRST STATEMENT, Q=LAST STATEMENT * * * SET UP INITIAL SEQUENCE NUMBER AND INCREMENT * $RESQ LDB PBPTR SET UP STB RENEN PTRS STB RENLA TO FIRST LDA PBUFF AND LAST STA RENBA PROGRAM STMTS LDA .10 INITIALIZE STA RENM INITIAL SEQ # STA RENN AND INCREMENT JSB GETCR GET FIRST CHAR JMP REN1 NO PARAMETERS AT ALL JSB DIGCK NUMBER? JMP CERR3-1 NO! ADA .48 FIX UP CHAR JSB INTCK CONVERT TO BINARY DEF MAXSN JMP CERR3-1 BAD NUMBER STB RENM SAVE INITIAL STMT NUMBER JSB DELM DELIMITER JSB GETCR YES! JMP REN1 EOF! JSB DIGCK NUMBER? JMP CERR3-1 NO! ADA .48 FIX UP CHAR JSB INTCK CONVERT TO BINARY DEF MAXSN JMP CERR3-1 STB RENN SAVE NEW INCREMENT JSB DELM DELIMITER? JSB GETCR YES! JMP REN1 EOF JSB DIGCK NUMBER? JMP CERR3-1 NO! ADA .48 FIX UP CHAR JSB INTCK CONVERT TO BINARY DEF MAXSN JMP CERR3-1 BAD NUMBER STB RENBA SAVE FIRST STMT NUMBER JSB DELM DELIMITER? JSB GETCR GET NEXT CHAR JMP REN22 EOF! JSB DIGCK NUMBER? JMP CERR3-1 NO! ADA .48 FIX UP CHAR JSB INTCK CONVERT TO BINARY DEF MAXSN JMP CERR3-1 BAD NUMBER STB RENLA SAVE LAST STMT CPA .10 EOF? RSS YES! JMP CERR3-1 NO , TOO BAD! * * FIND THE LAST SEQUENCE NUMBER LESS THAN * OR EQUAL TO RENLA, AND SET RENLA TO POINT TO IT * LDB PBUFF START WITH FIRST PROGRAM WORD STB RENL REN20 EQU * CPB RENEN PROGRAM EXHAUSTED? JMP REN21 YES LDA 1,I CURRENT SEQUENCE CMA,INA NUMBER GREATER ADA RENLA THAN RENLA? SSA JMP REN21 YES STB RENL NO, SAVE POINTER TO STATEMENT LDA 1 INA SET (B) TO ADB 0,I NEXT PROGRAM JMP REN20 STATEMENT REN21 EQU * LDB RENL STB RENLA * * FIND THE FIRST SEQUENCE NUMBER GREATER THAN * OR EQUAL TO RENBA, AND SET RENBA TO POINT TO IT * REN22 EQU * LDA RENBA CMA,INA STA RENBA LDB PBUFF START WITH FIRST WORD OF PROGRAM STB RENL *******************************ADDED 800108***************************** LDA 1,I IS 1ST # > 1ST STATEMENT # ADA RENBA SZA,RSS EQUAL TO? JMP REN23 YES,GO ON AND DO OTHER CHECKING SSA,RSS IS < FIRST STATEMENT # JMP CERR3-1 YES, ISSUE ERROR **********************************800108********************************* REN23 EQU * CPB RENEN PROGRAM EXHAUSTED? JMP REN24 YES LDA 1,I CURRENT SEQUENCE ADA RENBA NUMBER GREATER THAN SSA,RSS OR EQUAL TO RENBA? JMP REN24 YES LDA 1 NO, INA SET (B) STB RENL TO NEXT ADB 0,I PROGRAM JMP REN23 STATEMENT REN24 EQU * CPB RENEN SEQ NBR BEYOND PROGRAM? JMP PRMT YES, SO FINISHED STB RENBA CPB PBUFF 1ST STATEMENT JMP REN29 YES * * TEST FOR SEQUENCE NUMBER OVERLAP AT RENBA * LDA RENM LOAD NEW BA SEQ NBR CMA,INA GET OLD ADA RENL,I SEQUENCE NUMBER SSA,RSS OVERLAP? JSB ERROR YES CERR2 EQU * REN29 EQU * LDA RENBA RENLA CMA,INA GREATER ADA RENLA THAN OR SSA EUAL TO RENBA? JSB ERROR NO, FAIL CERR3 EQU * * * GET NUMBER OF STATEMENTS IN PROGRAM * REN1 EQU * CLA INITIALIZE STA RENNS COUNTER LDB PBUFF REN27 EQU * CPB RENEN DONE? JMP REN2 YES LDA 1 ADVANCE INA TO ADB 0,I NEXT ISZ RENNS STATEMENT JMP REN27 * * GET THE NUMBER OF STATEMENTS FROM RENBA TO RENLA * REN2 EQU * CLA INITIALIZE STA RENL STATEMENT COUNTER LDB RENBA STARTING STATEMENT REN25 EQU * CPB RENLA PROGRAM EXHAUSTED? JMP REN26 YES LDA 1 NO INA SET (B) ADB 0,I TO NEXT ISZ RENL PROGRAM JMP REN25 STATEMENT * * TEST FOR SEQUENCE NUMBER OVERLAP AT RENLA * REN26 EQU * LDA RENL COMPUTE LDB RENLA NEW CPB RENEN HIGHEST ADA M1 SEQUENCE MPY RENN NUMBER SSA,RSS SZB JMP CERR2-1 OVERFLOW ADA RENM STA RENL SAVE IT ADA MAXSN IN SSA,RSS LEGAL RANGE? JMP CERR2-1 NO LDA RENLA YES CPA RENEN JMP REN3 LDB 0 MOVE INB POINTER TO ADA 1,I NEXT STATEMENT CPA RENEN BEYOND PROGRAM? JMP REN3 YES, DON'T BOTHER ABOUT OVERLAP LDB 0,I GET FOLLOWING CMB,INB OLD SEQ NBR ADB RENL TEST FOR OVERLAP SSB,RSS JMP CERR2-1 FAIL REN3 LDA RENNS GET # OF STATEMENTS IN PROGRAM. CLB DIV .32 DIVIDE INTO 32 PARTS. CMB SET B=-1-#OF OVERSIZE GROUPS, SZA,RSS BUT IF <32 STATEMENT USE -#. INB INA SET A TO SIZE OF LARGER GROUP. STA RENC1 SET COUNTER. STB RENC2 LDB ERSCA SET INITIAL POINTER TO ERSEC. STB RENSN * * NOW BUILD A TABLE IN ERSEC HAVING TH FOLLOWING STRUCTURE: * ERSEC(0;31) ARE SEQUENCE NOS. OF STATEMENTS WHICH DIVIDE * THE PROGRAM INTO 32 ALMOST EQUAL PARTS, ERSEC(32:63) ARE THE ABSO- * LUTE ADDRESSES OF THESE STATEMENTS, ERSEC(0) IS THE SEQ.NO. OF THE * FIRST STATEMENTS. * LDA PBUFF REN15 ADB .32 STA 1,I SET ABSOLUTE ADDRESS INTO TABLE. LDB 0,I SET SEQUENCE # INTO TABLE. STB RENSN,I ISZ RENSN BUMP POINTERS. ISZ RENC2 TEST FOR ANY MORE OVERSIZE CLB,RSS GROUPS. CCB COMPUTE SIZE OF NEXT GROUP. ADB RENC1 STB RENC1 CMB STB RENC3 LDB RENSN TEST FOR DONE. CPB ERS32 JMP REN14 ISZ RENC3 COMPUTE 1ST STATEMENT IN INA,RSS NEXT GROUP. JMP REN15 ADA 0,I ADA M1 JMP *-5 * * SCAN THROUGH PROGRAM FOR SEQUENCE NUMBER REFERENCES. * FOR EACH ONE, DETERMINE ABSOLUTE ADDRESS OF THE LABEL * AND REPLACE IT WITH THAT ADDRESS. IF LABEL IS NONEXISTENT. * PLACE THE NEGATIVE LABEL IN TO INDICATE THIS FACT. * REN14 LDA PBUFF INITIALIZE POINTERS STA RENQ FOR RENSK. ADA M1 STA RENP REN4 JSB RENSK GET NEXT STATEMENT REFERENCE. JMP REN9 NONE LEFT. LDB ERSCA REN7 LDA 1,I FIRST STATEMENT >=SOUGHT STATE.? CMA ADA RENP,I SSA,INA JMP REN5 FOUND ONE. INB CPB ERS32 TEST FOR DONE. RSS JMP REN7 ADB .31 LDA PBPTR STATEMENT IS IN LAST GROUP. JMP REN6 REN5 ADB .32 B=>FIRST STATEMENT IN GROUP. SZA,RSS TEST FOR FOUND. JMP REN18 CPB ERS32 TEST FOR NOT THERE. JMP REN17 LDA 1,I SET A=>FIRST WORD 1EYOND GROUP. ADB M1 AT FIRST WORD BEYOND GROUP. REN6 LDB 1,I STA RENC1 SAVE END TEST. LDA RENP,I GET SEQUENCE NUMBER. REN16 INB BUMP STATEMENT POINTER. ADB 1,I ADB M1 CPB RENC1 TEST FOR DONE. JMP REN17 CPA 1,I TEST FOR FOUND. JMP REN8 JMP REN16 REN18 LDB 1,I JMP *+3 REN17 LDB RENP,I SET BIT15 FOR ADB BIT15 UNDEFINED LABELS. REN8 STB RENP,I JMP REN4 * * NOW CHANGE ALL LABELS TO THEIR NEW VALUES. * REN9 EQU * LDA RENBA LDB RENM REN10 EQU * CPA RENLA DONE? JMP REN28 YES STB 0,I NO, RECORD NEW SEQUENCE NUMBER ADB RENN INCREMENT TO NEXT LINE NUMBER INA MOVE ADA 0,I TO ADA M1 NEXT JMP REN10 STATEMENT REN28 EQU * CPA RENEN RSS STB 0,I RECORD LAST SEQ NBR * * SCAN REFERENCES AGAIN. IF ABSOULUTE ADDRESS IS THERE, * REPLACE BY NEW LABEL. OTHERWISE REPLACE BY OLD LABEL. * ****REMOVED LABEL'REN11' 790822******* LDA PBUFF STA RENQ ADA M1 STA RENP SEEK EMBEDDED REN12 JSB RENSK STATEMENT REFERENCES JMP PRMT NONE LEFT LDA RENP,I IF REFERENCE IS CPA COMMA COMMA? JMP RENS7 YES, SET SIGN BIT RAL,CLE,SLA,ERA NEGATIVE, CLEAR BIT 15. RSS OTHERWISE, REPLAVE IT. LDA 0,I WITH THE NEW STA RENP,I LINE NUMBER JMP REN12 * RENSK NOP LDB M5 STB RENCT SET 'IF' COUNTER LDB PSTIF STB RENAD SET PAST IF STMT PTR ISZ RENP INCREMENT POINTER LDB RENQ LDA USFLG PRINT USING SZA LAST STMT? JMP RENS2 YES, SKIP OVER REST OF STMT! LDB RENQ CPB RENP STATEMENT FINISHED? JMP RENS2 YES RENS1 ISZ RENSK NO, RETURN WITH RENP JMP RENSK,I SET TO NEXT REFERENCE STB RENQ UPDATE TO NEXT STATEMENT RENS2 CLA SET PRINT USING STA USFLG FLAG CLEAR CPB PBPTR PROGRAM EXHAUSTED? JMP RENSK,I YES STB RENR SAVE CURRENT STATEMENT ADDRS ISZ RENQ LDB RENQ ISZ RENQ EXTRACT LDA RENQ,I STATEMENT AND OPMSK TYPE ADB 1,I SET (B) TO ADB M1 NEXT STATEMENT CPA RESOP ? JMP RENS5 YES! CPA GOTOP NO, ? JMP RENS3 YES CPA GOSOP NO, ? JMP RENS3 YES CPA FALOP NO, ? JMP RENS3 YES CPA CALOP NO, ? RSS YES CPA TRPOP NO, ? RSS YES! CPA PRTOP NO, ? RSS CPA IFOP NO, ? RSS YES! JMP RENS2-1 LDA RENAD,I GET PAST 'IF' OPERATOR RENS3 IOR INTFL CREATE REFERNCE HEADER STB RENQ SET POINTER TO NEXT STMT ADB M1 SET PTR TO RENS4 STB RENP PROSPECTIVE HEADER? ADB M1 CPB RENR END OF STATEMENT? JMP RENS6 YES! RENS8 CPA 1,I PRECEDED BY REFERENCE HEADER? JMP RENS9 YES ISZ RENAD GOTO NEXT OPERATOR LDA RENAD,I PAST 'IF' IOR INTFL ISZ RENCT DONE? JMP RENS8 NO! LDA PSTIF STA RENAD LDA M5 STA RENCT LDA OFOP YES, LOAD HEADER FOR CPA 1,I JMP RENS1 LDA USEOP PRINT USING? CPA 1,I JMP RENS1 YES! JMP RENS4 REFERENCE LIST RENS5 CPA RENQ,I ANY REFERENCE? JMP RENS2-1 NO JMP RENS3 YES RENS6 LDB RENQ 'THEN','GOTO', OR 'GOSUB' JMP RENS2 NOT FOUND RENS7 IOR BIT15 SET STA RENP,I SIGN JMP REN12 BIT * RENS9 CPA USEOP ? STA USFLG YES, SET FLAG FOR SKIP STMT OPERAT JMP RENS1 * RENCT DEC -3 RENL BSS 1 RENM BSS 1 *RENUM BSS 1 ***REMOVED 790822***************** RENN BSS 1 RENAD DEF THNOP RENP BSS 1 RENQ BSS 1 RENR BSS 1 RENBA BSS 1 RENEN BSS 1 RENNS BSS 1 RENC1 BSS 1 RENC2 BSS 1 RENC3 BSS 1 RENLA BSS 1 RENSN BSS 1 PSTIF DEF *+1 THESE THNOP OCT 60000 SIX GOTOP OCT 37000 ITEMS MUST RESOP OCT 55000 PRTOP OCT 53000 GOSOP OCT 43000 BE CONTIGUOUS IFOP EQU AMASK OFOP OCT 177003 TRPOP OCT 66000 USEOP OCT 161003 CALOP OCT 50000 FALOP OCT 57000 USFLG NOP M1 DEC -1 M5 DEC -5 M256 DEC -256 .31 DEC 31 INTFL OCT 100003 COMMA OCT 2003 ERSCA DEF ERSEC ERSEC BSS 64 ERS32 DEF ERSEC+32 SKP * * HERE FOR: SIM [ULATE] * $SIM LDA .1 SET SIMULATE FLAG STA SMFLG FOR SUBROUTINE CALLS JMP PRMT SPC 4 * * HERE FOR: UNSIM [ULATE] * $UNSM CLA CLEAR SUBROUTINE STA SMFLG SIMULATE FLAG JMP PRMT SKP * * HERE FOR: :RU,BASIC,NA,ME,XX * COMFL LDA REC# HAVE WE INITIALIZED CPA .1 THIS STUFF BEFORE? RSS NO! JMP COMF1 YES! *********************REMOVED 790713************************** * LDA TTYPR SET * STA COMN FILE * LDA PRINT NAME * SZA,RSS * LDA PAD * STA COMN+1 UP * LDA READR FORE * SZA,RSS * LDA PAD * STA COMN+2 'OPEN' * **************************ADDED 790713*************************** REPET LDA PTNAM,I SET UP FILE NAME WITH STA PTCMN,I SECURITY CODE AND CRN# ISZ PTNAM FOR 'OPEN' ISZ PTCMN THIS IS WHY PNTRS WAS INCREASED TO 78 ISZ M5 TO ALLOW ADDITIONAL SC AND CRN WORD JMP REPET LDA ERTTY ERRTY = LOGLU FROM BEGINNING STA TTYPR ***********************REMOVED 790713*************************** * LDA PUNCH SET UP * SZA,RSS INPUT * CLA,INA AND * IOR B400 OUTPUT * STA TTYPR DEVICES * LDA ERTTY * SZA,RSS * LDA TTYPR USE CONSOLE * STA PRINT FOR LIST IF NONE SPECIFIED * LDA .5 SET * STA READR STD INPUT * LDA .4 SET * STA PUNCH STD OUTPUT * LDA TTYPR SET * STA ERTTY STD ERROR LIST *************************790713********************************* COMF1 LDA TTYPR SET STA LUINP INPUT STA LUOUT AND OUTPUT L.U. # LDA .9999 INITIALIZE STA HILIM HIGH LIMIT STA HIRUN CLA,INA INITIALIZE STA LORUN LOW STA LOLIM LIMITS JSB OPENF OPEN ******790713************ DEF *+4 COMMAND DEF DCB,I FILE DEF FERR DEF COMN JSB CKERR ERROR? * LDB DCB IS ADB .2 THIS A LDA 1,I CSAVE'D CPA .10 PROGRAM? JMP GTCSA YES! * JSB POSNT NO, POSITION DEF *+5 TO DEF DCB,I NEXT DEF FERR RECORD DEF REC# IN DEF .1 FILE JSB CKERR * JSB READF READ DEF *+6 DEF DCB,I THE DEF FERR DEF .INBF,I COMMAND DEF .40 ***CHG FOR BUG 790928 MM*** DEF LENTH FILE RECORD JSB CKERR ERROR? * JSB LOCF GET DEF *+4 DEF DCB,I NEXT DEF FERR DEF REC# RECORD NUMBER * JSB FCLOS CLOSE LDA LENTH ZERO SZA,RSS LENGTH RECORD? JMP COMF1 YES, READ ANOTHER! SSA EOF? JMP ENDFL YES, GO TO TERMINAL INPUT MODE! RAL MAKE WORD CT INTO CHAR CT CMA SET UP STA ICCNT BUFFER INA LDB .INBF WRITE JSB WRITE OUT COMMAND LDA .INBF CLE,ELA STA INBFA JSB GETCR GET FIRST NOP CHARACTER JSB LETCK LETTER? JMP CERR1-1 NO, YOU GOTTA START WITH A LETTER LDB SBUFA INITIALIZE STB SBPTR SYNTAX BUFFER STA 1,I PUT FIRST CHAR IN IT JMP COMND GO EXECUTE THE COMMAND * ENDFL CLA CLEAR COMMAND STA PFLAG FILE FLAG INA RESET STA REC# RECORD NUMBER * JMP RDYPT GOTO TERMINAL INPUT MODE * SKP GTCSA LDA FWAMB SAVE CURRENT LDB LWBM DST TEMP4 LIMITS OF THIS PROG JSB READF READ DEF *+6 IN DEF DCB,I COMMON DEF FERR BLOCK DEF FWAM OF DEF LENCM NEW DEF TEMP3 PROGRAM LDA TEMP3 ARE RECORD CPA LENCM LENGTHS THE SAME? RSS YES, MAY BE OK THEN JSB ERROR NO, IN COMPATIBLE 'CSAVE' CER10 EQU * JSB CKERR ANY OTHER ERROR? * JSB READF READ DEF *+4 MAIN DEF DCB,I BODY DEF FERR OF DEF FWAMB,I PROGRAM JSB CKERR ANY OTHER ERRORS? * DLD TEMP4 RETRIEVE OLD BOUNDARIES CPA FWAMB IS IT THE SAME? RSS YES JMP CER10-1 NO, INCOMPATIBLE CSAVE! CPB LWBM IS END BOUNDARY THE SAME? RSS OK, RETURN JMP CER10-1 NO, INCOMPATIBLE 'CSAVE' LDA MNNAM ANY SZA TABLES? JSB LOADM YES, MAKE SURE B&M TABLES ARE STUFFED IN CCA SET FOR TERMINATE STA REC# AT END OF PROGRAM JMP RUN RUN PROGRAM * GTCS1 JSB FCLOS CLOSE JSB EXEC TERMINATE DEF *+2 DEF .6 BASIC * SKP ******************************************* * * * TABLE SEARCH FOR MULTICHARACTER SYMBOLS * * * ******************************************* TBSRH NOP STA SBPTR,I LDA TBSRH,I RSS PEEL LDA 0,I OFF RAL,CLE,SLA,ERA INDIRECTS JMP *-2 ISZ TBSRH STA TABLE STORE TABLE ADDRESS STB LNGTH STORE -(NUMBER OF ENTRIES) LDA INBFA SAVE STA TEMP3 INPUT LDA ICCNT 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 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 .8 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, JMP TSR10 TSRC2 ADA M32 DELETE BLANK, ADA SMEND,I FILL SECOND CHARACTER, TSR10 STA SMEND,I AND STORE 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 * SKP 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 INBFA INPUT LDA TEMP4 BUFFER STA ICCNT STATUS LDA SBPTR,I GET ORIGINAL CHAR ALF,ALF POSITION IT AND MSK0 ISOLATE IT JMP TBSRH,I 'FAILURE' EXIT SKP * * **************************************************** * * DELM WILL TEST FOR A DELIMITER * **************************************************** * DELM NOP CPA .32 BLANK? JMP DELM,I YES, P+1 RETURN CPA B54 COMMA? JMP DELM,I YES ISZ DELM NEITHER TAKE JMP DELM,I P+2 RETURN * * * * ***************************************************** * * INTCK WILL BUILD AN INTEGER FROM INPUT * * CALL SEQ: (A)=CURRENT CHAR * JSB INTCK * DEF (MAX #) * JMP ERR * RETURN: (B)=INTEGER * ***************************************************** * * ********************* * * * FORMAT 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 INTC3 YES STB INTGR STORE PARTIAL RESULT JSB GETCR NO, FETCH LDA .10 NEXT CHARACTER JMP INTC1 INTC2 LDB INTGR ZERO SZB,RSS INTEGER? JMP INTC3 YES LDB INTCK,I INTEGER LDB 1,I TOO ADB INTGR LARGE? SSB,RSS JMP INTC3 YES LDB INTGR NO, ISZ INTCK INTEGER IN (B) INTC3 ISZ INTCK SET FOR 'FAIL' RETURN JMP INTCK,I * INTGR BSS 1 SPC 2 SKP ********************* * * * ERROR PROCESSOR * * * ********************* * ERROR NOP CLA ZERO OUT LINE NUMBER *800322* STA .LNUM *800322* LDB ERROR ERROR SOURCE IN (B) LDA ERBS ERROR ADDRESS IN (A) INA MOVE TO NEXT ERROR CPB 0,I SAME AS ACTUAL ERROR? CMA,INA,RSS YES, MAKE ERROR NEGATIVE JMP *-3 NO ADA ERBS MAKE ERROR POSITIVE CMA,INA ADA .122 ACCOUNT FOR OTHER SEGMENTS STA TEMP3 SAVE IT JMP OUTER PRINT MESSAGE SKP *************** * * * ERROR TABLE * * * *************** ERR DEF CERR1 NOT A VALID COMMAND DEF CERR2 SEQUENCE NUMBER OVERLAP OVERFLOW DEF CERR3 SEQUENCE NUMBER ERROR DEF CERR4 PERIPHERAL UNAVAIL. OR NO RESOURCE # DEF CERR5 INVALID LOGICAL UNIT NUMBER DEF CERR6 INVALID LIMITS DEF CERR7 MORE THAN 4 BREAKPOINTS DEF CERR8 BREAKPOINT ALREADY SET DEF CERR9 NO CALLS DEFINED DEF CER10 INCOMPATIBLE CSAVE'D PROGRAM DEF CER11 CAN'T EDIT COMMANDS DEF CER12 LINE > 80 CHARS ***ADD FOR BUG 790928 MM*** * TEMP EQU TEMPS+1 TEMP1 EQU TEMPS+2 TEMP2 EQU TEMPS+3 TEMP3 EQU TEMPS+4 TEMP4 EQU TEMPS+5 TEMP5 EQU TEMPS+6 TEMP6 EQU TEMPS+7 TEMP7 EQU TEMPS+8 TEMP8 EQU TEMPS+9 TEMP9 EQU TEMPS+10 TEM10 EQU TEMPS+11 COUNT EQU TEMPT+1 LENTH EQU TEMPT+2 FRMTO EQU TEMPT+3 TABLE EQU TEMPT+4 SMEND EQU TEMPT+5 SLENG EQU TEMPT+6 TBLPT EQU TEMPT+7 TSPTR EQU TEMPT+8 LNGTH EQU TEMPT+9 FERR EQU TEMPT+10 * END BASC6