From eb6da5751649a87af795a939c02c9c32dbdbfa74 Mon Sep 17 00:00:00 2001 From: Eric Swenson Date: Tue, 20 Dec 2016 16:06:53 -0800 Subject: [PATCH] Added CHATST. Resolves #308. Source from AI: MOON; CHATST 56. --- README.md | 1 + build/build.tcl | 4 + src/sysen3/chatst.56 | 674 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 679 insertions(+) create mode 100755 src/sysen3/chatst.56 diff --git a/README.md b/README.md index d2d69c4f..c0f7fe50 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,7 @@ A list of [known ITS machines](doc/machines.md). - BYE, say goodbye to user. Used in LOGOUT scripts. - CALPRT, decode a .CALL instructions CALL block. - CHARFC/CHARFS, Chaos RFC. + - CHATST, Chaos test. - CHTN, CFTP, Chaosnet TELNET and FTP support. - COMPLR, lisp compiler. - COMSAT, Mail server. diff --git a/build/build.tcl b/build/build.tcl index f6820b85..24427b45 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -1018,6 +1018,10 @@ expect ":KILL" respond "*" ":midas sys2;ts tags_sysen2;tags\r" expect ":KILL" +# CHATST +respond "*" ":midas sys2;ts chatst_sysen3;chatst\r" +expect ":KILL" + # STYLOG respond "*" ":midas sys2;ts stylog_sysen1;stylog\r" expect ":KILL" diff --git a/src/sysen3/chatst.56 b/src/sysen3/chatst.56 new file mode 100755 index 00000000..36b133b9 --- /dev/null +++ b/src/sysen3/chatst.56 @@ -0,0 +1,674 @@ +;;;-*-Midas-*- + + TITLE CHAOS TEST & EVENTUAL ROUTINES + + +A=1 +B=2 +C=3 +D=4 +E=5 +T=6 +TT=7 +P=17 + +U1==11 +U2==12 +U3==13 +U4==14 + +TYIC=10 +TYOC=11 +CHIC=12 +CHOC=13 + +PRTALL: 1 ;NON-ZERO MEANS PRINT ALL PACKETS BEFORE SENDING THEM + ;ALSO YOU CAN PUT A BREAKPOINT AT SEND1 + +PDL: -60,,. + BLOCK 60 + +.INSRT SYSTEM; CHSDEF > + +BF: BLOCK %CPMXW + +$$OUUO==1 ;Include "old" UUOs +$$OHST==1 ;Hostname output +.INSRT KSC;MACROS > +.INSRT KSC;NUUOS > + +DEFINE %%.CRLF C,ARG +IFSN ARG,, .ERR non-null argument "ARG" after CRLF in FWRITE + CRLF C, +TERMIN + +GO: MOVE P,PDL + .SUSET [.ROPTION,,A] + TLO A,%OPOPC + .SUSET [.SOPTION,,A] + MOVE A,[JSR TSINT] + MOVEM A,42 + MOVE A,[JSR UUOH] + MOVEM A,41 + .OPEN TYIC,[.UII,,'TTY] + .LOSE %LSFIL + .OPEN TYOC,[.UAO,,'TTY] + .LOSE %LSFIL +; UARINIT [-100,,300] +; STRINIT + OUTOPN TYOC, + MOVEI A,200 + MOVEI B,CHIC + PUSHJ P,NETWRK"HSTMAP + .LOSE + .CALL [ SETZ + 'CHAOSO + MOVEI CHIC + MOVEI CHOC + SETZI 10 ] ;DEFAULT WINDOW SIZE + .LOSE 1000 + .SUSET [.SMASK,,[%PIIOC]] + .SUSET [.SMSK2,,[1_CHIC+1_CHOC]] +CMD: FWRITE TYOC,[CRLF,,[>]] + .IOT TYIC,A + CAIL A,141 + CAILE A,172 + CAIA + SUBI A,40 + .IOT TYOC,A + MOVSI B,-CMDTL +CMD1: HLRZ C,CMDT(B) + HRLI C,440700 + ILDB D,C + CAME D,A + AOBJN B,CMD1 + JUMPGE B,[ .IOT TYOC,[^G] ? JRST CMD ] + FWRITE TYOC,[TPZ,C] + HRRZ C,CMDT(B) + PUSHJ P,(C) + JRST CMD + +DEFINE CM NAME,LOC + [ASCIZ/NAME/],,LOC +TERMIN + +CMDT: CM RFC,ARFC + CM OPEN,AOPN + CM CLOSE,ACLS + CM EOF,AEOF + CM LISTEN,ALSN + CM INPUT-ONE,AINP + CM SOAK,ASOAK + CM DATA-OUT,ADAT + CM XMIT-ANYTHING,AXMT + CM HOSTAT,HOSTAT + CM PRINT-ROUTING-TABLE,PRT + CM ?,AHELP + CM QUIT,AQUIT +CMDTL==.-CMDT + +AHELP: MOVSI B,-CMDTL +AHELP1: HLRZ C,CMDT(B) + TRNE B,-1 + .IOT TYOC,[",] + FWRITE TYOC,[TZ,(C)] + AOBJN B,AHELP1 +CPOPJ: POPJ P, + +AQUIT: .BREAK 16,40000 + +;INPUT ONE PACKET AND PRINT IT +AINP: MOVEI C,1 + JRST ASOAK1 + +;PRINT STATE, SOAK UP AND PRINT PACKETS +ASOAK: .CALL [ SETZ + 'WHYINT + MOVEI CHIC + MOVEM A ;%WYCHA + MOVEM B ;STATE + MOVEM C ;INPUT,,OUTPUT COUNT + SETZM D ;INPUT,,OUTPUT WINDOW + ] + .LOSE 1000 + FWRITE TYOC,[[State=],TZ,@STATAB(B),CRLF,,] + HLRZS C +ASOAK1: SOJL C,CPOPJ + .CALL [ SETZ ? 'PKTIOT ? MOVEI CHIC ? SETZI BF ] + .LOSE %LSSYS + MOVEI A,BF + PUSHJ P,PPKT + JRST ASOAK1 + +STATAB: IRP ST,,[Closed,Listening,RFC-Received,RFC-Sent,Open,Lost,Incomplete-Transmission] + [ASCIZ/ST/] + TERMIN + +CLBF: SETZM BF + MOVE T,[BF,,BF+1] + BLT T,BF+37 + POPJ P, + +PBF: PUSH P,A + MOVEI A,BF + PUSHJ P,PPKT + POP P,A + POPJ P, + +;HOST INPUT TO A, BY NAME OR NUMBER +;SMASHES B,C,D,E, PUTS NETWORK NUMBER IN TT +HSTIN: PUSHJ P,NETWRK"HOSTNM + CAIA + POPJ P, + FWRITE TYOC,[CRLF,,[Bad Host Name]] + MOVE P,PDL + JRST CMD + +GETCHR: .IOT TYIC,T +POPJ1: AOS (P) + POPJ P, + +PUTCHR: .IOT TYOC,T +SPCHAN: POPJ P, + +;OCTAL INPUT TO A +OCTIN: PUSHAE P,[B,C,D,E] + MOVEI D,8 + MOVEI E,[ASCIZ/Octal/] +OCTIN0: SETO B, + SETZ A, +OCTIN1: .IOT TYIC,C + .IOT TYOC,C + CAIL C,"0 + CAILE C,"9 + JRST OCTIN2 + IMUL A,D + ADDI A,-"0(C) + AOJA B,OCTIN1 + +OCTIN2: JUMPGE B,OCTIN3 + FWRITE TYOC,[TZ,(E),[ number please: ]] + JRST OCTIN0 + +OCTIN3: POPAE P,[E,D,C,B] + POPJ P, + +;DECIMAL NUMBER INPUT TO A +DECIN: PUSHAE P,[B,C,D,E] + MOVEI D,10. + MOVEI E,[ASCIZ/Decimal/] + JRST OCTIN0 + +;ASCII INPUT TO BYTE POINTER IN B, COUNT COMES BACK IN A. +ASZIN: PUSHAE P,[C,D,E,B] +ASZIN0: MOVEI A,0 + MOVE B,(P) +ASZIN1: .IOT TYIC,C + CAIE C,177 + CAIGE C,40 + JRST ASZIN2 + .IOT TYOC,C + CAIN C,"~ + JRST ASZIN4 + IDPB C,B + AOJA A,ASZIN1 + +ASZIN2: CAIE C,^M + JRST ASZIN3 + .IOT TYOC,C + POPAE P,[B,E,D,C] + POPJ P, + +ASZIN4: .IOT TYIC,C + .IOT TYOC,C + IORI C,200 + IDPB C,B + AOJA A,ASZIN1 + +ASZIN3: FWRITE TYOC,[CRLF,,[An ascii string terminated by please: ]] + JRST ASZIN0 + +;SEND LSN +ALSN: PUSHJ P,CLBF + MOVEI A,%COLSN + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ Contact name: ]] + MOVE B,[440800,,%CPKDT+BF] + PUSHJ P,ASZIN + DPB A,[$CPKNB BF] + PUSHJ P,SEND ;JUST SEND, WILL GET INTERRUPT IF RFC MATCHES + POPJ P, + +;SEND RFC +ARFC: PUSHJ P,CLBF + MOVEI A,%CORFC + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ to ]] + PUSHJ P,HSTIN + DPB A,[$CPKDA BF] + FWRITE TYOC,[[ Contact name: ]] + MOVE B,[440800,,%CPKDT+BF] + PUSHJ P,ASZIN + DPB A,[$CPKNB BF] +ARFC0: PUSHJ P,SEND + FWRITE TYOC,[[ Sending...],CRLF,,] +ARFC1: MOVEI A,30.*30. ;30-SECOND TIME-OUT + .CALL [ SETZ + 'NETBLK + MOVEI CHIC + MOVEI %CSRFS + MOVE A + MOVEM B ;NEW STATE + SETZM A ] ;TIME LEFT + .LOSE 1000 + FWRITE TYOC,[[State now = ],TZ,@STATAB(B),CRLF,,] + JUMPN B,CPOPJ ;COULD JRST TO ASOAK (JUMP IF NOT CLOSED) + .CALL [ SETZ ? 'PKTIOT ? MOVEI CHIC ? SETZI BF ] + .LOSE %LSSYS ;CLOSED, CHECK FOR INPUT + LDB A,[$CPKOP BF] ;OF FWD, ANS, OR CLS + CAIN A,%COFWD + JRST ARFWD + CAIN A,%COANS + JRST ARANS + CAIN A,%COCLS + JRST ARCLS + POPJ P, ;SOMETHING RANDOM? + +;GOT CLS IN RESPONSE TO RFC +ARCLS: FWRITE TYOC,[[RFC was refused, received packet:],CRLF,,] + JRST PBF + +;GOT ANS IN RESPONSE TO RFC +ARANS: FWRITE TYOC,[[Got ANS:],CRLF,,] + JRST PBF + +;GOT FWD IN RESPONSE TO RFC +ARFWD: FWRITE TYOC,[[RFC being forwarded, received packet:],CRLF,,] + PUSHJ P,PBF + MOVEI A,%CORFC ;ISSUE NEW RFC + DPB A,[$CPKOP BF] + LDB A,[$CPKAN BF] + DPB A,[$CPKDA BF] + JRST ARFC0 + +;SEND AN OPEN +AOPN: PUSHJ P,CLBF + MOVEI A,%COOPN + DPB A,[$CPKOP BF] + JRST SEND + +;SEND A CLOSE +ACLS: PUSHJ P,CLBF + MOVEI A,%COCLS + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ Reason: ]] + MOVE B,[440800,,%CPKDT+BF] + PUSHJ P,ASZIN + DPB A,[$CPKNB BF] + JRST SEND + +;SEND AN EOF +AEOF: PUSHJ P,CLBF + MOVEI A,%COEOF + DPB A,[$CPKOP BF] + PUSHJ P,SEND + .CALL [ SETZ + SIXBIT /FINISH/ + SETZI CHOC] + .LOSE %LSSYS + POPJ P, + +;CONNECT TO HOSTS'S STATUS SERVER AND PRINT OUT RESPONSE IN READABLE FORMAT +HOSTAT: PUSHJ P,CLBF + MOVEI A,%CORFC + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ for ]] + PUSHJ P,HSTIN + DPB A,[$CPKDA BF] + MOVE B,[440800,,%CPKDT+BF] + MOVE A,[440700,,[ASCIZ/STATUS/]] + ILDB C,A + IDPB C,B + JUMPN C,.-2 + MOVEI A,.LENGTH/STATUS/ + DPB A,[$CPKNB BF] + PUSHJ P,SEND + MOVEI A,30.*30. ;30-SECOND TIME-OUT + .CALL [ SETZ + 'NETBLK + MOVEI CHIC + MOVEI %CSRFS + MOVE A + MOVEM B ;NEW STATE + SETZM A ] ;TIME LEFT + .LOSE 1000 + FWRITE TYOC,[[State now = ],TZ,@STATAB(B),CRLF,,] + JUMPN B,CPOPJ ;COULD JRST TO ASOAK (JUMP IF NOT CLOSED) + .CALL [ SETZ ? 'PKTIOT ? MOVEI CHIC ? SETZI BF ] + .LOSE %LSSYS ;CLOSED, CHECK FOR INPUT (WE EXPECT ANS) + LDB A,[$CPKOP BF] ;OF FWD, ANS, OR CLS + CAIN A,%COFWD + JRST ARFWD + CAIN A,%COCLS + JRST ARCLS + CAIE A,%COANS + POPJ P, ;SOMETHING RANDOM? + ;BF now has the ANS in it. + FWRITE TYOC,[CRLF,,[Host name=]] + LDB E,[$CPKNB+BF] + CAILE E,32. + MOVEI E,32. + MOVE D,[440800,,%CPKDT+BF] +HSTAT1: SOJL E,HSTAT2 + ILDB B,D + CAIE B,200 ;Accept either 0 or 200 as pad for now + CAIN B,0 + JRST HSTAT2 + .IOT TYOC,B + JRST HSTAT1 + +GWD: ILDB T,D ;Get a 16-bit word in T + ILDB TT,D ;With bytes in pdp11 order + LSH TT,8 + IOR T,TT + SOJA E,CPOPJ ;Count words read + +GWD32: PUSHJ P,GWD ;Get low half of 32-bit word + PUSH P,T + PUSHJ P,GWD ;Get high half + POP P,TT + LSH T,16. + IOR T,TT + POPJ P, + +HSTAT2: MOVE D,[440800,,%CPKDT+BF+10] ;Start of subnet info + LDB E,[$CPKNB+BF] + SUBI E,40 ;Number of bytes of such + IDIVI E,2 ;Words +HSTAT3: JUMPLE E,CPOPJ ;If done + CRLF TYOC, + PUSHJ P,GWD ;Get info block type + MOVE A,T + PUSHJ P,GWD ;Get words to follow + MOVE C,T + CAIGE A,400 + JRST HSTAT5 ;Got subnet info + CAIGE A,1000 + JRST HSTTN5 ;New format subnet info + FWRITE TYOC,[[Unknown info block type: ],N8,A,[, length=],N8,C] +HSTAT4: JUMPLE C,HSTAT3 ;Eat remainder of info block + JUMPLE E,CPOPJ ;Foo, word count in block was garbage + PUSHJ P,GWD + SOJA C,HSTAT4 + +HSTAT5: FWRITE TYOC,[[Subnet ],N8,A] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, # in ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, # out ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, xmt abort ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[,],CRLF,,[ lost ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, crc ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, ramerr ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, bit count err ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD + FWRITE TYOC,[[, other err ],N9,T] + JRST HSTAT4 + +HSTTN5: SUBI A,400 + LSH C,-1 + FWRITE TYOC,[[Subnet ],N8,A] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, # in ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, # out ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, xmt abort ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[,],CRLF,,[ lost ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, crc ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, ramerr ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, bit count err ],N9,T] + SOJL C,HSTAT3 + PUSHJ P,GWD32 + FWRITE TYOC,[[, other err ],N9,T] + JRST HSTAT4 + +;PRINT ROUTING TABLE +PRT: PUSHJ P,CLBF + MOVEI A,%CORFC + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ for ]] + PUSHJ P,HSTIN + DPB A,[$CPKDA BF] + MOVE B,[440800,,%CPKDT+BF] + MOVE A,[440700,,[ASCIZ/DUMP-ROUTING-TABLE/]] + ILDB C,A + IDPB C,B + JUMPN C,.-2 + MOVEI A,.LENGTH/DUMP-ROUTING-TABLE/ + DPB A,[$CPKNB BF] + PUSHJ P,SEND + MOVEI A,30.*30. ;30-SECOND TIME-OUT + .CALL [ SETZ + 'NETBLK + MOVEI CHIC + MOVEI %CSRFS + MOVE A + MOVEM B ;NEW STATE + SETZM A ] ;TIME LEFT + .LOSE 1000 + CAIN B,%CSCLS + JRST PRT1 + FWRITE TYOC,[[State now = ],TZ,@STATAB(B),CRLF,,] + POPJ P, + +PRT1: .CALL [ SETZ ? 'PKTIOT ? MOVEI CHIC ? SETZI BF ] + .LOSE %LSSYS ;CLOSED, CHECK FOR INPUT (WE EXPECT ANS) + LDB A,[$CPKOP BF] ;OF FWD, ANS, OR CLS + CAIN A,%COFWD + JRST ARFWD + CAIN A,%COCLS + JRST ARCLS + CAIE A,%COANS + POPJ P, ;SOMETHING RANDOM? + ;BF now has the ANS in it. + LDB B,[$CPKNB BF] + IDIVI B,4 ;Number of subnets + HRLOI E,-1(B) + EQVI E,BF+4 ;Aobjn pointer to routing info +PRT2: LDB B,[341000,,(E)] ;Get method + LDB C,[241000,,(E)] + DPB C,[101000,,B] + LDB C,[141000,,(E)] ;Get cost + LDB D,[041000,,(E)] + DPB D,[101000,,C] + JUMPE B,PRT4 ;Method 0: no route + MOVEI A,-BF-4(E) ;Subnet + FWRITE TYOC,[[Subnet ],OCT,A,[ via ]] + CAIL B,1_8 + JRST [ TLO B,(NETWRK"NW%CHS) + OUT(TYOC,HST(B)) + JRST PRT3 ] + FWRITE TYOC,[[interface ],OCT,B] +PRT3: FWRITE TYOC,[[, cost=],OCT,C,CRLF,,] +PRT4: AOBJN E,PRT2 + POPJ P, + +;SEND A DATA PACKET +ADAT: PUSHJ P,CLBF + MOVEI A,%CODAT + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ Contents: ]] + MOVE B,[440800,,%CPKDT+BF] + PUSHJ P,ASZIN + DPB A,[$CPKNB BF] + JRST SEND + +;SEND ANY PACKET +AXMT: PUSHJ P,CLBF + FWRITE TYOC,[[ Opcode in octal: ]] + PUSHJ P,OCTIN + DPB A,[$CPKOP BF] + FWRITE TYOC,[[ Dest ]] + PUSHJ P,HSTIN + DPB A,[$CPKDA BF] + FWRITE TYOC,[[ Dest index: ]] + PUSHJ P,OCTIN + DPB A,[$CPKDI BF] + FWRITE TYOC,[CRLF,,[ Source ]] + PUSHJ P,HSTIN + DPB A,[$CPKSA BF] + FWRITE TYOC,[[ Source index: ]] + PUSHJ P,OCTIN + DPB A,[$CPKSI BF] + FWRITE TYOC,[[ Packet #: ]] + PUSHJ P,OCTIN + DPB A,[$CPKPN BF] + FWRITE TYOC,[[ Ack #: ]] + PUSHJ P,OCTIN + DPB A,[$CPKAN BF] + FWRITE TYOC,[CRLF,,[ Data: ]] + MOVE B,[440800,,%CPKDT+BF] + PUSHJ P,ASZIN + DPB A,[$CPKNB BF] + JRST SEND + +SEND: MOVEI A,BF + SKIPN PRTALL + JRST SEND1 + FWRITE TYOC,[[ Now sending: ]] + PUSHJ P,PPKT +SEND1: .CALL [ SETZ ? 'PKTIOT ? MOVEI CHOC ? SETZI BF ] + .LOSE %LSSYS + POPJ P, + +;PRINT PACKET A -> +PPKT: PUSHAE P,[B,C,D,E] + LDB B,[$CPKOP(A)] + CAIGE B,%CODAT + TDZA C,C + MOVE C,[SIXBIT/DATA/] + CAIGE B,%COMAX + MOVE C,COTAB(B) + LDB D,[$CPKFC(A)] + LDB E,[$CPKNB(A)] + FWRITE TYOC,[[OP ],N8,B,[ ],6F,C,[, FC ],N10,D,[, NB ],N10,E,CRLF,,] + LDB B,[$CPKDA(A)] + LDB C,[$CPKDI(A)] + LDB D,[$CPKSA(A)] + LDB E,[$CPKSI(A)] + FWRITE TYOC,[[From ],N8,D,[-],N8,E,[ to ],N8,B,[-],N8,C,CRLF,,] + LDB B,[$CPKPN(A)] + LDB C,[$CPKAN(A)] + FWRITE TYOC,[[Pkt # ],N8,B,[, ack # ],N8,C,CRLF,,[Data: "]] +PPKT0: LDB E,[$CPKNB(A)] + MOVE D,[440800,,%CPKDT(A)] +PPKT1: SOJL E,PPKT2 + ILDB B,D + TRZE B,200 + .IOT TYOC,["~] + .IOT TYOC,B + JRST PPKT1 + +PPKT2: FWRITE TYOC,[["],CRLF,,] + POPAE P,[E,D,C,B] + POPJ P, + +COTAB: OFFSET -. + 0 + IRPS OP,,[RFC OPN CLS FWD ANS SNS STS RUT LOS LSN MNT EOF UNC BRD] +%CO!OP::SIXBIT/OP/ + TERMIN +%COMAX::OFFSET 0 + +;INTERRUPT ROUTINE + +INTACS: BLOCK 20 +SV40: 0 +SUUOH: 0 + +TSINT: 0 ? 0 + MOVEM 17,INTACS+17 + MOVEI 17,INTACS + BLT 17,INTACS+16 + MOVE A,40 + MOVEM A,SV40 + MOVE A,@41 + MOVEM A,SUUOH + MOVE P,INTACS+P + SKIPGE A,TSINT + JRST TSINT1 + .SUSET [.RBCHN,,A] + FWRITE TYOC,[CRLF,,[*** IOC ERROR *** Channel=],N8,A] + JRST TSINT2 + +TSINT1: MOVEI B,[ASCIZ/INPUT/] + TRNN A,1_CHIC + MOVEI B,[ASCIZ/OUTPUT/] + FWRITE TYOC,[CRLF,,[*** ],TZ,(B),[ CHANNEL INTERRUPT ***]] + MOVEI A,CHIC +TSINT2: .CALL [ SETZ + 'WHYINT + MOVEI (A) + MOVEM A ;%WYCHA + MOVEM B ;STATE + MOVEM C ;INPUT,,OUTPUT COUNT + SETZM D ;INPUT,,OUTPUT WINDOW + ] + .LOSE 1000 + FWRITE TYOC,[[, PC=],RHV,TSINT+1,CRLF,,] + FWRITE TYOC,[[State is now ],TZ,@STATAB(B),CRLF,,] + HLRZ B,C + HRRZS C + HLRZ E,D + HRRZS D + FWRITE TYOC,[[Input count=],N10,B,[, Output count=],N10,C,CRLF,,] + FWRITE TYOC,[[Input window=],N10,E,[, Output window=],N10,D,CRLF,,] + FWRITE TYOC,[[Dismissing...],CRLF,,] + SKIPL TSINT + AOS TSINT+1 ;Don't retry IOT + MOVE A,SUUOH + MOVEM A,@41 + MOVE A,SV40 + MOVEM A,40 + MOVSI 17,INTACS + BLT 17,17 + .DISMISS TSINT+1 + +.INSRT SYSTEM;CHSDEF +$$HOSTNM==1 +$$SYMLOOK==1 +$$SYMGET==1 +$$HSTMAP==1 +$$CHAOS==1 +$$HST3==1 +.INSRT SYSENG;NETWRK + +CONSTANTS +VARIABLES + +END GO