mirror of
https://github.com/PDP-10/its.git
synced 2026-01-28 12:59:20 +00:00
committed by
Lars Brinkhoff
parent
b178808807
commit
eb6da57516
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