Trailing-Edge
-
PDP-10 Archives
-
BB-BT99V-BB_1990
-
10,7/anf10/dncnfg.p11
There are 5 other files named dncnfg.p11 in the archive. Click here to see a list.
.SBTTL DNCNFG - CONFIGURATION 02 AUG 89
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED
; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION
; 1974,1975,1977,1978,1979,1980,1981,1982,1983,1984,1987,1988,1990.
;ALL RIGHTS RESERVED.
VRCNFG=077 ;FILE EDIT NUMBER
EDIT=244 ;DAS85 EDIT NUMBER (INCREMENT ONCE PER LOAD.
; IF THIS AND THE DATE ARE THE ONLY CHANGES,
; DON'T INCREMENT VRCNFG.)
;DAS85 VERSION NUMBER
VDAS85=25
VMIN=0 ;MINOR VERSION
VWHO=0 ;WHO EDITED
;DAS85 SOFTWARE DATE (MUST REMAIN IN MIXED CASE!)
DATE 02 Aug 89
; MARCH 12,1985 - DMCC/LAD/EJW/DRL/KR/DRL/DSW
;
;
ZZ=-1
;THERE ARE SEVERAL STANDARD CONFIGURATION FEATURE TEST SWITCHES:
; FT.D20, FT.D75, FT.D80, FT.D81, FT.D82, FT.D85, FT.D87, FT.87S, FT.200
; Arguments are:
;
; Option name, type of 11, DL10?, DTE?, type of synch, default no. sync,
; CTY?, DH11?, DZ11?, no. CDR, no. LP11, no. LP20,
; no. PTR, no. PTP, no. LT, not(KG11?), title
confg D75,15,1,0,DS,4,0,0,0,0,0,0,0,0,0,0,<DC75NP - DECsystem-10 Synchronous front end>
confg D80,40,0,0,DQ,4,1,0,0,1,1,0,0,0,0,0,<DN80 - DECsystem-10 Remote station>
confg D81,40,0,0,DQ,4,1,1,0,0,0,0,0,0,0,0,<DN81 - DECsystem-10 Remote station>
confg D82,40,0,0,DQ,4,1,1,0,1,1,0,0,0,0,0,<DN82 - DECsystem-10 Remote station>
confg D85,40,1,0,DQ,4,0,0,0,0,0,0,0,0,0,0,<DN85 - DECsystem-10 Synchronous front end>
confg D87,40,1,0,DQ,4,0,1,0,0,0,0,0,0,0,0,<DN87 - DECsystem-10 Synchronous front end>
confg 87S,40,0,1,DQ,4,0,1,0,0,0,0,0,0,0,0,<DN87S - DECsystem-10 Communications front end>
confg D20,34,0,1,DUP,4,0,0,1,0,0,0,0,0,0,1,<DN20 - DECsystem-10 Communications Front End>
confg D22,4,0,0,DMC,1,0,0,1,0,0,0,0,0,0,1,<DN22 - DECsystem-10 Remote Station>
confg 200,34,0,0,DMC,4,0,0,1,1,1,0,0,0,0,1,<DN200 - DECsystem-10 Remote Station>
.IIF NE ZZ,.ERROR ;FT.D## NOT DEFINED OR DOUBLY DEFINED
SETUP ;SETUP PROCESSOR-DEPENDENT STUFF, ETC.
.IF NDF OURNNM
OURNNM=77 ;OUR NODE NUMBER
.PRINT OURNNM ;OURNNM NOT DEFINED, DEFAULTS TO
.ENDC
ND SERIAL,OURNNM ; OUR SERIAL NUMBER
.IF NE FT.D75
ND FT.ANF,0 ; BINARY TRANSFER NOT SUPPORTED
ND FT.BIG,0
ND SIDSIZ,6 ;SIZE OF SOFTWARE ID
ND DATESZ,0 ;SIZE OF DATE
.IFF
ND FT.ANF,1 ;BINARY TRANSFER SUPPORTED
ND FT.BIG,1 ;EXTRA CODE OK
ND SIDSIZ,24
ND DATESZ,24
.ENDC;.IF NE FT.D75
;SYNC LINE CONFIGURATION
NLIN=0
SYNDEV <DQ,DUP,DMC,DS,DU,DP,DV>
SPCVFY=0 ;DON'T EVER CHECK DQ11 SPECIAL CHAR STUFF
;ASYNC LINE CONFIGURATION
ND AL$SPD,<^D1200> ;DEFAULT SPEED FOR ASYNC DDCMP
SPD AL$SPD,AL$SPD
AL.SPD=QQ
ND MP$SPD,<^D1200> ;DEFAULT MULTIPOINT SPEED
SPD MP$SPD,MP$SPD
MP.SPD=QQ
ND RA$SPD,<^D300> ;DEFAULT ASCII SPEED
SPD RA$SPD,RA$SPD
RA.SPD=QQ
ND RP$SPD,<^D1200> ;DEFAULT P-P RDE ("RDP") SPEED
SPD RP$SPD,RP$SPD
RP.SPD=QQ
M$MAX=0 ;MAX LINES ON ANY MULTIDROP (INC'ED AS NEEDED)
;DEFINE DH11 LINE USAGE
.IF NE FTDH11
DHCNFG ;SET DH11 LINE PARAMETERS
.IFF
TTYDHN=0 ;NO DH11 TTYS
NADHLN=0 ;NO DH11 ASYNC PTP DDCMP
NDHMPT=0 ;NO DH11 MULTIPOINT DDCMP
NDHTRB=0 ;NO DH11 MULTIPOINT TRIBUTARIES
RDPDHN=0 ;NO DH11 DDCMP RDX
RDADHN=0 ;NO DH11 ASCII RDX
DHLINE=0 ;NO DH11 LINES AT ALL
NDH11=0 ;NO DH11S AT ALL
DH.MAX=0 ;NO DH11S AT ALL
.ENDC; .IF NE FTDH11
;DEFINE DZ11 LINE USAGE
.IF NE FTDZ11
DZCNFG ;SET DZ11 LINE PARAMETERS
.IFF
TTYDZN=0 ;NO DZ11 TTYS
NADZLN=0 ;NO DZ11 ASYNC PTP DDCMP
NDZMPT=0 ;NO DZ11 MULTIPOINT DDCMP
NDZTRB=0 ;NO DZ11 MULTIPOINT TRIBUTARIES
RDPDZN=0 ;NO DZ11 DDCMP RDX
RDADZN=0 ;NO DZ11 ASCII RDX
DZLINE=0 ;NO DZ11 LINES AT ALL
NDZ11=0 ;NO DZ11S AT ALL
DZ.MAX=0 ;NO DZ11S AT ALL
.ENDC; .IF NE FTDZ11
ND TTYN,<TTYDHN+TTYDZN> ;TOTAL ASCII COMMAND TERMINALS
ND NALINE,<NADHLN+NADZLN> ;TOTAL ASYNC P-P DDCMP LINES
ND NMPTL,<NDHMPT+NDZMPT> ;TOTAL MULTIPOINT DDCMP LINES
ND NTRIB,<NDHTRB+NDZTRB> ;TOTAL MULTIPOINT TRIBUTARIES
ND RDPN,<RDPDHN+RDPDZN> ;TOTAL P-P DDCMP RDX LINES
ND RDAN,<RDADHN+RDADZN> ;TOTAL ASCII RDX LINES
.IIF NE NMPTL!NTRIB,FT.MPT=1
.IIF NE NTRIB,FTTRIB=1
NTLINE=NLINES+NALINE+NTRIB+RDPN ;TOTAL LINE BLOCKS
;DDCMP-RELATED
ND FT3.02,1 ;VERSION OF DDCMP SUPPORTED (3.02 IS DEFAULT)
ND FT.QSB,FT3.02 ;IMPLEMENT THE QSYNC BIT
ND FTNSYN,14 ;SET TO THE NUMBER OF SYNCH CHARS
;IN A NORMAL SYNC SEQ (MIN=2)
ND FTQSYN,6 ;SET TO THE NUMBER OF SYNCH CHARS IN A
;SHORT SYNC SEQ (NORMALLY =2 (MIN=2))
ND FTASYN,2 ;LENGTH OF SYNC SEQ FOR ASYNC LINES
;THIS IS USED TO TIME RESPONSE OF MODEM
;TO REQUEST TO SEND LEAD STATE
;THE PROPER VALUE IS EQUAL TO
; 1+(REQUIRED_DELAY*BAUD_RATE/10.)
ND FTSLCT,0 ;SET =0 FOR ROUND ROBIN SELECTION (MULTIPOINT DDCMP)
;SET =1 FOR WEIGHTED ROUND ROBIN SELECTION
;SET =2 FOR DYNAMICALLY WEIGHTED ROUND ROBIN SELECTION
;SET =3 FOR POLLING LIST SELECTION
ND FT.MPT,0 ;SET TO NON ZERO IF DDCMP MULTIPOINT IS INCLUDED
ND FTTRIB,0 ;SET TO NON ZERO IF DDCMP MULTIPOINT TRIBUTARY IS INCLUDED
ND FTRDED,0 ;DON'T SAY WHEN MPT LINES GO OFFLINE
ND FTWHYD,0 ;DON'T RECORD REASONS FOR DDCMP GOING OFFLINE
ND FT.RDM,0 ;SET NONZERO FOR MULTIPOINT RDE ("RDM") DEVICE
ND FT.RDP,RDPN ;SET NONZERO FOR P-P RDE ("RDP") DEVICE
ND FT.RDA,RDAN ;SET NONZERO FOR ASCII RDE ("RDA") DEVICE
ND FT.DDP,0 ;SET NONZERO FOR DDP "DDCMP DEVICE"
ND FT.SLB,0 ;IF NON ZERO, OMIT STATS FROM LINE BLOCKS
ND FTSILO,0 ;DH11 SILO ALARM LEVEL
;MUST BE POWER OF TWO AND .LE. 64.
;FOR VT100 SUPPORT (FAST XON-XOFF,
;FTSILO MUST BE ZERO.
.IIF GE FTSILO-20,FTSILO=20
ND OPN.TM,7 ;DEFAULT TIME TO CLOSE DOWN ON FRAMING ERROR
;(8 BITS)POS=# OF JIFFIES, NEG=# OF SECONDS
;ASSUME ABOUT 100+ MS
ND FT.HLD,0 ;DEFAULT THE INPUT HOLDING CODE OFF
;MISC
ND FTECHO,0 ;ECHO IS THE OLD WAY TO GET TSK DEVICES
ND ECHON,FTECHO ;THE FEATURE TEST DEFINES HOW MANY
.IF NE FTECHO
ND FT.TDV,ECHON ;HERE FOR THE GOOD OLD DAYS
ND TDVN,ECHON ;MAKE WHAT IS EXPECTED
.IFF
ND FT.TDV,0 ;NORMALLY LEAVE OUT TSK DEVICES
ND TDVN,0 ;NONE OF THEM
.ENDC
.IF NE FT.DDP
ND DDPN,NTLINE ;DEFAULT ONE DDP DEVICE PER LBLK
.ENDC ;.IF NE FT.DDP
.IIF NE FT.CTY,FT.CTY=1
DEVN=LPTN+CDRN+PTRN+PTPN+PLTN+TTYN+FT.CTY+ECHON ;NUMBER OF CONNECTS = NUMBER OF DEVICES
.IIF NE FT.RDA,DEVN=DEVN+RDAN ;ADD IN RDA DEVICES
.IIF NE FT.RDP,DEVN=DEVN+RDPN ;ADD IN RDP DEVICES
.IIF NE FT.RDM,DEVN=DEVN+NMPTL ;ADD IN RDM DEVICES
.IIF NE FT.DDP,DEVN=DEVN+DDPN ;ADD IN DDP DEVICES
;VARIOUS TTY PARAMETERS MAY BE SET BY DEFINING SYMBOLS AS FOLLOWS:
; FIRST THREE CHARACTERS ARE T## OR T# WHERE # IS THE OCTAL TTY LINE
; LAST 2 OR 3 CHARS ARE:
; WID FOR WIDTH
; DSL FOR DATASET LINE
; XS FOR TRANSMIT SPEED
; RS FOR RECEIVE SPEED
; IF NEITHER XS OR RS IS DEFINED, THEY WILL DEFAULT TO
; TTYRS AND TTYXS RESPECTIVELY, IF THESE ARE DEFINED.
; IF BOTH XS AND RS ARE STILL UNDEFINED,
; LINE IS AUTOBAUD
; IF ONE OF RS OR XS IS DEFINED, BUT THE OTHER ISN'T
; THEY WILL BOTH BE DEFINED TO HAVE THE SAME VALUE.
; ABD TO SET AUTOBAUD FOR THE LINE INDEPENDENT OF XS/RS
; 801 TO TELL WHICH DN11 IS ATTACHED TO THIS TTY LINE
; REQUIRES DN11N TO BE NON-ZERO (AND LINE TO
; BE SET AS A DATASET LINE)
; RNN TO RESTRICT CONNECTS TO A PARTICULAR NODE
; REQUIRES FT.RNN NONZERO
; INI TO CAUSE "INITIA" TO BE RUN BY THE -10 SYSTEM WHEN
; THE TERMINAL IS CONNECTED. (IGNORED)
; PFH TO CAUSE THE TERMINAL TO ATTEMPT TO CONNECT TO
; A "PREFERRED HOST" IF THAT HOST IS UP.
; 8BT TO CAUSE THE TERMINAL TO BE SET TO 8-BIT MODE.
;
; e.g.
; T12DSL=1 ;LINE 12 IS A DATASET LINE
; T2WID=^D72 ;WIDTH FOR LINE 2 IS 72 COLUMNS (MAY BE RESET WITH TTY WIDTH COMMAND)
.IF NDF TTYXS
.IIF DF TTYRS,TTYXS=TTYRS
.ENDC;.IF NDF TTYXS
.IF NDF TTYRS
.IIF DF TTYXS,TTYRS=TTYXS
.ENDC;.IF NDF TTYRS
ND TTY8BT,0 ;DEFAULT IS 7-BIT
;DEFAULTS
ND FTKG11,0 ; = 0 FOR KG11 CODE
ND FTCLEAR,0 ; =1 TO CLEAR CORE OR RESTART
.IIF EQ FT.CTY,FT.HLP=0 ;IF NO CTY, NO SENSE WRITING ON IT
ND FT.TSK,0 ; NONZERO FOR TASKS
;DEFAULTS FOR MACRO-CALL SUPPORT
ND TKSQSZ,10 ; SIZE OF SEND QUEUE
ND TKPMAX,4 ; MAX PRIORITY LEVEL
ND TKQTIM,12 ; QUANTUM RUN TIME FOR TASK
ND NINBUF,4 ; NUMBER OF INPUT BUFFERS
ND FTRACE,0 ; TRACE STUFF
ND FTDUP.,0 ;TRACE DUP11 HDW IF NONZERO
ND FTDMC.,0 ;TRACE DMC11 HDW IF NONZERO
ND FTDP.T,0 ;TRACE DP11 HDW IF NONZERO
ND FTDQ.T,0 ;TRACE DQ11 HDW IF NONZERO
ND FTDS.T,0 ;TRACE DS11 HDW IF NONZERO
ND FTDT.T,0 ;TRACE DATA
ND FTDD.T,0 ;TRACE DDCMP PROTOCOL
ND FTDV.T,0 ;TRACE DEVICE CONTROL
ND FTNC.T,0 ;TRACE NCL
ND FTCN.T,0 ;TRACE CHUNKS
FT27.T=0 ;TRACE 2741S (NEVER)
.IIF NE FTWDDL,FTWDDL=1
ND CNKSIZ,100 ;NUMBER OF CHARACTERS IN A CHUNK
; MINIMUM LEGAL SIZE IS 40 = 16 WORDS
;ALSO MUST BE A POWER OF 2
;AND NOT UNREASONABLY LARGE
.IIF LT CNKSIZ-40, CNKSIZ=40
.IIF NE CNKSIZ&160000,CNKSIZ=10000
Z=2
.REPT 4
CNKSIZ=CNKSIZ!<CNKSIZ/Z>
Z=Z*Z
.ENDR
CNKSIZ=CNKSIZ&<^C<CNKSIZ/2>>
ERSCNT=20 ;CRITICAL LEVEL FOR CHUNKS
ND JIFSEC,<^D60> ;NUMBER OF CLOCK TICKS IN A SECOND
ND NGHMAX,<NLINES+1> ;MAXIMUM NUMBER OF NEIGHBOR NODES
ND DSCSPD,12 ;NUMBER OF CLOCK TICKS BETWEEN
; MODEM CHECKS
ND MDMHDT,12. ;MODEM HOLD DOWN TIME (RTS WILL BE
; FORCED OFF THIS MANY SECONDS
; WHEN THE PHONE IS HUNG UP.)
ND SDELAY,0 ;TICKS TO WAIT WHEN TURNING AROUND LINE
ND REPDWN,<^D10> ;NUMBER OF UNANSWERED REPS TILL DEAD
ND NRPSEC,3 ;NUMBER OF SECONDS BETWEEN REPS
ND REPSPD,6 ;THE GRANULARITY OF REP CHECKING
;THE LINE BLOCKS ARE ONLY CHECKED FOR
;REP TIME OUTS EVERY "REPSPD" TICK'S
SDLAY=<SDELAY+REPSPD-1>/REPSPD ;NORMALIZE SDELAY
REPSEC=NRPSEC*JIFSEC/REPSPD ;NORMALIZE REPSEC
ND FTDM11,DHLINE ;IF NONZERO INCLUDE DM11BB CODE
ND DN11N,0 ;ASSUME NO DN11'S
ND FTDN11,DN11N ;ASSUME SUPPORT DN11'S IF ANY EXIST
FT2741=0 ;CODE FOR 2741'S IF NONZERO
.REPT 0 ;NO LONGER SUPPORT 2741 AT ALL
ND DEFBCD,<^D988> ;DEFAULT 2741 CODE IS BCD APL
ND FTE029,1 ;IF NONZERO SUPPORT ELEMENT 029
ND FTE087,1 ;IF NONZERO SUPPORT ELEMENT 087
ND FTE938,1 ;IF NONZERO SUPPORT ELEMENT 938
ND FTE963,1 ;IF NONZERO SUPPORT ELEMENT 963
ND FTE987,1 ;IF NONZERO SUPPORT ELEMENT 987
ND FTE988,1 ;IF NONZERO SUPPORT ELEMENT 988
.ENDR ;END OF 2741 VALUES
ND FT2BIT,0 ;IF NON ZERO, USE TWO STOP BITS ON ALL DH11 LINES
;TTY DEVICE DEFAULT PARAMETERS
ND TTYMML,80 ;MAXIMUM TTY MESSAGE SIZE
ND TTYDRQ,2 ;DATA REQUESTS FOR TTY DEVICES
ND TTYWID,<^D72>
ND CTYWID,TTYWID
ND TTYDSL,0 ;NON-DATASET
ND TTYABD,1 ;AUTOBAUD ENABLED
ND TTYINI,0 ;DEFAULT IS TO NOT RUN INITIA.
ND TTYMIC,<^D60> ;MAXIMUM NUMBER OF TTY INPUT CHARS
.IIF LE TTYMIC-^D10,TTYMIC=^D12 ;SET MINIMUM
;CDR DEVICE DEFAULT PARAMETERS
ND CDRMML,333 ;MAXIMUM CARD MESSAGE SIZE
ND CDRWID,<^D80> ;DEFAULT CARD SIZE
;LPT DEVICE DEFAULT PARAMETERS
ND LPTMML,333 ;MAXIMUM LPT MESSAGE SIZE
ND LPTVFL,<^D66> ;MAX LENGTH FOR A VFU
ND LPTWID,<^D132> ;DEFAULT LPT WIDTH
ND LPT.LC,0 ;=1 IF LINE PRINTER HAS LOWER CASE
ND LPTDAV,0 ;DEFAULT NO DAVFU
ND LPTFCS,0 ;DEFAULT NO FULL-CHAR-SET
ND LPT8BT,0 ;=1 IF LINE PRINTER IS EIGHT-BIT DATA
ND RPLPOL,LPTN ;REPORT LPT OFFLINE AT CTY BY DEFAULT
;PLT DEVICE DEFAULT PARAMETERS
ND PLTMML,333 ;MAXIMUM PLT MESSAGE SIZE
;PTP DEVICE DEFAULT PARAMETERS
ND PTPMML,333 ;MAXIMUM PTP MESSAGE SIZE
;PTR DEVICE DEFAULT PARAMETERS
ND PTRMML,<^D120> ;MAXIMUM PTR MESSAGE SIZE
;RDX DEVICE DEFAULT PARAMETERS
ND RDAMML,TTYMML ; MAX RDA MESSAGE SIZE
ND RDADRQ,4 ;RDA DATA REQUESTS
;DDP DEVICE DEFAULT PARAMETERS
ND DDPMML,MSGMAX-20 ;MAXIMUM DDP MESSAGE SIZE
ND DDPCHK,DDPMML/CNKSIZ ;CHUNK-PER-DATAREQUEST WEIGHT
ND DDPDRQ,4 ;DATA REQUESTS OUTSTANDING
ND DDPRNN,0 ;NO RESTRICTED HOST
ND DDPPFH,0 ;NO PREFERRED HOST (PREFER TENSCB)
ND LNKMAX,20 ;MAXIMUM NUMBER OF LINKS IN NETWORK
.IF NDF SEQNGH
.IF NE FT.RDM!FT.RDP
Z=NLINES+NALINE+NTRIB+RDPN ;MAX NUMBER OF NODES
ND SCBMAX,<Z*2-Z*FT.D75>
SEQNGH=Z ; MAX NUMBER OF SEQUENTIAL NEIGHBORS
ND FTRDCM,0 ; =0 IF TEN CANT HANDLE RDE CONTROL MSGS
;FTRDCM=1 IF TEN KNOWS POLLING LIST CONTROL MSG ONLY
;FTRDCM=3 IF TEN KNOWS ALL CONTROL MSGS
.IFF
ND SCBMAX,<NTLINE*2-NTLINE*FT.D75>
SEQNGH=NTLINE ;MAXIMUM NUMBER OF SEQUENTIAL NEIGHBOURS
.ENDC
.ENDC
.IIF EQ SCBMAX,SCBMAX=2 ;DON'T EVER LET THIS GO TO ZERO
;WE DON'T WANT TROUBLE IF SOMEONE FINDS A PATH HERE
SEQLIM=SEQNGH+1 ;WE ARE SEQUENTIAL ALSO
ND SNMSIZ,6 ;NUMBER OF CHARACTERS IN STATION NAME
ND MSGMAX,<^D512> ;MAXIMUM DDCMP MSG SIZE
; NOT INCLUDING BCC AND HEADER
ND RDABRK,<15> ; BREAK IS A CR
.IF NE FT.RDM!FT.RDP
ND RDEDLL,0 ;SET NON ZERO IF RDE DEVICES
;KNOW MAINTAINANCE MODE.
ND RDEMML,MSGMAX-24 ;MAX MSG FOR RDE DEV IS MAX
;DDCMP MSG - NCL HDR
RDEWID=RDEMML
ND RDEDRQ,<<NTLINE-SEQNGH+1>/<<3*NMPTL>+1>> ;DATA REQUESTS
; MUST BE SIGNIFICANT FRACTION OF THE
; NUMBER OF STATIONS ON A LINE
.IIF EQ RDEDRQ,RDEDRQ=1 ;AND IT MUST BE AT LEAST ONE
ND POLLSZ,20 ;SET THE MAX LENGTH FOR POLLING LIST
;IF USED
.ENDC
ND DDHTIM,<^D13> ;LENGTH OF TIME TILL DDCMP DROPS MESSAGE
ND MPHTIM,<^D100> ;LENGTH OF TIME TILL DDCMP DROPS MESSAGE
;ON MULTIPOINT LINE
ND MP.STV,<^D15> ;LENGTH OF TIME TO SELECT FAILURE IN SEC
ND MP.TTV,MP.STV/2 ;LENGTH OF TIME TO TRIBUTARY RESELECT
ND MP.SFC,4 ;# SUCCESSIVE SELECT FAILURES BEFORE STATION
;IS PUT OFFLINE (MAX=^D15)
ND FTOLDC,0 ;1 MEANS OLD CONFIGURATION MSGS
ND NETLEN,0 ;MAXIMUM NUMBER OF CHARS IN NETLDR COMMAND
ND TNCREP,<^D15> ;LENGTH OF NCL REP TIMER
ND FT.STC,1 ;IF NONZERO INCLUDE STATION CONTROL
; I.E. EXAMINE & DEPOSIT MESSAGES
ND STCRNN,0 ;IF NON-ZERO, ONLY THAT NODE MAY USE STC
; EXAMINE/DEPOSIT/GOTO COMMANDS
ND BSTRNN,0 ;IF NON-ZERO, ONLY THAT NODE MAY USE
; BOOT-STRAP STC COMMANDS
ND FTKLKR,0 ;IF NON-ZERO THEN BREAK DTE-PROTOCOL (TENDWN)
; IF KL HALTS (DTE STILL 'ENABLED')
ND FTHOST,1 ;IF NONZERO INCLUDE SET HOST CODE
; (USED BY TTYS, DDPS)
ND FT.RNN,0 ;IF NONZERO DEVICES MAY BE RESTRICTED
; TO PARTICULAR NODES.
; (SET TnRNN= HOST NUMBER)
ND FT.PFH,0 ;IF NONZERO CONNECT TO "PREFERRED" HOST IF
; AVAILABLE, ELSE ROUND ROBIN
; (SET TnPFH= HOST NUMBER)
.IIF EQ DEVN,FTHOST=0 ;IF NO DEVICES, THEN NO DLATAB, ETC.
.IIF EQ FTHOST,FT.RNN=0 ;IF NO HOST, HE CAN'T RESTRICT HOST SELECTION
.IIF EQ FTHOST,FT.PFH=0 ;IF NO HOST, HE CAN'T PREFER HOST SELECTION
.IF NE FT.D22 ;IF A DN22
ND FT.ROM,0 ;NO "ANF" ROMS ON A DN22
ND FT.MOP,1 ;BUT A "MOP" ROM
.ENDC
ND FT.MOP,0 ;NO ONE BUT A DN22 HAS MOP ROMS
.IF NDF FT.ROM ;IF NONZERO KEEP BOOTCODE RESIDENT
.IIF NE FTDL10!FT.DTE,FT.ROM=0 ;DON'T NEED IF CAN LOAD OVER DL10
.IIF EQ FTDL10!FT.DTE,FT.ROM=1 ;NEED FOR 82'S AND SUCH
.ENDC;.IF NDF FT.ROM
ND FTNTLD,0 ;USER MUST SET FTNTLD IF HE WANTS THE
; LDCNFG MACRO EXPANDED
ND ROMADR,173000 ;ROM STARTING LOC
ND ROMLOW,ROMADR ;LOWEST ADDRESS IN ROM
ND ROMHGH,ROMLOW+2000 ;HIGHEST ADDRESS IN ROM
;TO PRESET LINK LEVELS DEFINE SYMBOLS OF THE FORM:
; L#LVL=<DESIRED VALUE>
; e.g. L0LVL=123
; L12LVL=040
ND ALNLVL,<^D25> ;DEFAULT LEVEL FOR ASYNCHRONOUS LINES
ND SLNLVL,<^D10> ;DEFAULT LEVEL FOR SYNCHRONOUS LINES
.IF NDF TENLVL
.IF NE FTDL10
TENLVL=5
.IFF
TENLVL=7 ;MATCH DL10/DTE20 VALUES IN THE -10
.ENDC
.ENDC
ND CST.DQ,SLNLVL ;DEFAULT COST FOR DQ11
ND CST.DM,<^D8> ;DEFAULT COST FOR DMC11 (PRESUMED DMR11)
ND CST.UP,SLNLVL ;DEFAULT COST FOR DUP11
ND CST.DS,SLNLVL ;DEFAULT COST FOR DS11
ND CST.DU,SLNLVL ;DEFAULT COST FOR DU11
ND CST.DP,SLNLVL ;DEFAULT COST FOR DP11
ND CST.DV,SLNLVL ;DEFAULT COST FOR DV11
ND CST.DH,ALNLVL ;DEFAULT COST FOR DH11 PTP (ASYNCH)
ND CST.DZ,ALNLVL ;DEFAULT COST FOR DZ11 PTP (ASYNCH)
ND FTROLL,0 ;IF NONZERO, THE TROLL WILL EAT
; EVERY FTROLL'TH MESSAGE
ND FT3.02,1 ;VERSION OF DDCMP FOR START AND STACK
ND FT873,1 ;IF NON ZERO, SUPPORT BM873 BOOTSTRAP
;THIS ROM HAS BUG WHICH REQUIRES SELECT AND
;QSYNC BITS TO BE ZERO
.IIF EQ NLINES,FT873=0 ;CAN'T IF NO SYNCHRONOUS LINES
.IIF EQ FT3.02,FT873=0 ;NO NEED FOR THE CODE IF NOT SUPPORTING
;DDCMP 3.02
;FEATURE TESTS FOR DECNET-COMPATIBLE PORT (DCP)
ND FT.DCP,0 ;DEFAULT IS OFF
FTDCP1=0 ;ZERO VERSION SWITCHES
FTDCP2=0 ;ZERO VERSION SWITCHES
FTDCP3=0 ;ZERO VERSION SWITCHES
FTDCP4=0 ;ZERO VERSION SWITCHES
.IF NE,FT.DCP ;IF THE DCP FEATURE TEST IS NON-ZERO
ND FTDCPT,0 ;DEFAULT TO NO MESSAGE TRACE CODE
ZZ=1 ;FLAG TO INDICATE INCORRECT VERSION
.IF EQ,<FT.DCP-1> ;IF FT.DCP IS 1, GENERATE 1.2 NSP SOFTWARE
FTDCP1=1 ;FEATURE TEST FOR NSP 1.2
ZZ=0 ;INDICATE GOOD VERSION
.ENDC; EQ,<FT.DCP-1>
.IF EQ,<FT.DCP-2> ;IF FT.DCP IS 2, GENERATE 2.3 NSP SOFTWARE
FTDCP2=1 ;FEATURE TEST FOR NSP 2.0
ZZ=0 ;INDICATE GOOD VERSION
.ENDC; EQ,<FT.DCP-2>
.IF EQ,<FT.DCP-3> ;IF FT.DCP IS 3, GENERATE 3.0 NSP SOFTWARE
FTDCP3=1 ;FEATURE TEST FOR NSP 3.0
ZZ=0 ;INDICATE GOOD VERSION
.ENDC; EQ,<FT.DCP-3>
.IF EQ,<FT.DCP-4> ;IF FT.DCP IS 4, GENERATE 3.2 NSP SOFTWARE
FTDCP4=1 ;FEATURE TEST FOR NSP 3.2 (PHASE 3)
ZZ=0 ;IDNICATE GOOD VERSION
.ENDC; EQ,<FT.DCP-4>
.IF NE,ZZ ;TRUE IF FT.DCP OTHER THAN 1 OR 2 OR 3
FTDCP3=1 ;USE VERSION 3 CODE AS DEFAULT
.PRINT 1;INCORRECT NSP VERSION SPECIFIED; DEFAULTS TO 3.0
.ENDC; NE,ZZ
.IF NE,FT.MPT ;TRUE IF MULTIPOINT FEATURE ALSO REQUESTED
.PRINT 7;ILLEGAL CONFIGURATION -- BOTH MPT AND DCP NOT ALLOWED.
.PRINT 7;THE CODE PRODUCED WILL NOT RUN
.ENDC; NE,FT.MPT
NSPCFS=0 ;SIZE OF CONFIG INITIALLY ZERO
NSP$MX=0
NSPTCF=0
NSPN=0 ;NUMBER OF NSP NODES IS INITIALLY 0
;STILL IN .IF NE FT.DCP
ZZ=1
.IF NE FTDCP1!FTDCP2
.MACRO NSP,A,B,C,D,E,F,G,H
ZZ=0
YY=0
NSPN=NSPN+1 ;COUNT NSP LINES
.IRP Q,<H>
YY=YY+2 ;COUNT THIS ENTRY
.ENDM ;.IRP Q,H
.IIF GE YY-NSPCFS,NSPCFS=YY
.ENDM NSP
.ENDC ; NE,FTDCP1!FTDCP2
.IF NE FTDCP3
.MACRO NSP3,QAZ,QBZ,NOD
.IF B <NOD>
.IF EQ <PASS-1>
.PRINT 7'QAZ;NODE NUMBER FOR DCP MISSING, 7'QAZ ASSUMED
.ENDC
.ENDC
ZZ=0
NSPN=NSPN+1
NSPTCF=0
.IRP Q,<QBZ>
NSPTCF=NSPTCF+2
.IIF GE NSPTCF-NSP$MX,NSP$MX=NSPTCF
.ENDM ;.IRP
.ENDM NSP3
.ENDC ; NE,FTDCP3
.IF NE FTDCP4
.MACRO DCP4LN,QLN,QOB,QVN,QVS,QHN,QHS,QCN
.IF B <QVN>
.IF EQ <PASS-1>
.PRINT 7'QLN;NODE NUMBER FOR DCP MISSING, 7'QLN ASSUMED
.ENDC
.ENDC
ZZ=0
NSPN=NSPN+1
NSPTCF=0
.IRP Q,<QOB>
NSPTCF=NSPTCF+2
.IIF GE NSPTCF-NSP$MX,NSP$MX=NSPTCF
.ENDM ;.IRP
.ENDM DCP4LN
.ENDC ; NE,FTDCP3
NSPLST
.IF NE,ZZ ;TRUE IF NSPLST MACRO NOT PROVIDED
.PRINT -1;NO NSPLST MACRO PROVIDED; ABORTING.
$ABORT=1 ;SET FLAG TO ABORT ASSEMBLY
.ENDC; NE,ZZ
.ENDC; NE,FT.DCP
ND $ABORT,0 ;UNLESS ABORT SYMBOL GIVEN VALUE ABOVE, SET TO 0
.IIF NE,$ABORT, .END
.SBTTL SYMBOL DEFINITIONS
;
;
;
; REGISTER DEFINITIONS
;
DQ=R3 ;ADR OF DQ11 HDW
SB=R4 ;POINTS TO STATION CONTROL BLOCK
J=R5 ;POINTS TO LINE BLOCK
;MACRO TO INTERRUPT THE 10
.MACRO WAKE10
BIS #DL.10I,DL.STS ;INTERRUPT THE TEN
.ENDM WAKE10
;MACRO TO ASSEMBLE EXTENSIBLE ASCII
.MACRO EASCII LEN,TEXT,FILL
.IIF EQ,LEN,.MEXIT
EAZ=0
.IRPC CHR,<TEXT>
.IF LT EAZ-LEN
.IF NE EAZ
.BYTE 200+EAZEAZ
.ENDC;.IF NE EAZ
EAZ=EAZ+1
EAZEAZ=''CHR
.ENDC;.IF LT EAZ-LEN
.ENDM;.IRPC CHR,<TEXT>
.BYTE EAZEAZ
.IF NB,<FILL>
.REPT LEN-EAZ
.BYTE 0
.ENDR; LEN-EAZ
.ENDC; NB,<FILL>
.ENDM EASCII
.SBTTL CHUNK WORDS
BLOCK CN ;DEFINE X AND XX MACROS
;FOLLOWING DESCRIBES USE OF CHUNKS FOR MESSAGES
X ,1 ;LINK TO NEXT CHUNK IN CURRENT MESSAGE
X MLK,1 ;LINK TO NEXT MESSAGE
X LEN,1 ;LENGTH OF MESSAGE(INCLUDES NCL HEADER BUT NOT BCC)
X TIM,1 ;TIMER USED BY DDCMP
.IF NE DEVN+FT.DTE
X DDB,1 ;ADR OF DDB WHICH SENT MSG
.ENDC;.IF NE DEVN
X SCB,1 ;POINTER TO SCB WINDOW FOR MSG
X DDC,0 ;DDCMP HEADER STARTS HERE
X ADR,1 ;ADR OF NEXT BYTE TO USE
X CNT,1 ;COUNT OF BYTES LEFT IN MESSAGE
X NCN,1 ;SAVE NCN HERE
X ,1 ;DDCMP HEADER BCC
X NCT,1 ;RELATIVE ADR OF NCT BYTE
;DATA POINTER DEFINITIONS:
CNKLN1 =CNKSIZ-CN.NCT ;AMOUNT OF DATA IN FIRST CHUNK OF LIST
CN.DT2 =2 ;STARTING ADDRESS OF DATA IN OTHER CHUNKS
CNKLN2 =CNKSIZ-CN.DT2 ;DATA LENGTH IN THOSE CHUNKS
.SBTTL LINE CONTROL BLOCK DEFS
;
;
; DEFINE A DEVICE TYPE FOR ASYNC IO DEVICES
;
;THIS IS USED AS INDEX INTO DISPATCH TABLES
ASY.DH= 0 ; DH11 IS TYPE 0
ASY.DZ= ASY.DH+2 ; DZ11 IS NEXT
.IF NE NDH11!NDZ11!FT.CTY ; ONLY NEEDED IF A DH11 OR DZ11 IS USED
BLOCK LC ;DEFINE LC.??? OFFSETS
X CAR,1 ; DM11 CONTROL FOR THE LINE
; FORMAT FOR BYTE IS (6)BITS(10)TIMER
LCB.BK=100000 ; LAST CHARACTER WAS A BREAK (FRAMING ERROR)
LCB.IG=40000 ; IGNORE THE NEXT CHARACTER ON THIS LINE
LCB.AB=20000 ; LINE IS AUTOBAUD
LCB.DS=10000 ; LINE IS DATA-SET
LCB.LS=04000 ; USING LOW SPEED AUTO BAUD DETECT
LCB.TM=01777 ; TIMER
XX STA,1 ; STATE OF MODEM CONTROL
LCS.VG=0. ; VIRGIN STATE
LCS.RG=2. ; RINGING
LCS.CD=4. ; CARRIED DETECT
LCS.CS=6. ; CARRIER DETECT SATISFIED (2 SEC WAIT STATE)
LCS.AB=8. ; AUTO BAUDING
LCS.RU=10. ; RUNNING UNCONNECTED (NO -10 CONNECTION)
LCS.RW=12. ; RUNNING WAITING FOR -10 CONNECTION TO FINISH
LCS.RC=14. ; RUNNING AND CONNECTED TO THE -10
LCS.LC=16. ; CARRIER LOST
LCS.HA=18. ; WANT TO HANG UP
LCS.HG=20. ; HANG UP (DTR OFF FOR 18 SEC)
.IIF EQ FTDN11,LCS.MX=20. ; MAX STATE (NO DIALOUT CAPABILITY)
.IF NE FTDN11
LCS.DL=22. ; DIALER IS RUNNING
LCS.DS=24. ; DIALOUT SUCCEEDED
LCS.DF=26. ; DIALOUT FAILED
LCS.MX=26. ; MAX STATE (DIALOUT CAPABILITY)
.ENDC;.IF NE FTDN11
XX MOD,1 ; NUMBER OF TIMES LPR IS MODIFIED
X SPD,0 ; SPEED FOR DH11 LINE (ENCODED)
XX XSP,1 ; XMIT SPEED
XX RSP,1 ; RECEIVE SPEED
X PSP,0 ; SAVED SPEED (FOR NON AUTO BAUD DATA SET LINES)
XX PXS,1 ; XMIT SPEED
XX PRS,1 ; RECEIVE SPEED
X BLK,1 ; LINK TO DEVICE OR LINE BLOCK FOR THIS LINE
X INS,1 ; ADDRESS OF THE INPUT SERVICE PROC
X OUS,1 ; ADDRESS OF THE OUTPUT SEVRICE PROC
.IF NE NDZ11
X CNT,1 ; COUNT OF BYTES (DZ ONLY)
X BUF,1 ; BUFFER POINTER FOR BYTES
.ENDC
X .SZ,0 ; SIZE OF A LINE CONTROL BLOCK
.ENDC
.SBTTL NCL DEFINITIONS
;NCT FLAGS
NCFSNA=10 ;FLAG SNA & DNA ARE PRESENT
NCFINT=040 ;INTERRUPT MESSAGE - DOESN'T AFFECT DATA REQUESTS
NCFSEQ=100 ;FLAG SOURCE NODE IS SEQUENTIAL
;MESSAGE TYPES FOR NUMBERED CONTROL
NCLCON=1 ;CODE FOR CONNECTS
NCLDIS=2 ;CODE FOR DISCONNECTS
NCLNGH=3 ;CODE FOR NEIGHBOURS MESSAGE
NCLRCN=4 ;CODE FOR REQUEST CONFIGURATION
NCLCNF=5 ;CODE FOR CONFIGURATION MESSAGE
NCLDRQ=6 ;CODE FOR DATA REQUEST MESSAGES
NCLSTC=7 ;CODE FOR STATION CTRL MESSAGES
;OBJECT TYPES FOR CONNECTS
OBJMCR=0
OBJTTY=1
OBJCTY=OBJTTY
OBJCDR=2
OBJLPT=3
OBJLP2= OBJLPT
OBJPTR=4
OBJPTP=5
OBJPLT=6
OBJMTA=7
OBJDTA=10
OBJTSK=11
OBJRDE=12
OBJRDA=OBJRDE ;ASCII RDE
OBJRDP=OBJRDE ;POINT-TO-POINT RDE
OBJRDM=OBJRDE ;MULTI-POINT RDE
OBJCDP=13
OBJDDP=14
.SBTTL STATION CONTROL BLOCKS
BLOCK SB ;DEFINE SB.??? OFFSETS
;LOCATIONS IN A STATION CONTROL BLOCK (SCB)
X FLG,1 ;FLAGS FOR STATION CONTROL BLOCK
SBF.IU=000001 ;SCB IS IN USE
;FOR TENSCB MEANS PORT IS ENABLED
SBF.IC=000002 ;IN CONTACT(I.E. HAVE EXCHANGED NCL START/STACK)
SF.HID=000004 ;HAVE NODE ID FOR STATION
SBF.NB=000010 ;NEED TO SEND NEIGHBORS TO NODE
; SET WHEN MAKE CONTACT AND WHEN OUR NGH CHANGE
SBF.RP=000020 ;REP IS OUTSTANDING
SBF.RR=000040 ;OWE RESPONSE TO REP
SF.XAK=000100 ;NEED TO SEND NCL-ACK TO THIS STATION
SBF.NK=000200 ;NEED TO SEND NCL-NAK
SBF.SK=000400 ;NEED TO SEND NCL-STACK TO THIS STATION
SBF.SQ=001000 ;NODE IS SEQUENTIAL
SBF.NQ=002000 ;HAS REQUEST IN NCL QUEUE
SF.XCN=004000 ;NEED TO SEND CONFIGURATION
SF.XRC=010000 ;NEED TO SEND REQUEST CONFIGURATION
SF.MCR=020000 ;NODE HAS A COMMAND DECODER
.IF NE,FT.DCP
SF.NSP=100000 ;NSP LINE
.ENDC; NE,FT.DCP
XX HXN,1 ;HIGHEST NCL-MESSAGE NUMBER TRANSMITTED
XX LAP,1 ;LAST ACK PROCESSED.
XX HAR,1 ;HIGHEST ACK RECEIVED.
XX RMN,1 ;RECEIVE MESSAGE NUMBER
XX TIM,1 ;TIMER, USED FOR REP AND START
X IMQ,1 ;INPUT MESSAGE QUEUE
; FOR INPUT MESSAGE WHICH AREN'T IN ORDER YET
X OMQ,1 ;OUTPUT MESSAGE QUEUE
; MESSAGE WHICH HAVE BEEN DDCMP ACKED BUT NOT NCL ACKED
X SQS,0 ;LENGTH OF SEQUENTIAL NODE CONTROL INFO
SQNSIZ=SB.SQS
XX ,SQNSIZ*<SEQLIM-1> ;SPACE FOR SEQUENTIAL NODE CONTROL
X LBA,1 ;ADDRESS OF LINE DATA BLOCK FOR STATION
X LVL,1 ;COST OF THE BEST PATH TO THIS NODE
X RTN,1 ;RETURN ADDRESS OVER A CALL TO "MARK"
X RR0,1 ;PLACE TO SAVE "R0" OVER A CALL TO "MARK"
X RSB,1 ;PLACE TO SAVE "SB" OVER A CALL TO "MARK"
X WOQ,1 ;QUEUE OF MSGS WAITING TO BE ASSIGNED MSG NUMBERS. A LA JCH.
X NGH,<<NGHMAX*2>+1> ;PAIRS OF SCB ADR, LINK LVL
;FOLLOWING ARE NOT CLEARED BY CLRSCB
XX SNM,SNMSIZ ;STATION NAME
XX SID,SIDSIZ ;SOFTWARE ID
XX DAT,DATESZ ;SOFTWARE DATE
X NNM,1 ;NODE NAME (BINARY NUMBER)
X RVR,1 ;REMOTE NCL VERSION (BINARY NUMBER)
X SIZ,0
.MACRO SB.ADV X
ADD #SB.SIZ,SB ;MAKE ADDRESS OF NEXT SCB
CMP #SB.LIM,SB ;IS THAT TOO FAR ?
BNE X ;IF SO SPECIAL ACTION
.ENDM SB.ADV
.SBTTL DDCMP DEFINITIONS
SYN=226
IDLE=SYN ;NO SPECIAL IDLE CHARACTER
ENQ=005 ;1ST CHAR IN UNNUMBERED MESSAGES
DLE=220 ;1ST CHAR IN BOOTSTRAP MESSAGES
SOH=201 ;1ST CHAR IN NUMBERED MESSAGES
;NUMBERED MESSAGES
; SOH CC1 CC2 QSYNC SELECT R N A0 BCC1 DATA BCC2
; CC1&CC2 ARE TOTAL LENGTH OF DATA(BCC1 THRU BCC2 EXCLUSIVE)
; CC1 IS LOW ORDER 8 BITS OF VALUE
; CC2 IS HIGH ORDER 6 BITS
; QSYNC IS THE FLAG WHICH IF ON SIGNALS A SHORT SYNC SEQ
; SELECT IS THE FLAG WHICH SIGNALS DESTINATION TO TURN XMITTER ON
; R IS # OF LAST GOOD MESSAGE RECEIVED
; N IS THIS MESSAGE NUMBER
; A0 IS THE DESTINATION STATION ADR
; BCC1 IS THE CRC ON SOH THROUGH A0 INCLUSIVE
; DATA IS STUFF PASSED ON TO HIGHER LEVEL PROTOCOL
; BCC2 ARE THE CRC OF BCC1 THRU BCC2 EXCLUSIVE
;
;UNNUMBERED MESSAGES
SELBIT=200 ;DDCMP SELECT FLAG IN MSG
QSYNC=100 ;DDCMP QSYNC FLAG IN MSG
FILL=000 ;FILL CHARACTER
A0=1 ;DEFAULT DESTINATION STATION ADR
;ACK: ENQ ACK FILL MSG# FILL A0 BCC1
ACK=001
; MSG# IS LAST GOOD MSG RECEIVED
;NAK: ENQ NAK RNAK MSG# FILL A0 BCC1
NAK=002 ;NEGATIVE ACKNOWLEDGE
NCDBCC=1 ;BCC ERROR
NCDDBC=2 ;DATA BCC ERROR
NCDREP=3 ;REP RESPONSE
NCDNRM=10 ;NO ROOM
NCDROV=11 ;RECEIVER OVERRUN
NCDTLM=20 ;LOOOONG MSG
; MSG# IS LAST GOOD MSG RECEIVED
;REP: ENQ REP FILL FILL N A0 BCC1
REP=003 ;REPLY TYPE
; N IS THE LAST MESSAGE# SENT
;RESET: ENQ RESET FILL FILL N A0 BCC1
; RESET=4
; ******!!!!!!! THIS MESSAGE IS NOW ILLEGAL !!!!!!!******
;RESAK: ENQ RESAK FILL R FILL A0 BCC1
RESAK=5
; ******!!!!!!! THIS MESSAGE IS NOW ILLEGAL !!!!!!!******
;START: ENQ STRT FILL FILL N A0 BCC1
STRT=6 ;START TYPE
; N IS NEXT NUMBERED MESSAGE TO BE SENT
; N MUST BE ZERO FOR DDCMP VERSION 3.02
;STACK: ENQ STACK FILL R N A0 BCC1
STACK=7 ;START ACKNOWLEDGE
; R IS NEXT EXPECTED MESSAGE # FOR RECPTION
; R MUST BE ZERO FOR DDCMP VERSION 3.02
; N IS NEXT MESSAGE # FOR TRANSMISSION
; N MUST BE ZERO FOR DDCMP VERSION 3.02
MSNMAX=377 ;MAXIMUM MESSAGE NUMBER
;WHEN A MSG IS RECEIVED CORRECTLY AN ACK IS SENT BACK;
; AN ACK IMPLIES ACK OF ALL LOWER NUMBERED MESSAGES
;WHEN A MSG IS RECEIVED INCORRECTLY A NAK MSG IS SENT BACK;
; A NAK IMPLIES ACK OF ALL LOWER NUMBERED MSGS.
.SBTTL LINE BLOCKS
.IF NE NTLINE
BLOCK LB ;DEFINE LB.??? OFFSETS
;LOCATIONS IN A LINE BLOCK (LB)
X STS,1 ;STATUS - MUST BE FIRST WORD
LS..ST=000001 ;NEED TO SEND A START
LS.STK=000002 ;NEED TO SEND A STACK
LS.XNK=000004 ;NEED TO SEND A NAK
LS.XAK=000010 ;NEED TO SEND AN ACK
LS.XRP=000020 ;NEED TO SEND A REP MESSAGE
LS.NRP=000040 ;NEED RESPONSE TO REP
LS..RQ=000100 ;RECEIVER INTERRUPT QUEUED
LS..XQ=000200 ;XMT DONE INTERRUPT QUEUED
LS..RG=000400 ;SYNCHRONOUS LINE RECEIVER IS ACTIVE
LS..XG=001000 ;SYNCHRONOUS XMTER ACTIVE - MAY BE IDLING
LS..RN=002000 ;RECEIVED NAK
LS.XCT=004000 ;LINE IS TRANSMITTING A CONTROL MESSAGE
LS.XDT=010000 ;TRANSMITTING DATA
LS.SSY=020000 ;MUST STRIP SYNC BEFORE NEXT MESSAGE
LS.MPT=040000 ; LINE IS A MULTIPOINT LINE
.IIF NE FTDCP1!FTDCP3!FTDCP4,LS.NSP=040000 ; LINE IS AN NSP LINE
LS..SS=100000 ;STRIPPING SYNC NOW
X ST2,1 ;SECOND STATUS WORD
L2.DDP=100000 ;LBLK IS IN USE AS A DDP DEVICE (MUST BE SIGN BIT)
X LNK,1 ;ADR OF NEXT LINE BLOCK
.IF NE FT.DDP
X DDB,1 ;ADDRESS OF ASSOCIATED DDP DEVICE DDB
.ENDC ;.IF NE FT.DDP
X BIT,1 ;BIT CORRESPONDING TO LINE NUMBER
XX LNU,1 ;LINE NUMBER
XX DVS,1 ; THIS BYTE IS USED TO SELECT THE APPROPRIATE DEVICE SERVICE ROUTINES
LS..DP=0 ;DP11 DEVICE LINE
LS..DS=2 ;DS11 DEVICE LINE
LS..DU=4 ;DU11 DEVICE LINE
LS..DV=6 ;DV11 DEVICE LINE
LS..DQ=10 ;DQ11 DEVICE LINE
LS..UP=12 ;DUP11 DEVICE LINE
LS..DM=14 ;DMC11 DEVICE LINE
LS..AL=16 ;LOWEST ASYNC DEV TYPE CODE
;IE, LB.DVS>=LS..AL IMPLIES ASYNC DEV
;LB.DVS<LS..AL IMPLIES SYNC DEV
LS..DH=16 ;DH11 DEVICE LINE
LS..DZ=20 ;DZ11 DEVICE LINE
X LVL,1 ;LVL FOR LINK
X DHB,0 ;DH & DZ DEVICE CONTROL BLOCK
X SLA,1 ;SYNCHRONOUS LINE HDW ADR
X .LN,0 ; 4 BIT LINE # (DH11 & DZ11 LINES ONLY)
X SLV,1 ;SYNCHRONOUS LINE VECTOR
.IF NE NALINE!NMPTL!NTRIB!RDPN
X LCB,1 ;LINE CONTROL BLOCK ADDRESS (DH11)
.ENDC
.IF NE FT.MPT
X MPL,1 ;LINK TO NEXT LINE DROP FOR MULTIPOINT
X MPN,1 ; MULTIPOINT NEXT STATION SELECTION CONTROL
XX MPA,1 ;MULTIPOINT STATION ADDRESS
XX MPT,1 ;MULTIPOINT SETECT TIMMER
X ,0 ;.EVEN
XX MPS,2 ; MULTIPOINT NODE STATUS
; UPPER BYTE RESERVED FOR ADDITIONAL CONTROL STATUS
MP.SEL=0200 ;STATION SELECTED
MP.SFF=0017 ;SELECTED FAILURE COUNT FIELD
;MP.STV=17 ;SELECTED TIMEOUT VALUE
;MP.TTV=7 ;TRIBUTARY SELECTED TIMEOUT VALUE
;MP.SFC=4 ;SELECT FAILURE COUNT
MP.OFF=0100 ;STATION OFFLINE FLAG
MP.SOL=0040 ;SET OFFLINE WHEN DESELECTED
MP.SNM=0020 ;SET SELECT BIT IN NEXT MESSAGE XMITTED
MP.RTS=0004 ;SET TO INHIBIT SETTING OF THE RTS MODEM LEAD
MP.CMS=0001 ;SET FOR HALF/DUPLEX OR TRIBUTARY TO ENABLE 'MP.RTS' TRANSITION
.ENDC; FT.MPT
.IF NE,FTDCP1
X NSS ;NSP STATUS
NS.STR=B14 ;STRIP ALWAYS
NS.EDS=B13 ;ENABLE DYNAMIC STRIPPING
NS.CNF=B12 ;SEND CONFIGURATION MESSAGE
NS.NSQ=B13 ;SOMETHING IS IN QUEUE FOR THIS LINE
XX NNM ;NODE NUMBER FOR NSP NODE
XX DNA ;NODE NUMBER HE TALKS TO
;THE CONSECUTIVE ORDER OF THESE TWO BYTES
;MUST BE RETAINED; NSPBNC MAKES USE
;OF THAT INFORMATION
X MML ;MAXIMUM MESSAGE LENGTH
XX SNM,SNMSIZ ;STATION NAME
XX SID,SIDSIZ ;SOFTWARE ID
XX DAT,DATESZ ;DATE
XX CNF,NSPCFS ;CONFIG
X DSZ,0 ;DCP ENTRY END
.ENDC; NE,FTDCP1
.IF NE,FTDCP3!FTDCP4
XX VNN ;ANF NODE NUMBER FOR DECNOT NODE
.IF NE,FTDCP4
XX VNM,6 ;ANF NODE NAME FOR DECNOT NODE
XX HNN ;DECNET NODE NUMBER FOR ANF NETWORK
XX HNM,6 ;DECNET NODE NAME FOR ANF NETWORK
XX CNN ;ANF NODE TO RECEIVE DECNET CONNECTS
.ENDC; FTDCP4
XX CNF,NSP$MX+1 ; OPTIONS LIST (ONE BYTE TO FORCE STOP)
.ENDC; FTDCP3
X OCN,5 ;COUNT OF MESSAGES SENT (AND ACKED BY OTHER END)
; COUNT OF ALL NAKS (INCLUDING THE FOLLOWING)
; COUNT OF NAKS FOR REP RESPONSE
; COUNT OF NAKS FOR BCC
; COUNT OF NAKS FOR NO ROOM
X ICN,3 ;COUNT OF MESSAGES RECEIVED OK
; COUNT OF BAD MSGS
; COUNT OF REP'S WHICH WON NAKS
;*** LB.ICN MUST FOLLOW LB.OCN DIRECTLY ***
XX BNN,2 ;BOOTSTRAPING NODE NUMBER
; 2ND BYTE IS TIMER
.IF NE,DMCN
X FB,1 ;FIRST DMC11 BUFFER
X BAS,1 ;ADDRESS OF DMC11 BASE
.ENDC;.IF NE,DMCN
.IF NE FTWHYD ;IF WE ARE RECORDING WHY THE LINE WENT DOWN
X WHA ;ADDRESS OF ROUTINE THAT CALLED L.DOWN
XX WHS ;NUMBER OF LAST ACKED MESSAGE
XX WHN ;COPY OF LB.OBF+4
.ENDC; FTWHYD
X ZER,0 ;FIRST WORD TO ZERO ON A RESET
.IF NE FTDUP11!DMCN ;AN EXTRA STATUS WORD FOR THE DUP-11 AND DMC11
X STX,1 ;THIS WORD IS THE DISPATCH ADDRESS IN THE DEVICE
; DRIVER (USED FOR MAXIMUM SPEED) FOR DUP11, AND
; A STATUS WORD FOR DMC11
.ENDC;.IF NE,FTDUP11!DMCN
.IF NE,FTDUP11
X STY,1 ;A STATUS WORD
;BITS IN LB.STY (ONLY ONE SO FAR... SIGH)
UP$RCC=1 ;WHEN THE SERVICE ROUTINE IS CALLED (VIA LB.RDN)
; THIS BIT WILL BE SET IF THE BCC IS GOOD
.ENDC; NE FTDUP11
.IF NE,FTDCP1
X LCT ;ACTIVE LINK COUNT
X LKT ;POINTER TO LINK TABLE
X LLE ;LAST LINK ENTRY
.ENDC; NE,FTDCP1
.IF NE,FTDCP3!FTDCP4
X NSS ;STATUS WORD
LBS.IC=1 ;IN CONTACT WITH NSP
LBS.L1=2 ;NSP NODE IS ONLY LEVEL 1 (I.E. INTERCEPTED)
LBS.NQ=4 ;NODE IS IN NSP QUEUE
X LEB ;POINTER TO LEB CHAIN
.ENDC ;.IF NE FTDCP3!FTDCP4
X SCB,1 ;POINTER TO STATION CONTROL BLOCK
X 2ND,1 ;POINTER TO NEXT LINE BLOCK IN CASE OF PARALLEL LINES
X REP ;REP TIMER COUNTED DOWN 1/SEC
XX ROK,1 ;LAST MESSAGE NUMBER RECEIVED OK
XX LAR,1 ;LAST MESSAGE NUMBER ACK RECEIVED
XX LAP,1 ;LAST MESSAGE NUMBER ACK PROCESSED
XX HSN,1 ;HIGHEST MESSAGE NUMBER SENT
XX RDC ;FIRST BYTE IS REP TIMER(TICKED ONCE/SECOND)
XX NCD,1 ;LAST NAK CODE WE SENT
.IF NE FT.BIG
XX TRY,1 ;COUNT OF BCC NAKS RECEIVED FOR 1ST MSG IN OUTPUT QUEUE
.ENDC
X XDN,1 ;WHEN SYNCHRONOUS LINE INTERFACE ROUTINE GETS XMT DONE
; INTERRUPT IT WILL JSR PC,@LB.XDN(J) AND EXPECTS
; (R0) = ADR, (R1) = COUNT ON RETURN
XX CTL,10 ;NEXT CONTROL MESSAGE TO TRANSMIT
X COB,3 ;CURRENT OUTPUT BUFFER
; 1ST WORD IS POINTER TO 1ST CHUNK OF CURRENT MSG
; 2ND WORD IS POINTER TO CURRENT CHUNK
; 3RD WORD IS NUMBER OF BYTES LEFT
X BOO,1 ;POINTER TO BOOTSTRAP MSG TO SEND
X OBF,3 ;OUTPUT BUFFERS
; 1ST WORD POINTER TO 1ST BUFFER
; 2ND WORD IS POINTER TO LAST BUFFER (OR ZERO)
; 3RD WORD IS NUMBER OF MSGS IN QUEUE
X RDN,1 ;DISPATCH ON RECEIVE DONE
X CIB,2 ;CURRENT INPUT BUFFER (USED BY INTERRUPT LEVEL)
; 1ST WORD IS CURRENT CHUNK ADR
; 2ND WORD IS CHARS LEFT IN MESSAGE
.IF NE <NTLINE-NLINES!FTDP11!FTDS11!FTDU11!FTDUP11>
;NON ZERO IF ASYNC DDCMP USED OR IF NO DQ11S
X SXR,4 ;PAIR OF DUMMY ADR,WC REGS FOR XMT
X SRR,4 ;PAIR OF DUMMY ADR,WC FOR RECEIVER
.ENDC;.IF NE <NTLINE-NLINES!FTDP11!FTDS11!FTDU11!FTDUP11>
.IF EQ FT.SLB
X SLE,3 ; 1ST WORD IS COUNT OF SYNCHRONOUS LINE ERROR INTERRUPTS
; 2ND WORD IS LAST ERROR INTERRUPT HDW STATUS
; 3RD COUNT OF SYNCHRONOUS LINE XMT TIMEOUT'S
.IF NE FT.HLP
X CTY,1 ;ADR OF STRING FOR LINE
.ENDC
.IF NE DEBUG
X CRS,4 ;SYNCHRONOUS INTERFACE STATUS AT CRASH
.IIF NE FTDQ11, X ,4
.ENDC ;.IF NE DEBUG
.ENDC ;.IF EQ FT.SLB
X IPT,1 ;INPUT PUTTER (RELATIVE TO LNE BLOCK)
X ITK,1 ;INPUT TAKER (RELATIVE TO LINE BLOCK)
X IBF,<<5*NINBUF>> ;INPUT BUFFERS
; 1ST 8 CHARS ARE CONTROL MESSAGE OR DATA MESSAGE HEADER
; FOR DATA MESSAGES 5TH WORD IS LINK TO CHUNKS
X SIZ,0
.ENDC;.IF NE NTLINE
.SBTTL MACRO TO LOG ERRORS
ND GIVMSG,-1 ;SET TO 0 TO DISABLE MSGS, -1 TO ENABLE THEM
.IIF NE RPLPOL,GIVMSG=-1 ;FORCE THE ISSUE IF HE REQUESTED LPT MSG
.IIF NE DGUTS,GIVMSG=-1 ;OR "DON'T GIVE UP THE SHIP"
.IIF EQ FT.CTY,GIVMSG=0 ;TOO BAD HE DIDN'T CONFIGURE IN A CTY
.IF NE GIVMSG
.MACRO CTYMSG NAME,TEXT
.IF NB <NAME>
.IF NB <TEXT>
NAME'MSG: .BYTE 0,NAME'END-1-.
.BYTE 007,012,015
.ASCII \'TEXT'\
.BYTE 007,012,015,0
NAME'END:
MSGEND=.
.IFF
INCB NAME'MSG
INC MSGBGN
.ENDC
.IFF
CTYM0: MOV #CTYDDB,J
BIT #DS.ACT,(J) ;WAIT TILL THE CTY IS FREE
BNE CTYM3
MOV #MSGBGN,R0
TST (R0)
BEQ CTYM3 ;IF NOTHING TO REPORT, CONTINUE
DEC (R0)+
CTYM1: TSTB (R0)+ ;TEST IF THIS IS THE MESSAGE
BNE CTYM2 ;IT IS, PRINT IT
CLR R1 ;GET ALL 8 BITS OF MSG LENGTH
BISB (R0)+,R1
ADD R1,R0
CMP R0,#MSGEND ;EXIT IF COUNTS GOT SCREWED UP
BHIS CTYM3
BR CTYM1
CTYM2: INC R0
DECB -2(R0)
MOV R0,DB.STR(J) ;SET MSG AS HIGH PRIORITY OUTPUT
JSR PC,BEGXMT ;SET THE CTY TYPING
CTYM3:
.ENDC
.ENDM CTYMSG
.IFF
.MACRO CTYMSG NAME,TEXT
.ENDM CTYMSG
.ENDC ; .IF NE GIVMSG
.SBTTL MACROS TO INSERT NODE NAME WHERE REQUIRED
;
; CONFIGURATION FILE C.P11 MUST HAVE THE DEFINITION OF THE NODE MACRO
;
; .MACRO NODE ARG
; ARG NAME
; .ENDM NODE
;
; WHERE "NAME" IS THE NODE'S IDENTIFIER
;
;
; THE MACRO NAMEIS IS CALLED AS FOLLOWS
;
; NAMEIS OURNNM
;
;
.MACRO X ARG
DFNAME=0
.ENDM X
.=40
NODE X ;TEST WHETHER NODE MACRO IS DEFINED
.IF NDF DFNAME
.ERROR -1; !!!! CAUTION: NODE NAME UNDEFINED
.ERROR -1; !!!! HOWEVER, CODE WILL STILL WORK
.ENDC
.MACRO NAMEIS NNUMB
.MACRO NAME.. NUMB,NNAME
.ASCII \'NNAME ('NUMB')\
.ENDM NAME..
.IF DF DFNAME
NODE <NAME.. NNUMB>
.IFF
NAME.. \NNUMB,<...>
.ENDC ;.IF DF DFNAME
.ENDM NAMEIS
.SBTTL DATA STORAGE
.=1000+STKLEN ;ALLOW ROOM FOR STACK ABOVE DEVICES
.IIF NE FT.DDT,.=15000 ;SET ONLY FOR DEC INHOUSE DEBUGGING TO SAVE SPACE FOR DDT
PDL: ;END OF STACK
JOBVER: .WORD VDAS85 ;VERSION NUMBER
PRGEND: FIRZER ;FIRST FREE LOCATION AFTER PROGRAM
PHYLIM: .BLKW 1 ;1ST NON-CORE UNIBUS ADR
LSTFRE: .BLKW 1 ;ADDR OF LAST FREE CHUNK
FIRFRE: .BLKW 1 ;ADR OF FIRST FREE CHUNK
FRECNT: .BLKW 1 ;COUNT OF FREE CHUNKS
FREMAX: .WORD 040000 ;MAX NUMBER OF CHUNKS
BITS: Z=1 ;INDEX OF USEFUL BITS
BITSP2=BITS+20
.REPT 16.
.WORD Z
Z=Z+Z
.ENDR
BITS2:Z=400+1
.REPT 10
.WORD Z
Z=Z+Z
.ENDR
TRPSP: .WORD 0 ;SAVED P ON A TRAP INTERCEPT
TRPPC: .WORD 0 ;INTERCEPT PC FOR NXM'S
TRPPS: .WORD 0 ;SAVED PS ON A TRAP INTERCEPT
TRPDPC: .WORD 0 ;TRAP PC OF LAST TRAP WHICH WAS INTERCEPTED
TRPDPS: .WORD 0 ;TRAP PS OF SAME
JIFFLG: .WORD 0 ;INC'ED BY CLOCK INTERRUPT, CLR'ED BY SERVICE
SECTIC: .WORD JIFSEC ;INITTED TO JIFSEC, COUNTED DOWN EACH SECOND
SECFLG: .WORD 0 ;INC'ED ONCE/SEC, CLR'ED BY SECOND SERVICE ROUTINE
MINTIC: .WORD 60. ;INITTED TO 60 DEC'ED ONCE/SEC
MINFLG: .WORD 0 ;INC'ED ONCE/MIN, CLR'ED BY MINUTE SERVICE ROUTINE
LOWUP: .WORD 0 ;INC'ED ONCE/JIFFY
HIGHUP: .WORD 0 ;INC'ED ONCE/64536 JIFFYS
RPCLCK: .WORD REPSPD ;DEC'ED ONCE/JIFFY, 0 => TIME TO DO REP CHECKING
DSCLCK: .WORD DSCSPD ;DEC'ED ONCE/JIFFY, 0 => TIME TO DO MODEM CHECKS
NEGNGH: .WORD 0 ;.NE. 0 IF "NEGATIVE" NEIGHBORS MSGS MIGHT BE PENDING
;QUEUE OF LINES WHICH HAVE INPUT READY TO BE CHECKED
QUEUE QI,NTLINE
;QUEUE OF LINES WHICH ARE READY FOR MORE OUTPUT
QUEUE QO,NTLINE
;QUEUE OF STATIONS WHICH NEED NCL ATTENTION
QUEUE NC,<SCBMAX+2>
.IF NE,FT.DCP
;QUEUE OF NSP LINES WHICH NEED ATTENTION
QUEUE NS,NSPN
.ENDC; NE,FT.DCP
;QUEUE OF DEVICES WHICH DESIRE ATTENTION
QUEUE DV,DEVN
;QUEUE OF TTY INPUT
Z=TTYN+RDAN+1
QUEUE TI,Z,4
;SEQUENTIAL NODE TABLE - ADDRESSES OF SEQUENTIAL NODE SCB'S
SQNTAB: .BLKW SEQLIM
.WORD 0 ;ENDS SQNTAB
SQNODE: .BLKW 1 ;POINTER TO SQNTAB
.BYTE 0
NCT: .BYTE 0 ;NCT FROM CURRENT MESSAGE
DNA: .BLKW 1 ;DESTINATION NODE SCB ADR
DNAOFF: .BLKW 1 ;OFFSET ON DNA
SNA: .BLKW 1 ;SOURCE NODE SCB ADR
SNAOFF: .BLKW 1 ;OFFSET ON SNA
DLA: .BLKW 1 ;DESTINATION LINK ADDRESS
SLA: .BLKW 1 ;SOURCE LINK ADDRESS
;LIST OF MESSAGES THAT HAVE TO BE RESENT. ANY INTERFACE THAT FINDS
; THAT FOR SOME REASON IT CANNOT DELIVER A MESSAGE (LINK DOWN, DL-11 NXM)
; SHOULD QUEUE ALL UNSENT MESSAGES HERE. THIS IS LOOKED AT BY CLOCK
; LEVEL, AND THE MESSAGES RE-SENT OR DELETED.
MSGRSQ: .WORD 0 ;MESSAGE RESEND QUEUE
.IF NE DEVN
.MACRO X QQ
.WORD DDB'QQ
Z=Z+1
.ENDM X
Z=0
DLATAB: .REPT DEVN ;TABLE OF LINK ADDRESSES
X \Z
.ENDR
FIRDDB: .WORD DDBLINK
DDBLINK=0
.ENDC;.IF NE DEVN
.IF NE NTLINE
FRSTLB=.-LB.LNK
.WORD LBLK0 ;FIRST LOGICAL LINE
.ENDC ; .IF NE NTLINE
.IF NE FT.CTY!TTYN
CRLMSG: .BYTE 015,012,0 ;CARRIAGE RETURN / LINE FEED MESSAGE
XOFMSG: .BYTE 023,0 ;XOF TO TELL USER TO STOP TYPING
TABMSG: .BYTE 040,040,040,040,040,040,040,040,0 ;TO SIMULATE HT
BELMSG: .BYTE 007,0 ;BELL
NHAMSG: .BYTE 015,012
.ASCIZ /No host is available./
WCCMSG: .BYTE 015,012
.ASCIZ /Connecting to host system./
HSDMSG: .BYTE 015,012
.ASCIZ /Host sent disconnect./
HWAMSG: .BYTE 015,012,007
.ASCIZ /Path to host system was lost./
IBFMSG: .BYTE 015,012,007
.ASCIZ /Local input buffer full. Character not stored./
HIAHPL=TTYWID/NGHMAX ;HOSTS PER LINE
HIAHFL=<TTYWID-21.>/NGHMAX ;HOSTS ON FIRST LINE
HIAMSG: .BYTE 015,012 ;MESSAGE STARTS WITH A CRLF
HIABUF: .BLKB 21. ;ROOM FOR "HOSTS ARE AVAILABLE: "
.BLKB 12.*NGHMAX ;ROOM FOR "KL1026(26), " * NGHMAX
.BLKB <2*HIAHPL>+2 ;ROOM FOR EXTRA CRLFS
.EVEN ;EVEN UP
.BYTE 0,0 ;TERMINATOR
HIACNT: .WORD 0 ;COUNT OF NODES IN MESSAGE
HIAWCT: .WORD 0 ;COUNT OF NODES PER LINE
;Subroutine to build host availability message
BLDHIA: MOV #FIRSCB,SB ;FIRST STATION CONTROL BLOCK
CLR R0 ;INIT COUNT
10$: BIT #SBF.IC,@SB ;STATION IN CONTACT?
BEQ 20$ ;NO
BIT #SF.MCR,@SB ;IS IT A HOST?
BEQ 20$ ;NO
TST SB.SNM(SB) ;HAVE A NAME YET?
BEQ 20$ ;NO
INC R0 ;COUNT IT
20$: SB.ADV 10$ ;LOOP BACK
TST R0 ;ANY HOSTS?
BNE 30$ ;YES
JSR R1,100$ ;COPY STRING
ASCIZ <No host is available>
RTS PC ;RETURN
;CHECK FOR ONLY ONE HOST
30$: DEC R0 ;COUNT DOWN
BNE 40$ ;JUMP IF MORE THAN ONE HOST
JSR R1,100$ ;COPY STRING
ASCIZ <Host is available: >
BR 50$ ;ONWARD
;HERE IF MORE THAN ONE HOST
40$: JSR R1,100$ ;COPY STRING
ASCIZ <Hosts are available: >
;LOOP THROUGH THE STATION CONTROL BLOCKS FILLING HIABUF
50$: MOV #HIAHFL-1,HIAWCT ;COUNT OF NODES ON FIRST LINE
MOV #FIRSCB,SB ;FIRST STATION CONTROL BLOCK
MOV #-1,HIACNT ;INIT COUNT OF HOSTS ADDED
60$: BIT #SBF.IC,@SB ;STATION IN CONTACT?
BEQ 70$ ;NO
BIT #SF.MCR,@SB ;IS IT A HOST?
BEQ 70$ ;NO
TST SB.SNM(SB) ;HAVE A NAME YET?
BEQ 70$ ;NO
JSR PC,200$ ;ADD NODE TO MESSAGE
BR 80$ ;ALL DONE IF BUFFER FULL
70$: SB.ADV 60$ ;LOOP BACK
80$: RTS PC ;RETURN
;SETUP R2 POINTING TO HIABUF AND COPY INITIAL TEXT STRING INTO BUFFER
100$: MOV #HIABUF,R2 ;POINT TO DESTINATION
110$: MOVB (R1)+,(R2)+ ;STUFF CHARACTER AWAY
BNE 110$ ;LOOP THROUGH STRING
DEC R2 ;BACKUP OVER THE NUL
INC R1 ;ADVANCE IN CASE ODD BYTE
BIC #1,R1 ;AVOID ODD ADDRESS TRAP
120$: RTS R1 ;RETURN
;COPY NODE SPEC INTO BUFFER
200$: INC HIACNT ;FIRST TIME THROUGH?
BEQ 210$ ;YES
JSR PC,300$ ;SEE IF A NEW LINE IS NEEDED
RTS PC ;RETURN ON FULL BUFFER
210$: MOV #SNMSIZ,R3 ;LENGTH OF NAME
MOV #SB.SNM,J ;DISPLACEMENT OF NAME
ADD SB,J ;ADDRESS OF NAME
230$: TSTB (J) ;END OF TEXT?
BEQ 240$ ;YES
MOVB (J)+,(R2)+ ;COPY BYTE OF NAME
SOB R3,230$ ;AND LOOP THROUGH NAME
240$: MOVB #'(,(R2)+ ;START OF NUMBER
CLR J ;GET A ZERO
BISB SB.NNM(SB),J ;GET ZERO-EXTENDED NODE NUMBER
JSR PC,400$ ;CONVERT TO ASCII
MOVB #'),(R2)+ ;CLOSE PARENTHESIS
CLRB @R2 ;ZERO BYTE IN CASE LAST NODE
ADD #2,(SP) ;SKIP
RTS PC ;RETURN
;SEE IF A CRLF IS NEEDED
300$: MOVB #',,(R2)+ ;SEPARATE WITH A COMMA
MOVB #' ,(R2)+ ;AND A SPACE
DEC HIAWCT ;COUNT DOWN NODES PER LINE
BGT 310$ ;HAVE ROOM?
MOVB #015,(R2)+ ;CR
MOVB #012,(R2)+ ;LF
MOV #HIAHPL-1,HIAWCT ;RESET COUNTER
310$: ADD #2,(SP) ;SKIP
RTS PC ;RETURN
;CONVERT OCTAL TO ASCII
400$: SAVE J ;SAVE CURRENT VALUE
ROR J ;SHIFT OUT
ROR J ; LOWEST
ROR J ; DIGIT
BIC #160000,J ;CLEAR EXTRA BITS
BEQ 410$ ;IF ZERO, START POPPING DIGITS
JSR PC,400$ ;ELSE RECURSE
410$: RESTOR J ;GET LAST DIGIT PLACED ON STACK
BIC #^C7,J ;CLEAR TO ONLY ONE DIGIT
ADD #60,J ;CONVERT TO CHARACTER
MOVB J,(R2)+ ; AND STORE IN BUFFER
RTS PC ;RETURN
.IF NE GIVMSG
.EVEN
MSGBGN: .WORD 0
; MSGS IN ORDER OF PRIORITY
.IF NE DGUTS
ND ABRGM,0 ;SET TO NON ZERO TO ABRIDGE ERROR MSGS
CTYMSG LSW,<? STORAGE ALLOCATION FAILURE>
CTYMSG SBA,<? OUT OF SCB STORAGE>
IMTMSG: ;ILL MSG TYPE
.IIF EQ ABRGM, CTYMSG IMT,<? MSG WITH ILL TYPE LOST>
NDVMSG: ;NCL CAN'T BE FOR THE DEV/LINE CLAIMED
.IIF EQ ABRGM, CTYMSG NDV,<? NCL CAN'T BE FORWARDED>
BMEMSG: ;NCL MSG CONSTRUCTION FAILED
.IIF EQ ABRGM, CTYMSG BME,<? NCL MSG GEN FAILED>
IMLMSG: ;INCONSISTENT MSG LENGTHS
.IIF EQ ABRGM, CTYMSG IML,<? LOST MSG, INCONSISTENT LENGTHS>
NTLMSG: ;NCL SUBMSG TOO LONG, ZERO LENGTH ETC.
.IIF EQ ABRGM, CTYMSG NTL,<? INVALID NCL SUBMSG LENGTH>
CTYMSG NCL,<? NCL FORMAT BAD, MSG LOST>
CTYMSG ODR,<? MSG NOT REQUESTED LOST>
CTYMSG DOQ,<? MSG LOST, DDCMP OVERLOAD>
CTYMSG LLS,<? NODE TRAFFIC OVERLOAD>
CTYMSG NIL,<? Neighbors have been lost.>
.ENDC ; .IF NE DGUTS
.IF NE RPLPOL
CTYMSG LPT,<% LINE PRINTER OFFLINE>
.ENDC ; RPLPOL
.EVEN
ND MSGEND,.
.ENDC ;.IF NE GIVMSG
RSTMSG: .BYTE 377,15,12,7
.ASCII \Restarting \
.ENDC;.IF NE FT.CTY!TTYN
MYNAME:
.IIF NE FT.D75, .ASCII \DC75NP\
.IIF NE FT.D80, .ASCII \DN80\
.IIF NE FT.D81, .ASCII \DN81\
.IIF NE FT.D82, .ASCII \DN82\
.IIF NE FT.D85, .ASCII \DN85\
.IIF NE FT.D87, .ASCII \DN87\
.IIF NE FT.87S, .ASCII \DN87S\
.IIF NE FT.D20, .ASCII \DN20\
.IIF NE FT.D22, .ASCII \DN22\
.IIF NE FT.200, .ASCII \DN200\
ISVER \VDAS85,\EDIT,\VMIN,\VWHO
DATEIS
.ASCII \ -- \
NODMSG:
NAMEIS \OURNNM
NODCRL: .BYTE 015,012,021,0
.EVEN
PATRON: .WORD 0 ;SCB ADDRESS FOR UNSOLICITED BOOTSTRAP MSGS
.IIF NE FTHOST,HOSTES: .WORD 0 ;LAST SCB WE SENT RANDOM TTY CONNECT TO
TEMP0: .BLKW 1 ;TEMPORARY LOCATION
TEMP1: .BLKW 1 ; DITTO
TEMP2: .BLKW 1 ; DITTO
.IIF NE FTROLL,TROLL: .WORD FTROLL ;THE TROLL'S APPETITE CONTROLL
.IF NE FT.TSK
ZERO: .WORD 0 ;DEFAULT ARG (=0)
RUNQUE: ;RUN QUEUES FOR TASKS
.REPT TKPMAX
.WORD 0
.ENDR
TASK: .WORD 0 ;TASK BLOCK FOR CURRENT JOB
L.TASK: .WORD 0 ;LAST TASK SCHEDULED
.ENDC;.IF NE FT.TSK
.IF NE NDH11!NDZ11
; BUILD TABLE FOR INDEXING INTO LCB'S
.EVEN
LCBIDX: Z=0
.REPT 16.
.WORD Z*LC..SZ
Z=Z+1
.ENDR
.ENDC