mirror of
https://github.com/PDP-10/its.git
synced 2026-04-26 04:07:36 +00:00
committed by
Lars Brinkhoff
parent
b178808807
commit
eb6da57516
@@ -113,6 +113,7 @@ A list of [known ITS machines](doc/machines.md).
|
|||||||
- BYE, say goodbye to user. Used in LOGOUT scripts.
|
- BYE, say goodbye to user. Used in LOGOUT scripts.
|
||||||
- CALPRT, decode a .CALL instructions CALL block.
|
- CALPRT, decode a .CALL instructions CALL block.
|
||||||
- CHARFC/CHARFS, Chaos RFC.
|
- CHARFC/CHARFS, Chaos RFC.
|
||||||
|
- CHATST, Chaos test.
|
||||||
- CHTN, CFTP, Chaosnet TELNET and FTP support.
|
- CHTN, CFTP, Chaosnet TELNET and FTP support.
|
||||||
- COMPLR, lisp compiler.
|
- COMPLR, lisp compiler.
|
||||||
- COMSAT, Mail server.
|
- COMSAT, Mail server.
|
||||||
|
|||||||
@@ -1018,6 +1018,10 @@ expect ":KILL"
|
|||||||
respond "*" ":midas sys2;ts tags_sysen2;tags\r"
|
respond "*" ":midas sys2;ts tags_sysen2;tags\r"
|
||||||
expect ":KILL"
|
expect ":KILL"
|
||||||
|
|
||||||
|
# CHATST
|
||||||
|
respond "*" ":midas sys2;ts chatst_sysen3;chatst\r"
|
||||||
|
expect ":KILL"
|
||||||
|
|
||||||
# STYLOG
|
# STYLOG
|
||||||
respond "*" ":midas sys2;ts stylog_sysen1;stylog\r"
|
respond "*" ":midas sys2;ts stylog_sysen1;stylog\r"
|
||||||
expect ":KILL"
|
expect ":KILL"
|
||||||
|
|||||||
674
src/sysen3/chatst.56
Executable file
674
src/sysen3/chatst.56
Executable file
@@ -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 <RETURN> 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
|
||||||
Reference in New Issue
Block a user