File: HEXA1.BR of Tape: Sources/Focal/s7
(Source file text)
/FILENAME: * H E X A 1 . B R * / / VERSION 52 VOM 11. 11. 76 / HEXAPUS=HEXA1.BR+HEXA2.BR+HEXA3.BR / / / * P A G E 0 0 . B R * / / / / CODE FOR TESTING WITHOUT ETH / / FOR RUN DEFINE FOLLOWING EXPRESSIONS: / / SIMOUT=0 /SIMULATES SEND ALLOWED / SIMIN=0 /SIMULATES INPUTSTREAM DEFINED METH=0 /IF WITH ETH MCDEC=0 /IF WITH COMDAND DECODER MTTY=0 /IF WITH INTERUPT ON TTY MLPT=0 /IF WITH LINE PRINTER / ODTEST=0 /FOR TEST ONLY / DRIVT=0 /FOR TESTING OG DRIVER / DRIVS=0 /FOR TESTING OF LINE OUTPUT / CLOCK=0 / RECEIVE EBABLED FOR 20B SEC ONLY / / CODE FOR MODEM INTERFACE / IMEN=6414 /INTERUPT ENABLE IMDI=6415 /INTERUPT DISABLE SKMR=6402 /SKIP ON RECEIVER FLAG RMOD=6403 /READ RECEIVE CHAR+CLEAR FLG SKMS=6401 /SKIP ON TRANSMIT CHAR AND CLEAR FLG SMOD=6404 /LOAD AND TRANSMIT CHAR WSYN=6413 /WAIT ON 2 X SYNC SMS=6416 /SET MODEM TO SEND SMR=6410 /SET MODEM TO RECEIVE SKSER=6400 /SKIP ON SEND FLAG,CLEAR FLG CON=6405 /SKIP ON CARIER ON AND CLEAR FLG COFF=6406 /SKIP ON CARIER OFF AND CLEAR DATM=6411 /SET MODEM TO DATA-MODE PHOM=6412 /SET MODEM TO PHONE-MODE / / CODE FOR LINEPRINTER / PSKF=6661 PCLF=6662 PSKE=6663 PSTB=6664 PSIE=6665 PCIE=6667 /PCL PSTB=6666 / / / OP CODES FOR CONSTANTS / M3=7346 /-3 M2=7344 /-2 M1=STA /-1 P1=7301 / 1 P2=7305 / 2 P3=7325 / 3 P4=7307 / 4 P6=7327 / 6 / / / CONSTATS FOR MODEM INTERFACE / PARBIT=4000 LINF=2400 OVRUN=1000 FRAM=2000 EOMASC=0 / BUFFERS FOR LINE INPUT AND OUTPUT / A BUFFERS ARE IN FIELD 2, B IN FIELD 1 / ETBFOA=6000 ETHA=CDF 20 ETHB=CDF 10 ETBFOB=0 ETBFIA=7000 ETBFIB=1000 ETHLE=-777 / / DEVICE BUFFERS / LO0BU=2000 /SYSTEM INFO FOR LINE LO0BUL=-23 LI0BU=2200 /FROM LINE OR ERROR TO TTY LI0BUL=-200 LO1BU=2400 /OS8 FOR LINE LO1BUL=-1400 LI1BU=4000 /LPT RING BUFFER IS SPECIAL LI1BUL=-1777 LI2BU=6000 /OS8 FROM LINE LI2BUL=-400 LI3BU=6400 /DITO LI3BUL=-400 CDBU=2030 /COMMAND DECODER BUFFER, FROM TTY CDBUL=-147 / / / ASCII 7BIT DEFINITIONS / / / / ASCII CODES / CTRLC=3 MEOM=-3 SYNC=26 MSYNC=-26 LF=12 CR=15 CTRLTA=11 CTRLZ=32 FFEED=14 SOH=16 EOR=36 EOF=35 EOI=34 AD=30 DIFF=2 /AD IS TO INDICATE ASCII OR BIN RUBOUT=177 / DIFF FOR MAXIMUM DIFFERENZE WHCICH / NEEDS Q QSL / / STREAMBITS / DLO0=1 DLI0=1 DLO1=2 DLI1=4 DLI2=20 DLI3=100 FIXTAB / INTERUPT STUF FOR ETH PROGRAM / *0 0 JMP INTERU JMP INTERU JMP INTERU ZBLOCK 10-. / / AUTOINDEX REGISTERS / *10 X0, 0 X1, 0 X2, 0 /X0-X2 USER FOR MOVE X3, 0 /USER TO STORE INFO IN ETHBUFOB X4, 0 /USED TO FETCH INFO FROM ETHBUFIB X5, 0 X6, 0 X7, 0 / / / FIELD 1 BUFFERS / BFOB, ETBFOB WCBFOB, ETHLE BFIB, ETBFIB WCBFIB, ETHLE LO0, LO0BU WCLO0, LO0BUL LI0, LI0BU WCLI0, LI0BUL LO1, LO1BU WCLO1, LO1BUL LI1, LI1BU WCLI1, LI1BUL LI2, LI2BU WCLI2, LI2BUL LI3, LI3BU WCLI3, LI3BUL CD, CDBU WCCD, CDBUL DEVTAX, 0 LO1FG, 0 LO1FP, 0 DEFSTR, 0 / / / AEREA FOR MOVE TO FIELD 2 IS FROM 20 TO 47 / / ZBLOCK 50-. *50 / / / SPECIAL RELATIVE POINTER FOR LP / LPGET, 0 LPPUT, 0 LPGTOT, 0 /LPT TOTAL POINTERS LPPTOT, 0 / / LINE-CONTROLL INFO WORDS / SSTRM, 0 /ACTUAL SEND STREAM OLDQSL, 0 SENDNO, 0 /NUMBER FOR BLOCK TO SEND SEQSL, 0 /QSL FOR SEND SSTAT, 0 /SEND STATUS INFO SCHAR, 0 /CHARACKTER FOR SEND AND RECEIVE EXPNO, 0 /EXPECTED BLOCKNUMBER RSTRM, 0 /ACTUAL RECEIVED STREAM NO RECNO, 0 /RECEIVED STATUS INFO REQSL, 0 /RECEIVED QSL RSTAT, 0 /RECEIVED STATUS INFO RCHAR, 0 /RECEIVED CHAR TOCANC, 0 /CONTAINS BIT MASC FOR STREAMS TO CANCLE CN0, 0 CN1, 0 GETP, 0 /POINTER FOR INFOPU WC1, 0 EOIFLG, 0 /EOI FOR LO1 INTERU, DCA INTAC GTF DCA INTAC+1 7721 /LOAD AC WITH MQ, CLEAR MQ DCA INTAC+2 TAD 0 DCA INTAC+3 CIF CDF 20 JMP I .+1 INTHA /JUMP TO INTERUPT HANDLER / / DISMS, CLL CLA TAD INTAC+2 MQL TAD INTAC+1 RTF CLA TAD INTAC JMP I 0 INTAC, 0 0 0 0 LPTPFL, 0 /LINEPRINTER PROCESSED FLAG TTYZF, 0 /IS SET TO 1 IF ^Z ON TTYIN / / POINTERS TO FLAGS AND SWICHES FOR IDLEJOB / REPSX, 0 SWISX, 0 LASTSX, 0 NEWFSX, 0 TABSX, 0 REPRX, 0 SWIRX, 0 LASTRX, 0 LIX, 0 WCLIX, 0 EORFX, 0 REPFX, 0 CRFLGX, 0 PAGE / * I N I T . B R * / / / START OF PROGRAM *200 6141 /DISABLE DATA BREAK 6154 /DISABLE WRC AD 6135 /CLOCK HALT LAS /TIME SETTING WITH SR 6132 /LOAD CLOCK REGISTER 6137 /CLEAR FLG 6130 /CLOCK INTERUPT ENABLE IFDEF MTTY < / DISABLES TTY FOR TEST CLL CLA IAC > /ENABLE TTY 6035 CLL CLA 6335 /DISABLE KL8E 6665 /ENABLE LPT 6500 /DISABLE DI 50 6510 /DISABLE DI 51 IFDEF METH < IMEN > /ENABLE MODEM INTERUPT IFNDEF METH < IMDI > /DISABLE MODEM FOR TEST RMOD /MODEMFLAGS CLEAR SKMS NOP SKSER NOP CON NOP COFF NOP 6032 /TTYRECEIVE 6042 /TTYPUNCH 6662 /LPT NOP NOP IFDEF METH <JMS DIAL> /DIAL NUMBER, RETUNR IF LINE READY JMS CLEAR /SET SENDNO, EXPTNO ETC / RESTAR, IOF /RESTART LOCATION NOP TAD (HLT DCA .-2 JMS LOTACL /CLEAR LO1 FILE TABLE AND RESET POINTERS /FILL WITH 0 FIRST M1 TAD BFOB DCA X3 JMS OBF0 JMS CLBFOB CDF 20 P1 DCA I (STATE DCA I (LSEND /LSEND=IDLE CDF 0 / / / SETUP SHUTDOWN JMS DEFINE DLI0 JMS VORSP 0 TAD (53 CDF 10 DCA I X3 /FILL IN SHUT DOWN JMS RESTBL /FILL REST WITH BLANCS JMS WRITEL /PUT B BLOCK TO FIELD 2 IN A BLOCK / / SET UP STARTBUF / IFDEF METH < JMS STABUF /SET UP START BUF / / NOW SET MODEM TO RECEIVE AND WAIT FOR ACK SMR > IFNDEF ODTEST <ION> IFDEF METH < / CODE IS NOTHING FOR TEST PUPUSE JMS TEST37 /WAIT FOR RESTAR JMS CLEAR JMS CLOSEF /CLOSE EVENTUAL FILES JMS TRANSM /WAIT FOR TRANSMIT OK JMS WRITEL /PUT STARTBLOCK TO LINE JMS SAVLIN /WAIT FOR FIRST ETH INFO JMS DEFINE DLI0 JMS VORSP /SET UP DEFINE BLOCK FOR LO1 0 CDF 10 TAD (41 DCA I X3 ISZ WCBFOB TAD (41 DCA I X3 ISZ WCBFOB JMS RESTBL JMS SAVLIN /WAIT FOR SECOND ETH BLOCK JMS TRANSM > /WAIT FOR START TRANSMITED JMS WRITEL /PUT LO1 DEFINING BLOCK TO LINE JMS DEFINE DLO1 /DEFINES ALSO LO0 JMS DEFLI1 JMS DEFINE DLI1 IFDEF METH < / / REMEMBER, LO1 DEFINING BLOCK IS ON LINE / JMS TRANSM JMS WRITEL > /END OF CONDITIONAL ASSEMBLY / / IFNDEF MCDEC < JMS CLCD > /SET CDBUFFER FULL FOR TEST JMP IDLEJ1 /HOPE IT WILL WORK RESTBL, 0 CDF 10 TAD [40 DCA I X3 TAD (-ETBFOB-23 TAD X3 SZA CLA JMP .-5 DCA WCBFOB CDF 0 JMP I RESTBL TRANSM, 0 CDF 20 M1 TAD I (WCBFOA SZA CLA JMP .-3 /WAIT CDF 0 JMP I TRANSM PAGE / / / / / DIAL, 0 /SUBROUTINE FOR INIT PHOM /SET MODEM TO PHON MODE 6032 /CLEAR TTY FLAGS 6042 JMS CLLI0 JMP DIAL1 IFNDEF DRIVT < JMS TELE DIALM1 JMS TELE DIALM2 JMS SEND0 JMS TOUT > /PRINT MSG DIAL1, 6031 /WAIT FOR SOME INPUT JMP .-1 6030 CLL CLA DATM /MODEM TO DATA MODE JMP I DIAL / / TOUT, 0 JMS CLLI0 TOUT1, CDF 10 TAD I LI0 CDF 0 SNA JMP TOUT2 TOUT3, TLS TSF JMP .-1 TAD (-215 SZA CLA JMP TOUT2 TAD (212 JMP TOUT3 TOUT2, ISZ LI0 ISZ WCLI0 JMP TOUT1 JMS CLLI0 JMP I TOUT / / / CLOSEF, 0 JMS FINTAC /CLEAR LO1 FILETABLE JMP .-1 TAD (LO1F2I /RESET POINTERS DCA LO1FP TAD (LO1FMI DCA LO1FG DCA LPGET /CLEAR LPT RELATIVE POINTERS IFNDEF DRIVS < DCA LPPUT > TAD CLOS2 /SETUP RETURN FOR CLOSE DCA CLOS1 TAD LI2HA SNA CLA JMP CLOF1 CDF 10 TAD (232 DCA I LI2 CDF 0 P1 DCA WCLI2 JMS SAVLI2 DCA LI2HA /CLEAR HANDLER ENTRY JMS UNDEF /REMOVE LI2 FROM DEFINED STREAMS DLI2 CLOF1, TAD LI3HA SNA CLA JMP CLOF3 CDF 10 TAD (232 DCA I LI3 CDF 0 P1 DCA WCLI3 JMS SAVLI3 DCA LI3HA /CLEAR HANDLER ENTRY JMS UNDEF DLI3 CLOF3, TAD (NOP DCA CLOS1 JMP I CLOSEF /LOOK LATER WHAT TO DO HERE / / / UNDEF, 0 TAD I UNDEF CMA AND DEFSTR DCA DEFSTR ISZ UNDEF JMP I UNDEF / / / / / CANC, 0 RDF TAD [CIF CDF 0 DCA CANCR TAD I CANC CMA AND TOCANC TAD I CANC DCA TOCANC ISZ CANC CANCR, HLT JMP I CANC / / DEFLI1, 0 JMS VORSP 0 CDF 10 TAD [41 DCA I X3 TAD [42 DCA I X3 TAD [40+40 DCA I X3 CDF 0 JMS CLBFOB JMP I DEFLI1 PAGE / / LASTCS, 0;0 REPCNS, 0;0 SWISE, 0;0 NEWFS, 0;1 BITO3, 0;0 TABSCN, 0;0 / / LASTCR, ZBLOCK 4 REPCNR, ZBLOCK 4 SWIRE, ZBLOCK 4 REPFLG, ZBLOCK 4 EORFLG, 1;1;1;1 CRFLG, 0;1;0;0 / / WRITEL, 0 JMS MOVE ETHB ETBFOB ETHA ETBFOA ETHLE JMS CLBFOA JMS CLBFOB JMS SEBLO /SAVE HEADER JMP I WRITEL / / OBF0, 0 /FILL ETHOB WITH 0 CDF 10 DCA I X3 ISZ WCBFOB JMP .-3 CDF 0 JMP I OBF0 KANZ, 0 /SETS UP STREAM TO CANCLE IN LO0 RDF TAD [CDF CIF 0 DCA KANZR TAD I KANZ DCA KANZ1 CDF 0 JMS LO0BLA /FILL WITH BLANCS FIRST TAD (45 DCA I (LO0BU TAD KANZ1 ISZ KANZ DCA I (LO0BU+1 CDF 0 JMS CLLO0 KANZR, HLT JMP I KANZ KANZ1, 0 / / / LO0BLA, 0 JMS CLLO0 CDF 10 TAD [40 DCA I LO0 ISZ LO0 ISZ WCLO0 JMP .-4 JMS CLLO0 JMP I LO0BLA /RETURNS WITH DF 10 / / / LOTACL, 0 TAD (LO1FMI-1 /CLEAR LO1 FILE TABLE AND RESET POINTERS DCA X0 TAD (LO1FMI-LO1FMA-1 DCA X1 DCA I X0 ISZ X1 JMP .-2 TAD (LO1FMI DCA LO1FG TAD (LO1F2I DCA LO1FP JMP I LOTACL / / / / / TEST37, 0 CDF 20 TAD I (WCBFIA /TEST IF 37=RESTART RECEIVED SPA CLA JMP .-2 /WAIT FOR FULL BUFFER JMS CLBFIA CDF 20 TAD I (ETBFIA AND [RUBOUT CIA TAD (37 SZA CLA JMP TEST37+1 /WAIT FOR NEXT FULL BLOCK AND TEST DCA I (ETBFIA CDF 0 JMP I TEST37 PAGE / * I D L E J O . B R * / / IDLEJ1, TAD (-5 DCA IDCN0 IDLEJO, TAD WCBFOB SPA CLA JMP LAB1 LAB3, CDF 20 TAD I (WCBFOA CDF 0 SPA SNA CLA JMP LAB2 /BUFFER OA IS NOT FREE JMS WRITEL LAB1, JMS INFOGE /BUFFER OB IS FREE LAB2, CDF 20 TAD I (WCBFIA /TEST INPUT A IF FULL WC>=0 CDF 0 SPA CLA JMP LAB4 TAD WCBFIB /BFIA IS FULL ! SMA CLA JMS READL /B IS EMPTY JMP LAB4 LAB4, TAD WCBFIB /TEST IF B IS EMPTY WC>=0 SPA CLA JMS INFOPU /IT IS NOT EMPTY SAVE INFO JMS FILEM /READ OR WRITE OS8 , TEST POINTERS ETC TAD EOIFLG /DO NOT CALL CDEC IF WE WAIT FOR CANCEL SZA CLA JMP NOCDEC CIF 20 TAD WCCD /COMMANDS TO DECODE? SPA CLA JMS CDEC /YES NOCDEC, CIF CDF 0 IFNDEF MTTY < KRB TAD (-203 SNA CLA JMP SHUTD > JMP IDLEJO / / END OF IDLEJOB / MOVE, 0 /GENERAL MOVE ROUTINE RDF TAD [CIF CDF 0 DCA MOVER M1 TAD MOVE DCA X0 /USES AUTOINDEX X0 TO X2 TAD I X0 DCA FRMFLD STA TAD I X0 DCA X1 TAD I X0 DCA TOFLD STA TAD I X0 DCA X2 TAD I X0 DCA MVC /NUMBER OF WORDS FRMFLD, HLT TAD I X1 TOFLD, HLT DCA I X2 ISZ MVC JMP FRMFLD MOVER, HLT JMP I X0 /RETURN MVC, 0 / / / / / / / / READL, 0 JMS MOVE ETHA ETBFIA ETHB ETBFIB ETHLE JMS CLBFIA JMS CLBFIB ISZ FREAD /FIRST READ ? JMP .+6 CDF 10 TAD I (ETBFIB+1 CDF 0 AND (7 DCA EXPNO DCA FREAD JMS REBLO /SAVE HEADER JMP I READL FREAD, -1 IDCN0, 0 VIERZG, 0 TAD [40 DCA I X3 JMP I VIERZG QSLNEC, 0 /ROUTINE TO TEST IF QSL IS NECESSARY TAD SEQSL TAD [-20 SMA CLA JMP QSLN1 /NEC, IT IS NEG QSL TAD RECNO CIA TAD SEQSL SNA CLA JMP I QSLNEC /NEED NO QSL QSLN1, ISZ QSLNEC JMP I QSLNEC PAGE / / / / ROUTINE TO GET INFO FROM LO BUFFERS AND FILL IN BFOB / INFOGE, 0 JMS SENALL /IS SEND ALLOWED JMP I INFOGE /NO TAD WFLG /DO WE HAVE TO WAIT FOR EXPECTED BLOCK SZA CLA JMP I INFOGE /YES TAD WCLO0 /TEST LO0 BUF FOR INFO SPA CLA JMP LAB8 /LO0 INFO LAB10A, JMS QSLNEC JMP I INFOGE TAD WCLO1 SPA CLA JMP LAB9 /LO1 INFO JMS STOPST /NO LO1 INFO, CLEAR LO1 STATUS DLO1 LAB10, CLA CLL JMS VORSP /FILL IN QSL 0 /STREAM NUMBER 0 CDF 10 TAD [40 /FILL IN NOP DCA I X3 /FILL REST WITH 0 ISZ WCBFOB JMP .-2 CDF 0 JMP I INFOGE /RETURN LAB8, JMS VORSP /FILL IN ETBFOB STREAM 0 INFO 0 JMS FILOET /STREAM IN SSTRM=0 JMP I INFOGE IFNDEF SIMOUT < LAB9, TAD RSTAT /TEST IF LO1 IS DEFINED AND (DLO1 SNA CLA JMP LAB10 > /QSL NECESSARY IFDEF SIMOUT < LAB9, > JMS VORSP 1 JMS FILOET /STREAM IN SSTRM JMP I INFOGE / / END OF INFOGE / / / / VORSP, 0 TAD (ETBFOB-1 DCA X3 /SET UP POINTER, USES AUTOINDEX X3 TAD I VORSP /FETCH ARGUMENTS STREAMBUFFERPOINTERS DCA SSTRM TAD I VORSP CDF 10 JMS VIERZG ISZ VORSP TAD SENDNO /NUMBER OF BLOCK FOR SEND JMS VIERZG TAD SENDNO /INCREMENT NO IN MODULO 17B IAC AND [17 DCA SENDNO TAD SEQSL /TEST FOR NEGATIVE QSL TAD (-20 SPA CLA JMP VORS1 /NOT NEGATIVE TAD SEQSL JMS VIERZG TAD SEQSL DCA OLDQSL TAD RECNO DCA SEQSL P1 DCA WFLG /SET WAIT ON EXPECTED BLOCK FLAG JMP VORS2 /SEND ONLY ONE NEG QSL VORS1, TAD SEQSL CIA TAD RECNO SZA CLA P1 TAD SEQSL AND [17 DCA SEQSL TAD SEQSL DCA OLDQSL TAD SEQSL JMS VIERZG VORS2, TAD SSTAT CLL RAL BSW AND (3 JMS VIERZG TAD SSTAT AND (37 JMS VIERZG CDF 0 TAD WCBFOB TAD (4 /SET PROPERWC, POINTER IS AUTOINDEX DCA WCBFOB JMP I VORSP / / END OF VORSP / WFLG, 0 REPOFI, 0 P4 CIA TAD X3 SNA CLA JMP I REPOFI /NEVER OVERWRITE VORSPAN JMS MINUS X3 JMS MINUS WCBFOB JMS MINUS WC2 JMP I REPOFI PAGE / / / / FILOET ROUTINE TO FILL ETHB OUT BUFFER / FILOET, 0 JMS FILOE1 TAD (-730 DCA WC2 TAD SSTRM SNA CLA JMP FILO0 FILO4, TAD LO1 DCA GETP TAD WCLO1 DCA WC1 JMP FILO3 FILO0, TAD LO0 DCA GETP TAD WCLO0 DCA WC1 FILO3, JMS NEWF /NEW FILE? JMS FETCHC /FETCH CHAR, RETURN+1 IF WITH CHAR JMP LAB12 /NO MOORE CHARS DCA SCHAR JMS CHATE CR /TEST FOR CR JMP LAB12A JMS CHATE LF JMP FILO3 JMS CHATE FFEED JMP FILO3 JMS CHATE 0 JMP FILO3 JMS CHATE CTRLTA JMP LAB15 TAD I LASTSX DCA .+2 JMS CHATE /TEST FOR SAME CHAR AS LAST HLT JMP LAB16 JMS REPO TAD SCHAR DCA I LASTSX FILO5, JMS CHATE CTRLZ JMP LAB14 JMS PUTCA LAB13, TAD WC2 /MOORE ROOM? SPA CLA JMP FILO3 /YES JMS SETLOX JMP I FILOET WC2, 0 LAB12A, JMS REPO TAD SCHAR DCA I LASTSX JMS PUTCA /CR PRCESSING TAD [LF JMS PUTCA TAD (-7 DCA I TABSX JMP LAB13 LAB12, JMS REPO LAB12B, JMS FILOE2 /COMES TO HERE IF NO MORE CHARS FILOER, JMP I FILOET LAB14, TAD SSTRM SNA CLA JMP LAB12 /ALWAYS EOI ON LO0 JMS REPO TAD EOIFLG /EOI? SZA CLA JMP ISEOI1 TAD [EOR JMS PUTCA P1 DCA WC1 /SET WC1 TO 1 JMP LAB12B LAB15, JMS TAB JMP FILO3 / / LAB16, TAD SSTRM SNA CLA JMP FILO5 /NO REP ON LO0 ISZ I REPSX /REPCN INCREMENT TAD (-100 TAD I REPSX /REPCOUNTER SHOULD NOT BE GREATER THEN 100 SPA CLA JMP FILO3 /IT IS LESS THEN 100 M1 TAD I REPSX DCA I REPSX /THIS CHAR IS TREATED NEXT TIME JMS REPO /GT THEN 100, CLEAR IST JMP FILO5 /PUT THIS CHAR IN BUFFER / / / SETLOX, 0 JMS OBF0 TAD SSTRM SZA CLA JMP .+6 TAD GETP DCA LO0 TAD WC1 DCA WCLO0 JMP I SETLOX TAD GETP DCA LO1 TAD WC1 DCA WCLO1 JMP I SETLOX / / PAGE / / / FILOE1, 0 TAD SSTRM TAD (LASTCS DCA LASTSX TAD SSTRM TAD (REPCNS DCA REPSX TAD SSTRM TAD (SWISE DCA SWISX TAD SSTRM TAD (NEWFS DCA NEWFSX TAD SSTRM TAD (BITO3 DCA BITO3X TAD SSTRM TAD (TABSCN DCA TABSX JMP I FILOE1 / / / END OF FILOE1 / / FILOE2, 0 TAD SSTRM SZA CLA JMP FILOE3 /STREAM LO1 DCA WCLO0 JMS OBF0 /FILL REST WITH 0 JMP I FILOE2 FILOE3, TAD GETP DCA LO1 TAD WC1 DCA WCLO1 JMS GETLO1 TAD WCLO1 SPA CLA JMP FILO4 /RETURN FOR UNPACK JMS OBF0 JMP I FILOE2 / / END OF FILOE2 / / / / / FETCHC ROUTINE TO FETCH CHARS FROM LOX BUFF / INFO MAY BE PACKED OR NOT FETCHC, 0 TAD WC1 /DO WE HAVE INFO? SMA CLA JMP I FETCHC /NO P1 TAD I SWISX /GET CHAR SWITCH TAD INJMP0 DCA INJMP2 INJMP2, HLT /CONTAINS JMP TO CHAR JMP CHAR1 JMP CHAR2 DCA I SWISX /CLEAR UNPACK SWITCH JMS GETPO BSW; CLL RTR AND [17 TAD I BITO3X /REST OF 3RD CHAR JMP FETCHR /RETURN WITH CHAR IN AC CHAR1, ISZ I SWISX JMS GETPO RTR; RTR AND (360 DCA I BITO3X JMS GETPO JMP FETCHR CHAR2, ISZ I SWISX JMS GETPO AND [RUBOUT ISZ FETCHC JMP I FETCHC FETCHR, AND [RUBOUT ISZ GETP ISZ WC1 NOP ISZ FETCHC /WE HAVE A CHAR JMP I FETCHC INJMP0, JMP INJMP2 BITO3X, 0 / / / / / / REPO, 0 TAD I REPSX SNA CLA JMP I REPO /NOTHING TO DO JMS REPOFI TAD I REPSX TAD (-3 SPA CLA /IS REPSEQUENCE BIG ENOUGH JMP NOREP TAD (SOH JMS PUTCA /PUT SOH IN BUF TAD (35 TAD I REPSX JMS PUTCA TAD I LASTSX JMS PUTCA DCA I REPSX JMP I REPO NOREP, P1 /X3 WAS SET ONE BACK!! TAD I REPSX CIA DCA I REPSX NOREP1, TAD I LASTSX JMS PUTCA ISZ I REPSX JMP NOREP1 JMP I REPO GETPO, 0 CDF 10 TAD I GETP CDF 0 JMP I GETPO PAGE PUTCA, 0 SNA /ENTER WITH OR WITHOUT CHAR TAD SCHAR CDF 10 DCA I X3 CDF 0 ISZ WCBFOB ISZ WC2 NOP ISZ I TABSX JMP I PUTCA TAD (-7 DCA I TABSX JMP I PUTCA / / / / / / / / NEWF, 0 TAD I NEWFSX /NEW FILE? SNA CLA JMP I NEWF /NO DCA I NEWFSX /YES DCA I REPSX TAD (-7 DCA I TABSX TAD (AD JMS PUTCA /PUT AD IN BUF NEWF1, DCA I SWISX JMP I NEWF / / / TAB, 0 JMS REPO /CLEAR REPO FIRST JMS PUTCA /REPO SETS C(X3)=X(X3)-1 TAD [40 DCA I LASTSX TAD I TABSX CIA DCA I REPSX TAD (-7 DCA I TABSX JMS REPO JMP I TAB CHATE, 0 TAD I CHATE /CHARACTER TEST ROUTINE AND [RUBOUT CIA TAD SCHAR AND [RUBOUT ISZ CHATE SZA CLA ISZ CHATE JMP I CHATE / / / SENALL, 0 TAD SENDNO CIA TAD REQSL SMA CLA TAD [20 TAD SENDNO CIA TAD (DIFF TAD REQSL SMA CLA ISZ SENALL JMP I SENALL / / / / / INFG, 0 /FILEPOINTER LO1 INCREMENT ROUTNE TAD LO1FG IAC DCA LO1FG TAD LO1FG CIA TAD (LO1FMA /IT IS A RING BUFFER MAX EXEEDED? SMA CLA JMP I INFG TAD (LO1FMI DCA LO1FG JMP I INFG / / / / / M2FG, 0 /SETS FILEPOINTER 2 BACK M2 /-3 IN AC TAD LO1FG DCA LO1FG TAD (LO1FMI CIA TAD LO1FG /AC MUST BE .GE. 0 SMA JMP .+3 TAD (LO1FMA+1 DCA LO1FG CLA CLL JMP I M2FG / / / / / / / USRIN, 0 JMS FLD0 DCA USRINR TAD USRINS /TEST IF USR ALREADY IN CORE SZA CLA /SKIP IF NOT JMP USRINR / ALREADY IN CORE P1 DCA USRINS CIF 10 JMS I (7700 10 USRINR, HLT JMP I USRIN USRINS, 0 /IF INIT, USR IS NOT IN CORE / / / / / USROUT, HLT /MAY NOT BE 0 FOR INTIT JMS FLD0 DCA USROUR TAD USRINS SNA CLA JMP USROUR DCA USRINS CIF 10 JMS I (200 11 USROUR, HLT JMP I USROUT PAGE / / / GETLO1, 0 /ROUTINE TO FETCH LO1 INFO FROM OS8 DEV JMP I .+1 /THIS IS FOR REENTRY OF ROUTINE LO1NEX, STARGE JMP I GETLO1 STARGE, TAD WCLO1 SPA CLA JMP I GETLO1 /NOTHING TO DO TAD I LO1FG /IS THERE INFO IN FILETABLE AND (4000 SNA CLA JMP I GETLO1 /NO TAD I LO1FG AND (77 /TEST FOR TTY SNA CLA P1 DCA CALAC /THIS IS AC FOR HANLDER CALL JMS INFG /INCR POINTER TAD I LO1FG /FETCH BLOCKNUMBER DCA GETBLO TAD CALAC JMS I LO1HA -LO1BUL%2+10 LO1BU GETBLO, 0 JMP LO1ERR TAD CALAC /WAIT FOR TTY SNA CLA JMP NOTTTY SKP JMS LO1NEX CDF 20 /NEXT ENTRY IS HERE M2 TAD I (RF /TEST IF READFLAG IS 2 CDF 0 SNA CLA JMP .-6 /WAIT RF=2 JMS LO1SUB /SET POINTERS AND WC JMS LO1STA /RESTORE ENTRY JMS INFG TAD TTYZF SZA CLA JMP LO1EOF JMP OSRET NOTTTY, JMS LO1SUB TAD (-LO1BUL%400 /UPDATE WC AND CA TAD I LO1FG DCA I LO1FG JMS INFG TAD (-LO1BUL%400 TAD I LO1FG SMA JMP LO1EOF DCA I LO1FG OSRET, JMS M2FG /RESET POINTER DCA I (SWISE+1 JMP I GETLO1 / / MORLO1, JMS USRIN TAD I LO1FG JMS FETCHH 7400 /HANDLER FOR LO1 IF NOT SYS OR DSK LO1HA, 0 /ENTRY FOR LO1HANDLER JMS USROUT JMS LO1NEX TAD WCLO1 SPA CLA JMP .-3 /WAIT FOR LO1 EMPTY P1 DCA I (NEWFS+1 /SET NEW FILE JMS LO1STA /RESTORE ENTRY JMP STARGE CALAC, 0 / / / / LO1EOF, JMS M2FG /RESET POINTER JMS FINTAC /CLEAR OLD FILE ENTRIES JMP MORLO1 JMS LOTACL P1 DCA EOIFLG /SET EOI FLAG DCA I (SWISE+1 SKP JMS LO1NEX TAD EOIFLG SZA CLA JMP .-3 P1 DCA I (NEWFS+1 SKP JMS LO1NEX /NEXT ENTRY TO GETLO1 WILL GO HERE TAD WCLI0 SMA CLA JMP .-3 JMS TELE LO1MSG JMS SEND0 JMS TTYOUT JMS LO1STA JMP I GETLO1 / / / ISEOI1, DCA EOIFLG TAD [EOI JMS PUTCA JMS OBF0 P1 DCA WCLO1 JMS LOTACL /CLEAR FILETABEL EOI, MAY BE FORCED JMP FILOER /RETURN FROM FILOET PAGE / FINTAC, 0 /CLEAR FILENAMETABLE ENTRY TAD (-3 DCA GETCN DCA I LO1FG JMS INFG ISZ GETCN JMP .-3 TAD I LO1FG /MORE ENTRIES? AND (4000 SZA CLA JMP I FINTAC ISZ FINTAC JMP I FINTAC GETCN, 0 / FETCHH, 0 /FETCH DEVICEHANDLE, ENTER WITH /DEVICENUMBER IN AC, DEVICEENTRY IS SOTRED AFTER CALLING LOC AND (77 DCA FET5 RDF TAD [CIF CDF 0 DCA FET4 RDF TAD (CDF 0 DCA FET3 TAD I FETCHH /FETCH HANDLER ADDR ISZ FETCHH DCA FET1 TAD FET5 SZA CLA /TEST FOR TTY WHICH IS SPECIAL JMP FET2 TAD (TTYIN JMP FET3 FET2, CIF CDF 0 JMS I (USRIN /LOAD USR IF NOT YET IN CORE CDF 0 CIF 10 TAD FET5 JMS I (200 1 FET1, HLT HLT /ERROR HALT TAD FET1 FET3, HLT DCA I FETCHH ISZ FETCHH FET4, HLT JMP I FETCHH FET5, 0 / LO1ERM, TEXT /LO1 ERROR/ / / / / / LO1ERR, 0 JMS CLLI0 JMS TELE LO1ERM JMS SEND0 JMS TTYOUT JMS CLLO1 CDF 10 TAD (232 /SIMULATE ^Z DCA I LO1 CDF 0 JMP LO1EOF / / / / / LO1STA, 0 /ROUTINE TO RESTORE ENTRY OF GETLO1 TAD (STARGE DCA LO1NEX JMP I LO1STA / / / / / / / / / LO1SUB, 0 CLL CLA JMS CLLO1 JMS GOSTR DLO1 JMS USROUT JMP I LO1SUB / / / / LO1MSG, TEXT /EOI LO1/ WNEGQ, JMS I [DOSA2 WNEGQ2, JMS ETHF40 DCA NUMBER /WAITING FOR CORRECT BLOCK TAD REQSL DCA WNEG1 JMS MOD17I TAD NUMBER SNA CLA /IS IT A GOOD QSL JMP GOODQ JMS MOD17I TAD NUMBER SNA CLA JMP GOODQ JMP LAB22 /IGNORE GOODQ, TAD NUMBER DCA REQSL /MAKES SEND ALLOWED JMP LAB22 WNEG1, 0 ETHF40, 0 JMS ETHF HLT TAD [-40 JMP I ETHF40 PAGE / / INFOPU, 0 TAD WCBFIB /NEW ETH BLOCK? CIA TAD [ETHLE SZA CLA JMP LAB20 /NO STA /SET UP POINTERS TAD BFIB DCA X4 /AUTOINDEX X4 FOR FETCH JMS ETHF /FETCH CHAR FROM ETH JMP LAB22 /CAN NOT USE A NULL BUFFER DCA RCHAR JMS CHATER /IS CONNECTION RESTARTET? 37 JMP RESTAR /YES JMS CHATER 36 JMP DRIVMS /DRIVERMSG? JMS OKSTR /TEST IF IT IS A POSSIBLE STREAM JMS NEGQSL /IT IS NOT, THIS INFO IS NONSENCE TAD RCHAR TAD [-40 DCA RSTRM /SAVE STREAMNO TAD RSTRM /TEST IF STREAM IS DEFINED, IF YES /INCREMENT EXPECTED NO CLL RAR /STREAM NO IS 0,2,4 OR 6 =0,1,2,3 TAD (STRBIT DCA STROM TAD I STROM /GET BITRANGE AND DEFSTR SNA CLA JMP LAB22 /STREAM NOT DEFINED JMS ETHF40 DCA NUMBER /BLOCKN - RECEIVED TAD NUMBER CIA TAD EXPNO /IS IST EXPECTED NUMBER? SNA CLA JMP LAB21 /YES TAD NEGQFL /WAITING FOR NEGATIVE REJECTED BLOCK? SZA CLA JMP WNEGQ /YES JMP BIGN /IS NUMBER GREATER THEN EXPECTED NEGQSL, 0 JMS WOHER TAD EXPNO TAD [20 DCA SEQSL /SET NEGATIVE QSL P1 DCA NEGQFL /SET NEG FLAG JMP WNEGQ2 /TEST REQSL TO MAKE SEND ALLOWED LAB22, DCA WCBFIB /SET BUFFER TO SUPPLY WC=0 JMP I INFOPU LAB21, JMS WOHER2 DCA NEGQFL /CLEAR NEG QSL FLAG DCA WFLG TAD NUMBER DCA RECNO /SAVE RECEIVED NO JMS ETHF40 /SAVE RECEIVED QQSL DCA REQSL JMS ETHF40 /STREAM STATUS BSW AND (100 DCA RCHAR JMS ETHF40 AND (37 TAD RCHAR DCA RSTAT /R JMS CANCLE TAD EXPNO IAC AND [17 /INCREMENT STREAM NUMBER DCA EXPNO TAD RSTRM /TEST OPCODE FOR STREAM 0 ONLY SZA CLA JMP LAB20 /IT IS NOT STREAM 0 JMS ETHF HLT DCA RCHAR JMS CHATER AD /IGNORE AD JMP .-5 TAD RCHAR TAD [-43 DCA BF5 ISZ BF5 / -1 TO -3 SHOULD BE IN BF5 SKP JMP SHUTD / OPCODE 42=SHUTDOWN ISZ BF5 SKP JMP LAB20 /OPCODE 41=INFO ISZ BF5 SKP JMP LAB22 /OPCODE 40=NOP TAD EXPNO /ERROR UNDEFINED OPCODE TAD [17 /IS -1 MODULO 20 AND [17 DCA EXPNO JMS NEGQSL /SET NEGATIVE QSL LAB20, JMS PUTIN JMP I INFOPU DRIVMS, DCA RSTRM JMP LAB20 /SIMULATE STREAM 0 STROM, 0 /STROM CONTAINS ADDRESS TO VALID STRBIT, DLI0 /STREAM BIT MASC DLI1 DLI2 DLI3 TEMP4, 0 BF5, 0 /CONTAINS OP CODE 0 1 2 FROM ETH NEGQFL, 0 NUMBER, 0 /BLOCK NUMBER TEMPORARY / / / PAGE MOD17I, 0 P1 TAD WNEG1 AND [17 DCA WNEG1 TAD WNEG1 CIA JMP I MOD17I / / / / / PUTIN, 0 JMS SETLIX TAD WCLIX SMA CLA JMP I PUTIN TAD RSTRM TAD (JMP LAB23+1 DCA LAB23 LAB23, HLT JMS LABLI0 JMP I PUTIN JMS LABLI1 JMP I PUTIN JMS LABLI2 JMP I PUTIN JMS LABLI3 JMP I PUTIN / / LABLI0, 0 TAD WCLI0 SPA CLA JMS FILLI0 JMP I LABLI0 / / / LABLI1, 0 JMS MORERO /DO WE HAVE ROOM? JMP I LABLI1 /NO JMS LPFILL JMS SAVLI1 JMP I LABLI1 / / / LABLI2, 0 JMS FILLI2 JMS RESWC TAD WCBFOB SPA CLA JMP I LABLI2 JMS GOSTR DLI2 JMP I LABLI2 / / / LABLI3, 0 JMS FILLI2 JMS RESWC TAD WCBFOB SPA CLA JMP I LABLI3 JMS GOSTR DLI3 JMP I LABLI3 / / / / / SETLIX, 0 TAD RSTRM CLL RAR /0 1 2 OR 3 IN AC AND (3 DCA TEMP4 TAD TEMP4 TAD (TAD I LIXX DCA .+1 HLT DCA LIX TAD TEMP4 TAD (TAD I WCLIXX DCA .+1 HLT DCA WCLIX TAD TEMP4 TAD (LASTCR DCA LASTRX TAD TEMP4 TAD (REPCNR DCA REPRX TAD TEMP4 TAD (SWIRE DCA SWIRX TAD TEMP4 TAD (REPFLG DCA REPFX TAD TEMP4 TAD (EORFLG DCA EORFX TAD TEMP4 TAD (CRFLG DCA CRFLGX JMP I SETLIX LIXX, LI0; LI1; LI2; LI3 WCLIXX, WCLI0; WCLI1; WCLI2; WCLI3 / / / / / RESWC, 0 TAD TEMP4 TAD (DCA I LIXX DCA .+2 TAD LIX HLT TAD TEMP4 TAD (DCA I WCLIXX DCA .+2 TAD WCLIX HLT JMP I RESWC PAGE / ETHF, 0 ETHF1, TAD WCBFIB SMA CLA JMP I ETHF /NO MOORE CHARS CDF 10 TAD I X4 AND [RUBOUT CDF 0 ISZ WCBFIB /INCREMENT WC NOP SNA JMP ETHF1 /DO NOT RETURN WITH A 0 ISZ ETHF /RETURN+1 JMP I ETHF / / / FILLI0, 0 /ROUTINE TO FILL IN LI0 BUFFER TAD (PUTI0 DCA PUTRUT LAB32, JMS ETHF JMP LAB34B /BUFFER FINITO DCA RCHAR TAD I REPFX /TEST REPFLG SZA CLA JMP REPIN0 TAD I EORFX SZA CLA JMP EORPI0 JMS CHARSP /TEST FOR SPECIAL CHARS JMP LAB32 /IGNORE 0 JMP EORP0 /EOR JMP EORP0 /EOF, DO SAME AS FOR EOR JMP EOIPI0 /EOI JMP NORM0 JMP LAB32 /IGNORE LF JMP REP0 /REPETITION NORM0, JMS PUTI0 SKP /LI0 IS FULL JMP LAB32 LAB34C, JMS ETHFMI /BUFFER FULL, DECREMTN POINTER AND WC LAB34, JMS RESWC JMS TTYOUT JMP I FILLI0 LAB34B, DCA RCHAR JMS PUTI0 JMP LAB34 JMP .-2 EORP0, P1 DCA I EORFX TAD [CR DCA RCHAR JMP NORM0 / / REP0, P1 DCA I REPFX JMP LAB32 / / REPIN0, JMS REPIN JMP LAB34 /BUFFER FULL JMP LAB32 / / EORPI0, DCA I EORFX /CLEAR FLAG JMP LAB32 / EOIPI0, DCA RCHAR /FILL REST WITH 0 JMS PUTI0 SKP JMP .-2 JMS INEOI JMP LAB34 / / / / / / PUTI0, 0 TAD WCLIX SMA CLA JMP I PUTI0 /BUFFER FULL TAD RCHAR SZA TAD (200 /FORCE PARBIT ON CDF 10 DCA I LIX CDF 0 ISZ LIX ISZ WCLIX ISZ PUTI0 /INCREMENT RETURN IF NOT FULL JMP I PUTI0 / / / / / CHARSP, 0 /SPECIAL CHARAKTER TEST ROUTINE TEST=JMS I TEMP8 RETOUR=JMP I CHARSP INCRE=ISZ CHARSP / / THIS IS ONLY TO MAKE IT EASY / TEST / TEST FOR 0 0 RETOUR TEST AD RETOUR /TEST FOR AD, SAME RETURN AS 0 INCRE TEST /TEST FOR EOR EOR RETOUR INCRE TEST /TEST FOR EOF EOF RETOUR INCRE TEST /TEST FOR EOI EOI RETOUR INCRE TEST /TEST FOR CR CR RETOUR INCRE TEST /TEST FOR LF LF RETOUR INCRE TEST /TEST FOR REP SOH RETOUR INCRE RETOUR TEMP8, CHATER ETHFMI, 0 /REOUTINE TO DECREMENT X4 AND WCBFIB JMS MINUS X4 JMS MINUS WCBFIB JMP I ETHFMI PAGE DEFINE, 0 TAD I DEFINE CMA AND DEFSTR TAD I DEFINE DCA DEFSTR TAD DEFSTR DCA SSTAT ISZ DEFINE JMP I DEFINE / / / MORERO, 0 /ROUTINE TO TEST SPACE FOR MORE ROOM CDF 10 TAD LPPUT TAD (LI1BU DCA LPPTOT TAD I LPPTOT CDF 0 SNA CLA ISZ MORERO JMP I MORERO / / REPIN, 0 TAD I REPFX TAD (JMP REPINA DCA REPINA REPINA, HLT JMP REPCN /1 IS REPCOUNTER SET UP JMP REPCA /2 IS REPCHARACTER JMS ETHFMI /REENTRY, BUFFER WAS FULL TAD I LASTRX DCA RCHAR BUFIL, JMS I PUTRUT JMP REPD /BUFFER IS FULL ISZ I REPRX JMP BUFIL JMS REPDON REPR, ISZ REPIN JMP I REPIN REPCN, TAD RCHAR TAD (-34 CIA TAD I CRFLGX /ONE LESS IF BEGINNING OF A LINE DCA I REPRX ISZ I REPFX JMP REPR REPCA, TAD RCHAR DCA I LASTRX ISZ I REPFX JMP REPR REPD, ISZ I REPRX JMP I REPIN JMS REPDON JMP I REPIN REPDON, 0 DCA I LASTRX DCA I REPFX DCA I CRFLGX JMP I REPDON PUTRUT, 0 / / / PUTLP, 0 /PUT INFO IN LP BUFFER SZA /ENTER WITH OR WITHOUT CHAR DCA RCHAR TAD LPPUT TAD LI1 DCA LPPTOT TAD RCHAR AND [RUBOUT TAD (200 CDF 10 DCA I LPPTOT CDF 0 TAD LPPUT IAC AND (-LI1BUL DCA LPPUT JMS MORERO SKP ISZ PUTLP /INCREMENT RETURN IF CHAR JMP I PUTLP / / / / / / CHATER, 0 TAD I CHATER AND [RUBOUT CIA TAD RCHAR AND [RUBOUT ISZ CHATER SZA CLA ISZ CHATER JMP I CHATER / / / / / MINUS, 0 TAD I MINUS ISZ MINUS DCA MINUS1 M1 TAD I MINUS1 DCA I MINUS1 JMP I MINUS MINUS1, 0 OKSTR, 0 TAD (OKSTRT-1 /ROUTINE TO TEST IF POSSIBLE DCA X0 /RSTRM NUMBER TAD (-4 DCA X1 OKSTR1, TAD RCHAR CIA TAD I X0 SNA CLA JMP OKSTR2 /WE HAVE A POSSIBLE STREAM ISZ X1 JMP OKSTR1 SKP OKSTR2, ISZ OKSTR /INCREMENT RETURN IF OK STREAM FOUND JMP I OKSTR OKSTRT, 40; 42; 44; 46 PAGE LPFILL, 0 /PROCESS REPRO FIRST TAD (PUTLP DCA PUTRUT /ENABLE REP-ROUTINE TAD EOILP SZA CLA JMP EORP LAB28, JMS ETHF /THIS IS 200 M JMP I LPFILL /BUFFER EMPTY RETURN DCA RCHAR IFDEF DRIVS < JMP LAB28 > /DO NOT USE LP IF LINE TEST, CLEAR BUF TAD I REPFX SZA CLA JMP REPO1 TAD I CRFLGX SZA CLA JMP CRP1 JMS CHATER /ELIMINATE ADS AD JMP LAB28 JMS CHARSP /TEST SPECIAL CHARS JMP LAB28 /CHAR IS 0 OR AD JMP EORP JMP EORP JMP EOIP /FETCH MORE IGNORE JMP CRPRO / JMP LAB28 JMP REPPRO NORM1, JMS PUTLP /PUT IN LPBUFFER JMP I LPFILL /BUFFER FULL JMP LAB28 EORP, P1 DCA I EORFX P1 DCA I CRFLGX TAD [CR JMS PUTLP JMP I LPFILL DCA EOILP TAD [CR JMP NORM1 EOIP, DCA WCBFIB P1 DCA EOILP /SET EOIFLG JMP EORP EOILP, 1 CRPRO, P1 DCA I CRFLGX JMP NORM1 REPPRO, P1 DCA I REPFX JMP LAB28 CRP1, JMS LPKICK JMS CHARSP JMP LAB28 JMP EORP JMP EORP JMP EOIP JMP CRPRO JMP LAB28 JMP REPPRO JMS CHATER FFEED JMP ISFFEE DCA I CRFLGX JMS CHATER "0 JMP .+7 JMS CHATER "1 SKP JMP LAB28 ISFFEE, TAD (FFEED SKP TAD [CR JMP NORM1 / / REPO1, JMS REPIN JMP I LPFILL /BUFFER FULL JMP LAB28 / / / LPKICK, 0 /KICKS ON LP IF POSSIBLE OR NECESSARY TAD LPTPFL SZA CLA JMP I LPKICK /LP RUNS TAD (LI1BU TAD LPGET DCA LPGTOT CDF 10 TAD I LPGTOT CDF 0 DCA ETHF /SAVE CHAR TAD ETHF SNA CLA JMP I LPKICK /NO INFO RETURN CLL CLA IAC /SET LPTPFL DCA LPTPFL TAD LPGET IAC AND (-LI1BUL /INCREMENT POINTER DCA LPGET CDF 10 DCA I LPGTOT CDF 0 TAD ETHF 6666 /PRINT CHAR CLL CLA JMP I LPKICK / / / SAVLIN, 0 CDF 20 TAD I (WCBFIA SPA CLA JMP .-2 CDF 0 JMS READL JMS INFOPU JMP I SAVLIN PAGE / / CANCLE ONLY IF STREAM IS IN RSTAT, BUT NOT IN SSTAT / / / CANCLE, 0 TAD SSTAT CMA AND RSTAT CMA AND TOCANC DCA CHATER /SAVE BITMASC TAD CHATER SNA JMP I CANCLE /NOTHING TO DO CMA AND DEFSTR DCA DEFSTR TAD CHATER CMA AND TOCANC DCA TOCANC JMP I CANCLE / / / / / / SAVLI1, 0 JMS LPKICK TAD LPPUT /ENOUGHT ROOM IN LP BUF TO MAKE GOSTREAM CIA TAD LPGET SMA TAD (LI1BUL TAD (1000 /RESULT IS -OCUPIED LOCS OF LI1 SPA CLA JMP I SAVLI1 JMS GOSTR /SET STREAMBIT DLI1 JMP I SAVLI1 / / / / / / / FILLI2, 0 TAD (PACK2 DCA PUTRUT TAD EOI23 SNA CLA JMP LAB38 JMS ETHF /IF A NEW FILE ELIMINATE BINARY VORSPAN JMP I FILLI2 TAD (-AD SZA CLA JMP .-4 DCA EOI23 LAB38, JMS ETHF JMP I FILLI2 DCA RCHAR TAD I REPFX SZA CLA JMP REP2 JMS CHARSP JMP LAB38 /IGNORE 0 JMP EORP2 JMP EORP2 JMP EOIP2 JMP NORM2 /CR JMP LAB38 /IGNORE LF JMP REPO2 NORM2, JMS PACK2 /PACK INTO BUF2 SKP JMP LAB38 NORM22, JMS SAVLIX JMP LAB38 EORP2, TAD (CR DCA RCHAR JMP NORM2 EOIP2, TAD [CTRLZ DCA RCHAR JMS PACK2 NOP DCA RCHAR JMS PACK2 SKP JMP .-2 JMS INEOI JMP NORM22 BIGN, P1 TAD EXPNO AND [17 CIA TAD NUMBER SZA CLA JMP LAB22 /ASSUME I HABE IT ALREADY JMS NEGQSL /IT IS REALY BAD / / / / REPO2, P1 DCA I REPFX JMP LAB38 PAGE REP2, JMS REPIN JMP NORM22 /BUFFER FULL JMP LAB38 / / / / / PACK2, 0 /CHAR IN RCHAR TAD WCLIX SMA CLA JMP I PACK2 /BUFFER FULL TAD I SWIRX TAD [JMP C0 IAC DCA C0 C0, HLT JMP C1 JMP C2 JMP C3 C1, ISZ I SWIRX JMS FORPAR DCA CHAR23 ISZ WCLIX JMP LAB41 C2, ISZ I SWIRX JMS FORPAR DCA CHAR23 JMS STOR23 M2 TAD LIX DCA LIX ISZ PACK2 JMP I PACK2 C3, JMS FORPAR CLL RTL; RTL AND [7400 CDF 10 TAD I LIX DCA I LIX CDF 0 ISZ LIX DCA I SWIRX /RESET CHARSWITCH JMS FORPAR BSW; CLL RTL AND [7400 CDF 10 TAD I LIX CDF 0 DCA CHAR23 ISZ WCLIX TAD WCLIX /BUFFER FULL SPA CLA /DO NOT INCR RETUNR IF YES LAB41, ISZ PACK2 JMS STOR23 JMP I PACK2 FORPAR, 0 TAD RCHAR AND [RUBOUT SZA TAD [200 JMP I FORPAR CHAR23, 0 /TEMPORARY CHAR STORAGE / / / / / / STOR23, 0 TAD CHAR23 CDF 10 DCA I LIX CDF 0 ISZ LIX JMP I STOR23 / / / / SAVLI2, 0 /ROUTINE TO SAVE LI2 INFO ON OS8 DEVICE TAD WCLI2 /NOW SET UP ALL SAVE INFO SPA CLA JMP I SAVLI2 /NOTHING TO DO TAD WCLI2 DCA SAVWC TAD LI2DEV DCA SAVDEV TAD LI2HA /SAVE-HANDLER DCA SAVHA TAD (LI2BU DCA SAVBU TAD (-LI2BUL%2 /HOW MANY PAGES AND [3700 TAD (4010 /OUTPUT FROM FIELD1 DCA SAVPA TAD LI2BLO DCA SAVBLO /ACTUAL BLOCK NUMBER TAD LI2FNP /FILENAME POINTER IF CLOSE DCA SAVFP TAD LI2FL DCA SAVLE JMS OS8OUT /SAVE!!! TAD SAVLE /ONLY RETURN IF ALL OK, SAVE BLOCK INFO DCA LI2FL TAD SAVBLO DCA LI2BLO JMS CLLI2 /SET LI2 FREE DCA I SWIRX JMP I SAVLI2 / / LI2 FILE INFO TABLE / LI2DEV, 0 /DEVICE NUMBER LI2HA, 0 /ENTRY POINT OF HANDLER LI2BLO, 0 /LI2 DEVICE POSITION LI2FL, 0 /BLOCKS WRITTEN LI2FNP, LI2NAM LI2NAM, 0 0 0 0 / PAGE / / / / SAVLI3, 0 TAD WCLI3 SPA CLA JMP I SAVLI3 TAD WCLI3 DCA SAVWC TAD LI3DEV DCA SAVDEV TAD LI3HA DCA SAVHA TAD (LI3BU DCA SAVBU TAD (-LI3BUL%2 AND (3700 TAD (4010 DCA SAVPA TAD LI3BLO DCA SAVBLO TAD LI3FNP DCA SAVFP TAD LI3FL DCA SAVLE JMS OS8OUT TAD SAVLE DCA LI3FL TAD SAVBLO DCA LI3BLO JMS CLLI3 DCA I SWIRX JMP I SAVLI3 / /LI3 FILE INFO TABLE / LI3DEV, 0 /CONTAINS DEVICENUMBER LI3HA, 0 /ENTRY POINT OF HANDLER LI3BLO, 0 /ACTUAL BLOCK NUMBER LI3FL, 0 /OS8BLOCK WRITEN LI3FNP, 0 LI3NAM /POINTER TO FILENAME LI3NAM, 0 /FILENAMETABLE 0 0 0 /EXTENSION STARTS WITH 6060 / / / / / OS8OUT, 0 /GENEAR SAVE ROUTINE JMS I SAVHA SAVPA, 0 /FILED BEFORE CALL SAVBU, 0 SAVBLO, 0 JMP OS8ERR TAD SAVPA /NOTHING SPECIAL BSW CLL RAR AND (17 /CALC OS8BLOCKS WRITTEN DCA SAVPA TAD SAVBLO TAD SAVPA DCA SAVBLO TAD SAVLE TAD SAVPA DCA SAVLE OS8RET, JMS CLOSE /CLOSE NECESSARY? WC=1 JMS USROUT JMP I OS8OUT SAVHA, 0 SAVWC, 0 / / OS8ERR, JMS CLLI0 /FORCE MSG JMS TELE OS8MSG OS8ER1, JMS SEND0 JMS TTYOUT JMS USROUT /USR OUT NECESSARY, THEN DO IT CDF 20 /WAIT FOR MSG WRITTEN TAD I (TTYAC SZA CLA JMP .-2 CDF 0 JMP SHUTD /FORCE ON SHUTDOWN BECAUSE TOO MUCH /IS WRONG AND BEHAVEOUR OF SYSTEM CAN NOT LONGER BE PREDECTED / / OS8MSG, TEXT /OS8 ER, RESTART/ EOI23, 1 INEOI, 0 P1 DCA EOI23 P1 DCA WCBFIB P1 DCA I EORFX DCA I SWIRX P1 DCA WCLIX JMP I INEOI / INTV, 0 TAD RCHAR TAD I INTV ISZ INTV SPA CLA TAD (200 /NOT IN INTERVALL, FORCE RUTURN+1 TAD RCHAR TAD I INTV ISZ INTV SPA SNA CLA JMP I INTV /OK IN INTERVALL ISZ INTV JMP I INTV PAGE / / / / / / / / / / / / / SAVDEV, 0 /DEVICENUMBER FOR SAVE EXTP, 0 /POINTER TO SAVEFILE EXTENSION CLOSE, 0 TAD SAVWC SNA CLA CLOS2, JMP I CLOSE /NO CLOSE NECESSARY JMS USRIN TAD SAVDEV CDF 0 CIF 10 JMS I (200 4 SAVFP, 0 /POINTER TO FILENAME SAVLE, 0 JMP CLOER CLOS1, NOP /USED FOR RETURN FROM INIT CLOSEF TAD SAVFP TAD (3 DCA EXTP TAD I EXTP /GET EXTENSION AND (77 IAC TAD (-72 SNA CLA TAD (7 TAD I EXTP IAC DCA I EXTP TAD SAVFP /OPEN TENTATIVE FILE DCA ENTFP TAD SAVDEV CDF 0 CIF 10 JMS I (200 3 ENTFP, 0 /OINTER TO FILENAME 0 JMP ENTERR DCA SAVLE /0 SAVLE INDICATES NEW FILE TAD ENTFP DCA SAVBLO /STARTING BLOCK OF NEW FILE JMS USROUT JMP I CLOSE / / CLOER, CLL CLA JMS TELE CLOMSG JMP OS8ER1 /MSG WITH RESTART ENTERR, CLL CLA JMS TELE ENTMSG JMP OS8ER1 /MSG WITH RESTART / / CLOMSG, TEXT /CLOSE ERROR RESTART!/ ENTMSG, TEXT /ENTER ERROR RESTART!/ / / / / / / / / / / SAVLIX, 0 JMS RESWC /RESTORE WC JMS SAVLI2 JMS SAVLI3 JMS SETLIX /RESTORE NEW POINTERS JMP I SAVLIX / / / STOPST, 0 /ROUTINE TO STOP STREAM TAD I STOPST ISZ STOPST CMA AND SSTAT /MASC OUT STREAM TO STOP DCA SSTAT JMP I STOPST / / / GOSTR, 0 TAD I GOSTR AND DEFSTR /SET ONLY DEFINED STREAMS CMA AND SSTAT /MASC OUT TO PREVENT OVERFLOW TAD I GOSTR ISZ GOSTR DCA SSTAT JMP I GOSTR TTYOUT, 0 CIF 20 JMS I (TTYOU1 JMP I TTYOUT TTYIN, 0 SNA CLA JMP .+5 P4 TAD TTYIN DCA TTYIN P1 CIF CDF 20 JMS I (TTYIN1 JMP I TTYIN PAGE / * F I L E M . B R * / / / FILEM, 0 /ROUTINE PERFORMS SAVE AND FETCH OF JMS GETLO1 /GET LO1 INFO IF THERE IS ANY OR BUF FREE JMS GETCD /ALL SORT OF INFO TAD WCLI0 SMA CLA JMS TTYOUT /WRITE TTY OUTPUT INFO (INTERUPTDRIVEN ) JMS SAVLI1 /KICK ON LPT IF NECESARY JMP I FILEM / / / / / GETCD, 0 /CALLS TTYIN FOR CD IF CD AND TTY IS FREE TAD WCCD SPA CLA JMP I GETCD JMS TTYIN /TTY IS SELFLOCKING JMP I GETCD / / / / / TELE, 0 /PUT TEXTSTRING IN LI0 BUF TAD I TELE /FETCH POINTER TO STRING ISZ TELE DCA TELE1 RDF TAD [CIF CDF 0 DCA TELER+1 /DATA FIELD MUST BE CALLING FIELD RDF TAD (CDF 0 DCA TELE7 JMS WHERE1 /SET LI0 AND WCLI0 FROM CORRECT FIELD TAD WCLI0 /BUFFER FREE? SMA CLA JMP TELER TELE2, TAD I TELE1 BSW JMS TELE3 JMP TELER /FINITO OR BUFFER IS FULL TAD I TELE1 JMS TELE3 JMP TELER ISZ TELE1 JMP TELE2 TELER, JMS WHERE2 HLT JMP I TELE TELE1, 0 / / / / / / / TELE3, 0 AND (77 SNA JMP TELE4 ISZ TELE3 /NOT FINITO TAD [-40 SPA JMP TELE5 TAD (240 TELE6, AND (377 CDF 10 DCA I LI0 TELE7, HLT /SET FIELD FOR FETCH OF TEXT ISZ LI0 ISZ WCLI0 JMP I TELE3 JMP TELER /BUFFER IS FULL TELE5, TAD (340 JMP TELE6 TELE4, TAD (215 /OUTPUT CR JMP TELE6 / / / / SEND0, 0 /FILLS LI0 WITH 0 JMS FLD0 DCA SEND0R+1 CDF 10 DCA I LI0 ISZ LI0 ISZ WCLI0 JMP .-3 SEND0R, JMS WHERE2 HLT JMP I SEND0 / WHERE1, 0 TAD TELE7 DCA .+1 HLT /CONTAINS CDF 0 OR 20 TAD I (LI0 /IF FIELD IS 0, THIS IS A NOP ROUTINE DCA LI0 TAD I (WCLI0 DCA WCLI0 JMP I WHERE1 / / WHERE2, 0 TAD TELE7 DCA .+1 /RESTORE POINTER AND WC TO CALLING FIELD HLT TAD LI0 DCA I (LI0 TAD WCLI0 DCA I (WCLI0 JMP I WHERE2 / / / / / / / / SHUTD, CDF 20 TAD I (WF SZA CLA JMP SHUTD CDF CIF 0 IOF /THIS IS END OF PROGRAM CAF /CLEAR ALL FLAGS JMP I (7600 / / BUFFER CLEAR ROUTINES / CLBFOA, 0 CDF 20 TAD (ETBFOA ETHA DCA I (BFOA TAD (ETHLE DCA I (WCBFOA CDF 0 JMP I CLBFOA / / PAGE CLBFIA, 0 CDF 20 TAD (ETBFIA ETHA DCA I (BFIA TAD (ETHLE DCA I (WCBFIA CDF 0 JMP I CLBFIA / / CLBFOB, 0 TAD (ETBFOB DCA BFOB TAD (ETHLE DCA WCBFOB JMP I CLBFOB / / CLBFIB, 0 TAD (ETBFIB DCA BFIB TAD (ETHLE DCA WCBFIB JMP I CLBFIB / / CLLI0, 0 RDF TAD [CIF CDF 0 DCA CLLI0R CIF CDF 0 TAD (LI0BU DCA LI0 TAD (LI0BUL DCA WCLI0 CLLI0R, HLT JMP I CLLI0 / / CLLI1, 0 /SPECIAL FOR LPT BUF TAD (LI1BU DCA LI1 TAD (LI1BUL DCA WCLI1 DCA LPTPFL /LP PROCESSED FLG CLEAR IFDEF DRIVS < IOF > IFDEF MLPT < / / DISABLE BUFFER SET 0 FOR TEST / STA /FILL LPBUF WITH 0 TAD LI1 DCA X0 CDF 10 DCA I X0 ISZ WCLI1 JMP .-2 CDF 0 TAD (LI1BUL DCA WCLI1 > DCA LPPUT /CLEAR RELATIVE POINTERS IFDEF DRIVS < ION > DCA LPGET P1 DCA EOILP /SET EOIFLG TO FORCE FF JMP I CLLI1 / / CLLI2, 0 TAD (LI2BU DCA LI2 TAD (LI2BUL DCA WCLI2 JMP I CLLI2 / / CLLI3, 0 TAD (LI3BU DCA LI3 TAD (LI3BUL DCA WCLI3 JMP I CLLI3 / / CLCD, 0 TAD (CDBU DCA CD TAD (CDBUL DCA WCCD JMP I CLCD / / / / CLEAR, 0 CLA CLL DCA TOCANC /SET UP BLOCK NUMBER STUFF P1 DCA SENDNO P1 DCA EXPNO DCA REQSL P1 DCA RECNO / / O BUFFERS ARE TREATED BY INIT AND FILLED WITH INFO / JMS CLBFIA DCA WCBFIB JMS CLLI1 JMS CLLI2 JMS CLLI3 DCA WCLO0 DCA WCLO1 DCA WCCD /SET COMMAND DECODER EMPTY JMP I CLEAR / / / CLLO0, 0 TAD (LO0BU DCA LO0 TAD (LO0BUL DCA WCLO0 JMP I CLLO0 / / CLLO1, 0 TAD (LO1BU DCA LO1 TAD (LO1BUL DCA WCLO1 JMP I CLLO1 / / / PAGE FLD0, 0 RDF AND (70 TAD [CIF CDF 0 CDF 0 JMP I FLD0 LO1FMI, ZBLOCK 3^15-1 LO1FMA, 0 DIALM1, TEXT /DIAL NUMBER 01 47 53 18/ DIALM2, TEXT /AND IF LINE IS READY, PRESS ANY CHARACTER/ INTER1, JMS CLLI0 JMS TELE INTER2 JMS SEND0 JMS TOUT JMP SHUTD INTER2, TEXT /UNRECOGNISED INTERUPT/ STABUF, 0 TAD (STA1-1 /SET UP POINTERS DCA X0 TAD (ETBFOB-1 DCA X3 STA2, TAD I X0 AND [RUBOUT SNA JMP STA3 CDF 10 DCA I X3 ISZ WCBFIB CDF 0 JMP STA2 STA3, JMS OBF0 JMP I STABUF STA1, 37 /RESTART BUFFER "D; "A; "V; "O; "S; 0 PAGE