* * * * OUTPUT TO FORMATTER * .FMT NOP CLF INTP LDB .FMT,I GET ADDRESS ISZ .FMT ADJUST RETURN CLA,CLE INDICATE STARTING FORMAT JSB FMTR,I GO TO FORMATTER JMP .FMT,I RETURN * * * * * SKP * PROGRAM COMMAND * PCMD CPA ABY EXIT OPDSN? JMP OPDSN,I EXIT CPA ALF LIST SOURCE FILE JMP PLF YES CPA ACF CLEAR SOURCE FILE? JMP PCF YES CPA ADB DEFINE BUFFER? JMP PDB YES CPA ALO LIST OUTPUT BUFFER? JMP PLO YES CPA ALI LIST INPUT BUFFER? JMP PLI YES CPA ACB CLEAR BUFFER? JMP PCB YES CPA AGO START EXECUTION? JMP PGO YES * CMDL NOP (MAY BE OVERLAYED BY A JSB) RSS JMP IRQ * INER JSB .FMT INPUT ERROR DEF MSG2 JMP IRQ TRY AGAIN MSG1 ASC 3,OPDSN/ .MSG1 ASC 1,@_ MSG2 ASC 6,INPUT ERROR/ SKP * LIST PROGRAM * PLF JSB PDVC CHECK FOR FAST DEVICE LIST LDA SUPA SET STARTING OF LIST STA PRPTR POINTER PLFL LDA PRPTR,I CHECK TO PRINT STATEMNET SZA,RSS IS IT THE END OF LIST JMP IRQ YES LDB SW9 CHECK TO JSB SWRT,I ABORT LIST JMP IRQ YES CCB CONVERT AND ADB IBUFD PACK CLE STATEMENT JSB I2AS,I NUMBER LDB IBUFD ADD NUMBER TO POINTER ADB .2 RBL STB IBUFP LDA SPC PUT SPACE IN BUFFER JSB PUTC ISZ PRPTR LDA PRPTR,I * ISZ PRPTR * ADA .M1 * LDB A,I * GET PRAM TYPES STB SVB * SAVE PRAM TYPES ADA .M1 * LDB A,I * STB TMP+3 * ADA .M1 * LDA A,I * AND STATEMENT STA TMP+2 * SAVE STATEMENT ALF,ALF * JSB PUTX * PUT STATEMENT TYPE LDA TMP+2 * IN JSB PUTX * BUFFER LDA TMP+3 * AND SECOND CHATACTERS ALF,ALF JSB PUTX * LDA TMP+3 * JSB PUTX * JMP *+7 * PUTX NOP AND .177 CPA SPC IF IT'S A SPACE JMP *+3 SKIP IT JSB PUTC PUT IT IN BUFFER JMP PUTX,I TRY NEXT CHARACTER LDA SPC ADD SPACE TO BUFFER JSB PUTC SKP LDA SVB RETRIEVE PRMS TYPES ALF,ALF MOVE TO FIRST PARAMETER PLFP LDB PRPTR,I CHECK IF NO PARAMETER SZB,RSS ? JMP PLFC NO SO DON'T PROCESS IT AND .177 CPA AA IS IT ASCII? JMP PAA YES CPA AI IS IT INTEGER? JMP PAI YES CPA AK IS IT OCTAL? JMP PAK YES JMP PLFC TYPE NOT FOUND SO SKIP IT * PAA LDA PRPTR,I GET CHARACTERS ALF,ALF JSB PUTC FIRST ONE TO BUFFER LDA PRPTR,I AND .177 SKIP IF SPACE CPA SPC RSS JSB PUTC SECOND ONE TO BUFFER JMP PLFC * PAI LDA PRPTR,I CLB SSA,RSS IF POS CCB MOVE BUFFER POINTER BACK ONE ADB IBUFP STB IBUFP CLE,ERB JSB I2AS,I * PAE LDA IBUFP ADA .6 STA IBUFP JMP PLFC * PAK LDA PRPTR,I LDB IBUFP CLE,ERB JSB O2AS,I JMP PAE SKP PLFC ISZ PRPTR MOVE TO NEXT PARAMETER LDA SPC ADD SPACE TO BUFFER JSB PUTC LDA SVB SZA,RSS JMP *+4 CLB STB SVB JMP PLFP LDA IBUFP DETERMINE BUFFER COUNT LDB IBUFD * RBL * CMB,INB * ADA B * LDB IBUFD JSB DVIC OUTPUT BUFFER JMP PLFL DO NEXT INSTRUCTION SKP * DELETE A LINE * DLL JSB FNDLN FIND IT JMP IRQ NOT FOUND ADB .4 PDLL LDA .M4 SET COUNT FOR COMPARE STA TMP PDLL0 LDA B,I MOVE NEXT LINE UP STA PRPTR,I ISZ PRPTR INB ISZ TMP TIME FOR A COMPARE JMP PDLL0 NO LDA B,I YES CHECK FOR END OF LIST SZA ? JMP PDLL NO STA PRPTR,I CLEAR LAST STATEMENT SVLA LDA PRPTR SAVE LAST STATEMENT ADDRESS STA PRPLA JMP IRQ * * * CLEAR SOURCE FILE * PCF CLA STA SUPA,I LDA SUPA JMP SVLA+1 SKP * PROCESS GO * PGO NOP (MAY BE OVERLAYED BY A JSB) LDA GSPTS CLEAR GO SUB TABLE STA GSPTR LDB SUPA START AT BEGINNING STB PRPTR LDA PRPTR,I STA TMP PGOL1 ISZ PRPTR LDA PRPTR,I LDA A,I STA TMP+1 POINTER TO ROUTINE ISZ PRPTR LDA PRPTR,I STA TMP+2 PARAM A ISZ PRPTR LDA PRPTR,I STA TMP+3 PARAM B ISZ PRPTR LDA TMP STA CULN SAVE CURRENT LINE NUMBER SZA,RSS JMP IRQ LDA PRPTR,I STA TMP NEXT LINE NUMBER LDA TMP+2 GET PARAM A LDB TMP+3 GET PARAM B JSB TMP+1,I GO TO ROUTINE CLA NO LINE CHANGE LDB SW9 CHECK FOR ABORT JSB SWRT,I JMP IRQ SZA,RSS CHECK FOR LINE CHANGE JMP PGOL1 NO STA TMP JSB FNDLN JMP OPLNE LINE NUMBER NOT FOUND JMP PGOL1 FOUND * * OPLNE JSB .FMT OUTPUT NO LINE NO. DEF OPLMD OPLNN JSB .FMT OUTPUT LINE # DEF OPLND LDB CULN CURRENT LINE NUMBER OPLN. CLA,INA JSB FMTR,I JMP IRQ RETURN TO OPERATOR OPLMD ASC 3,LINE?_ OPLND ASC 5, (LINE #)/ SKP * DEFINE BUFFER * PDB STB TMP SAVE TYPE LDA B CPA AIK INSERT? JMP DBI YES CPA AIA JMP DBI YES CPA ARK REPLACE? JMP DBR YES CPA ARA JMP DBR YES JMP DBBC GIVE OPERATOR BUFFER COUNT * * DBIN NOP JSB DBN GET FIRST NUMBER STA TMP+1 SAVE IT JSB DBN GET SECOND NUMBER STA TMP+2 SAVE IT SZA,RSS IF IT'S NOT ZERO JMP DBIN,I CMA,INA CHECK FRST < SEC ADA TMP+1 SSA,RSS JMP INER JSB GETB EMPTY BUFFER JMP DBIN,I JMP *-2 * * DBN NOP JSB GETB GET A BLOCK OF DATA CLA,CCE NO INPUT SO FAKE IT SEZ,RSS IF IT'S ASCII JMP INER THEN ERROR SSA IF IT'S NEGATIVE JMP INER THEN ERROR SZA,RSS IF ZERO JMP DBN,I RETURN LDB LDBC IS IT A LIST? SZB,RSS YES LDB DBC CHECK AGAINST BUFFER COUNT CMB ADB A SSB IF LESS THAN COUNT JMP DBN,I OK JMP INER NO THEN ERROR SKP * CLEAR BUFFER * PCB JSB DBIN GET ANY PARAMETERS LDA TMP+1 CHECK IF DELETE ALL SZA ? JMP *+3 STA DBC YES CLEAR COUNT JMP DBBC JSB CLSE NO CLOSE UP AREA JMP DBBC * * * REPLACE * DBR JSB DBIN GET ANY PARAMETERS LDA TMP+1 CHECK, IF SZA,RSS ZERO? JMP INER IF SO THEN ERROR JSB CLSE CLOSE AREA THATS REPLACED JMP DBI. GOTO INSERT SECTION * * * OUTPUT BUFFER COUNT * DBBC JSB .FMT OUTPUT BUFFER COUNT DEF DBBCM LDB DBC JMP OPLN. DBBCM ASC 4,BF CT #/ SKP * CLOSE UP BUFFER * CLSE NOP ADA .M1 BACK UP ONE STA TMP+1 FOR INSERT LDB TMP+2 CHECK FOR SECOND SZB NUMBER JMP *+4 YES LDB A NO- THEN USE FIRST+1 INB STB TMP+2 SAVE IT CMB,INB * ADB A * CORRECT BUFFER ADB DBC * COUNT STB DBC * LDB TMP+2 SET ADDRESSES ADB DBD ADA DBD STA TMP+3 CLSE1 JSB DBENC LAST ADDRESS? JMP CLSE2 YES LDA B,I MOVE DATA STA TMP+3,I ISZ TMP+3 INB LDA B JMP CLSE1 NO MOVE NEXT WORD CLSE2 LDA TMP+3 JSB DBENC LAST ADDRESS? JMP CLSE,I CLA STA TMP+3,I ISZ TMP+3 MOVE TO NEXT ADDRESS JMP CLSE2 * DBENC NOP CMA IS A < THAN ADA DBD END-OF-BUFFER ADA DBCO SSA,RSS ? ISZ DBENC YES JMP DBENC,I SKP DBI JSB DBIN GET ANY PARAMETERS LDA TMP+1 CHECK IF INSERT SZA,RSS AFTER END OF BUFFER LDA DBC YES STA TMP+1 DBI. LDA TMP+1 IF NO LINE ADA DBD ADD ADDRESS STA TMP+1 SAVE IT JSB DBENC IS BUFFER FULL JMP DBBF YES JSB GIFO CALL FOR INPUT DBI0 LDA TMP+1 STA TMP+2 LDA TMP+1,I SAVE CURRENT CONTENTS STA TMP+3 JSB GTI GET INPUT LDB A LDA DBC ADA DBD JSB DBENC IS BUFFER FULL? JMP DBBF STB TMP+1,I STORE IT ISZ TMP+1 MOVE UP ADDRESSES DBI1 ISZ TMP+2 LDA TMP+2 JSB DBENC LAST ADDRESS? JMP DBI2 YES LDB TMP+3 MOVE REST OF BUFFER LDA TMP+2,I DOWN STB TMP+2,I STA TMP+3 JMP DBI1 NO MOVE MORE DBI2 ISZ DBC ADD ONE TO COUNT JMP DBI0 NO DBBF JSB .FMT YES TELL OPERATOR DEF DBFLM JMP DBBC EXIT DBFLM ASC 6,BUFFER FULL/ SKP * GET INPUT * GTI NOP LDA TMP DOES HE WANT AND .177 CPA AA ASCII? JMP GTI0 YES JSB GETB GET A BLOCK JMP DBDNE ASK IF DONE SEZ IF IT'S ASCII DONT SWAP A&B LDA B JMP GTI,I GTI0 JSB GETC GET A CHARACTER JMP DBDNE ASK IF DONE JMP GTI,I DBDNE JSB .FMT OUTPUT DONE? DEF DNEM JSB GIFO CALL FOR INPUT JSB GETB GET ANSWER JMP DBDNE NO INPUT CPA AYE YES JMP DBBC CPA ANO NO JMP *+2 JMP DBDNE NO ASK AGAIN. JSB GIFO CALL FOR ANOTHER INPUT JMP GTI+1 DNEM ASC 3,DONE?_ ANO ASC 1,NO AYE ASC 1,YE SKP PLO LDA DBC SET FOR OUTPUT BUFFER STA LDBC LDA DBD STA LDBD JMP PLB GO OUTPUT IT * PLI LDA DBCI SET FOR INPUT BUFFER STA LDBC LDA DBDI STA LDBD * PLB JSB PDVC CHECK FOR FAST DEVICE LIST LDA LDBC IS BUFFER EMPTY? SZA,RSS ? JMP IRQ YES JSB DBIN GET ANY PARAMETERS LDA TMP+1 IF FIRST = ZERO SZA JMP *+5 INA DO ALL OF BUFFER STA TMP+1 LDA LDBC STA TMP+2 LDB TMP+2 IF SEC = ZERO SZB,RSS LDB A USE INPUT COUNT STB TMP+2 CLA CLEAR LIST FLAG STA LDBC SKP DBL0 LDA FDF ERA CLA LDB DBLFM GET FORMAT JSB FMTR,I CLA,INA LDB TMP+1 OUTPUT PARAMETER JSB FMTR,I LDA .M4 SET MAX LINE NUM. CNT STA TMP+3 DBL1 LDA FDF NO OUTPUT OCTAL LISTING ERA CLA LDB DBLO JSB FMTR,I CCA LDB TMP+1 ADB LDBD ADB .M1 LDB B,I JSB FMTR,I LDB SW9 CHECK FOR ABORT JSB SWRT,I JMP DBL2 ISZ TMP+1 LDA TMP+1 CMA,INA ADA TMP+2 SSA JMP DBL2 OUTPUT COMPLETE ISZ TMP+3 JMP DBL1 CLA JSB DVIC JMP DBL0 DBL2 CLA JSB DVIC JMP IRQ FINISHED DBLFM DEF *+1 ASC 2,(#)_ DBLO DEF *+1 ASC 2, #_ SKP * WAIT FOR OPERATOR * WAP NOP JSB .FMT OUTPUT MESSAGE DEF WAPM LDB CULN WITH CURRENT LINE NUMBER CLA,INA JSB FMTR,I WAPL JSB GIFO CALL FOR INPUT LDA IBUFD,I CHECK IF "CO" CPA ACO ? JMP WAP,I CONTINUE CPA AST STOP JMP IRQ YES JSB .FMT TELL OPERATOR OF ERROR DEF MSG2 JMP WAPL AND TRY AGAIN * WAPM ASC 7,WAIT (LINE #)/ * * * * PROCESS GO TO STATEMENT * GTP NOP ISZ GTP ADJUST RETURN FOR LINE CHANGE JMP GTP,I SKP * PROCESS GOSUB * GSP NOP ISZ GSPTR MOVE TO NEXT BLOCK STB SVB SAVE REP COUNT LDB GSPTR CHECK CMB,INB IF THERE IS ADB GSPTE ROOM SSB ? JMP GSPE NO - SO ERROR LDB PRPTR SAVE PROGRAM POINTER STB GSPTR,I LOCATION ISZ GSPTR LDB SVB GET REP COUNT SZB,RSS INB SSB,RSS IF NOT NEG. CMB,INB MAKE IT NEG STB GSPTR,I ISZ GSP ADJUST RETURN FOR LINE CHANGE JMP GSP,I GSPTR NOP GSPTS DEF GSPB GSPTE DEF GSPB+30 GSPB BSS 32 * GSPE JSB .FMT DEF GSPEM JMP OPLNN GSPEM ASC 3,GS OV_ SKP * PROCESS RTN STATEMENT * RTP NOP LDA GSPTR CHECK IF THERE HAS CPA GSPTS BEEN A GOSUB JMP OPLNE NO - THEN ERROR ISZ GSPTR,I FINISHED WITH LOOP JMP RTPN NO LDA GSPTR YES ADA .M2 MOVE POINTER BACK TWO STA GSPTR INA RESET LINE NUMBER LDA A,I STA PRPTR LDA PRPTR,I STA TMP JMP RTP,I RTPN CCA ADA GSPTR LDA A,I ADA .M2 LDA A,I ISZ RTP ADJUST RETURN FOR LINE CHANGE JMP RTP,I SKP * OUTPUT A MESSAGE * MSP NOP STA MSPM+2 CLA SFC INTP SAVE INTERRUPT STATUS CCA STA DTP CLF INTP TURN OFF INTERRUPTS LDA .4 LDB MSPM JSB SLOP,I LDA DTP SZA RESTORE INTERRUPT STATUS STF INTP JMP MSP,I MSPM DEF *+1 ASC 2,* XX * * * PROCESS DELAY STATEMENT * DTP NOP SZA IF IT'S ZERO FORGET IT JSB TMRR,I GO WAIT JMP DTP,I NOW RETURN TO CALLER * * * TEST EXECUTION * TEP NOP CMA MAKE IT NEG. STA TEPA SAVE IT LDB TSTP GET POINTER TO TEST LIST TEP0 LDA B,I GET ADDRESS CPA .M1 IS IT THE TERMINATOR JMP TEP,I YES - EXIT INB ISZ TEPA IS THIS THE TEST? JMP TEP0 NO TRY NEXT ONE CPA OPNO IF IT'S OPDSN THEN FORGET IT JMP PSTOP+1 JSB A,I YES - EXICUTE IT JMP TEP,I RETURN TO CONTROL OPNO DEF OPDSN TEPA EQU * * * * STOP EXECUTION * PSTOP NOP JSB .FMT OUTPUT STOP MESSAGE DEF STPM JMP OPLNN STPM ASC 3,STOP_ SKP MXNM DEC 9999 * AA OCT 101 AI OCT 111 AK OCT 113 AP ASC 1,P AIK ASC 1,IK AIA ASC 1,IA ARK ASC 1,RK ARA ASC 1,RA ACB ASC 1,CB ABY ASC 1,BY ALO ASC 1,LO ALI ASC 1,LI ALF ASC 1,LF ACF ASC 1,CF AGO ASC 1,GO ADB ASC 1,DB ACO ASC 1,CO AST ASC 1,ST * MINUS OCT 55 SPC OCT 40 SVA NOP SVB NOP PRPTR NOP PRPLA NOP LDBC NOP LDBD NOP * IBUFP NOP IBUFD DEF IBUF NOP IBUF BSS 37 * STTBD DEF STTBP * DVIC NOP FDF NOP JMP DVIC,I JSBSD JSB SLOP,I SKP STTBP EQU * * ASC 2,WAIT ASC 1, DEF WAP * ASC 2,GOTO ASC 1,I DEF GTP * ASC 2,GOSB ASC 1,II DEF GSP