mirror of
https://github.com/PDP-10/its.git
synced 2026-01-28 21:01:16 +00:00
675 lines
12 KiB
Plaintext
Executable File
675 lines
12 KiB
Plaintext
Executable File
;;;-*-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
|