Google
 

Trailing-Edge - PDP-10 Archives - BB-F492Z-DD_1986 - 10,7/703mon/d36par.mac
There are 26 other files named d36par.mac in the archive. Click here to see a list.
	UNIVERSAL D36PAR - Parameters for DECnet-36


;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  1976, 1985.
;ALL RIGHTS RESERVED.


	SUBTTL V. Brownell & W. Nichols/Tarl

;D36PAR is the universal parameter file for DECnet-36.

	SALL
	SUBTTL	Table of Contents


;		Table of Contents for D36PAR
;
;
;			   Section			      Page
;   1. Table of Contents. . . . . . . . . . . . . . . . . . .    2
;   2. Historical notes . . . . . . . . . . . . . . . . . . .    3
;   3. Feature Tests. . . . . . . . . . . . . . . . . . . . .    4
;   4. MISC CONSTANTS . . . . . . . . . . . . . . . . . . . .    7
;   5. Definitions
;        5.1.   Operating System Dependent. . . . . . . . . .   10
;   6. Macro Definitions
;        6.1.   Queue Management Macros . . . . . . . . . . .   12
;        6.2.   ASSUME - verify symbol values . . . . . . . .   14
;        6.3.   D36SYM - MACSYM fixups. . . . . . . . . . . .   15
;        6.4.   Network management
;             6.4.1.     Error macro. . . . . . . . . . . . .   16
;             6.4.2.     No data macro. . . . . . . . . . . .   16
;             6.4.3.     Success macro. . . . . . . . . . . .   16
;             6.4.4.     Parameters . . . . . . . . . . . . .   17
;             6.4.5.     Counters . . . . . . . . . . . . . .   18
;   7. Structure Definitions
;        7.1.   Queue Header. . . . . . . . . . . . . . . . .   19
;        7.2.   DECnet-36 Initialization Block. . . . . . . .   20
;        7.3.   DECnet-36 Message Descriptor. . . . . . . . .   21
;        7.4.   DECnet-36 Message Block . . . . . . . . . . .   22
;        7.5.   Session Control Link Block. . . . . . . . . .   26
;        7.6.   Session Control Job Block . . . . . . . . . .   27
;        7.7.   NSP Sublink Block . . . . . . . . . . . . . .   28
;        7.8.   NSP LINK Block. . . . . . . . . . . . . . . .   29
;        7.9.   Router Adjacency Block. . . . . . . . . . . .   30
;        7.10.  Router Circuit Block. . . . . . . . . . . . .   31
;        7.11.  DNADLL data link block. . . . . . . . . . . .   33
;   8. Value Definitions
;        8.1.   NSP Port States . . . . . . . . . . . . . . .   36
;        8.2.   DECnet Standard Parameters. . . . . . . . . .   37
;        8.3.   DECnet-wide states. . . . . . . . . . . . . .   38
;   9. Inter-Layer Parameters
;        9.1.   Overall Argument Conventions. . . . . . . . .   39
;        9.2.   Session Control Function Codes. . . . . . . .   40
;        9.3.   NSP Function Codes. . . . . . . . . . . . . .   41
;        9.4.   Session Control/NSP . . . . . . . . . . . . .   42
;        9.5.   NSP/Router. . . . . . . . . . . . . . . . . .   44
;        9.6.   Router/DLL. . . . . . . . . . . . . . . . . .   45
;        9.7.   Layer/NMX (Event logger). . . . . . . . . . .   46
;  10. Network Management
;       10.1.   Argument blocks . . . . . . . . . . . . . . .   47
;       10.2.   NSP and ROUTING VERSION Number Formats. . . .   49
;       10.3.   Values used by NMX. . . . . . . . . . . . . .   50
;       10.4.   NMX Function Block Definition . . . . . . . .   52
;       10.5.   Event Parameters and Argument blocks. . . . .   53
;  11. Test Bed Stuff . . . . . . . . . . . . . . . . . . . .   54
;  12. End of D36PAR. . . . . . . . . . . . . . . . . . . . .   56
	SUBTTL	Historical notes

COMMENT	|

	The DECnet modules were originally written and tested on a
	user-mode test-bed on TOPS10. The modules at that time were
	named according to current architecture names, and TOPS10
	naming conventions. After getting the DECnet code running in
	the TOPS10 monitor, the DECnet modules were integrated into
	TOPS20 (for Release 6.1). The naming conventions used earlier
	were no longer valid because the architecture group renamed
	several of the DECnet layers. To resolve these problems, the
	DECnet modules were renamed to names which avoided the names
	the architecture group didn't want us using any more. The
	result of all this is that several modules have comments and
	labels which do not correspond with the current module name,
	so we supply a mapping table between old names and new names
	to attempt to relieve the confusion:

	Old name(layer)		New name	New layer name

	D36UNV(Universal)	D36PAR		(Universal file)
	D36COM(Common subrs)	D36COM		(Common subroutines)
	NSPSER(Network service)	LLINKS		End Communication Layer
	XPTSER(Transport)	ROUTER		Routing Layer
	SCTPRM(Session Control)	SCPAR		Session control parameters
	SCTCON(Session Control)	SCLINK		Session Control Layer
	SCTUUO(Session Control)	SCMUUO		Session control uuos
	NMXCON(Network Mngmnt.)	NTMAN		Network Management Layer

	In addition, on the -20, we needed an entirely new module for
	the UUO/JSYS level code which was entirely different between
	the -10 and the -20. This module was given the name SCJSYS,
	and is morally equivalent to SCMUUO.

	| ;End of Comment
	SUBTTL	Feature Tests

;Here are the feature tests for DECnet-36.

	FTOPS10==:1		;ASSEMBLE FOR TOPS10
	FTOPS20==:0		;ASSEMBLE FOR TOPS20
	FTPH4==:0		;ASSEMBLE PHASE IV CODE
IFN FTOPS10,<
	FTTRACE==:0		;NON-ZERO TO ENABLE TRACES
	FTMINTRACE==:0		;MINI TRACE (SUBSET OF ABOVE)
	FTDEBUG==:1		;ASSEMBLE WITH DEBUGGING STUFF
	FTPARANOID==:1		;DO EXTRA CAREFUL CHECKING
	FTCORBUG==:0		;FTPARANOID FOR CORE MANGLER. [EXPENSIVE!]
	FTLSTCOR==:1		;NOTE - TO TURN ON FTLSTCOR, SET TO POSITIVE 1.
                                ; LSTCOR TRIES TO TRACE LOST CORE
	FTRTST==:0		;EXCLUDE ROUTER TEST MESSAGE DEFINITIONS
	FTFIXCOR==:0		;FREE BLOCKS ARE NOT PAGE ALIGNED
	FTHMMEM==:0		;DON'T INCLUDE MEMORY REQUEST MAPPER (D36COM)
	FTP4R==:1		;INCLUDE PHASE 4 ROUTER
	FTD36MM==:0		;DON'T INCLUDE "A" BLOCK MEMORY ALLOCATION

;We search NETPRM here to check that parallel definitions are
;properly defined

	SEARCH F,S,NETPRM

.CPYRT<1981,1984>,.

	D36SYM
>;End of IFN FTOPS10


IFN FTOPS20,<
	IFN FTOPS10,<IF2, <PRINTX ?Operating system feature tests screwed up>>

	SEARCH PROLOG,MONSYM

	FTMP==:0		;MULTI-PROCESSOR OFF IN TOPS-20
	FTXMON==:1		;KL PAGING
	FTKS10==:SMFLG		;KS FLAG
	FTKL10==:KLFLG		;KL FLAG
	FTNRT==:0		;NO NRT ON TOPS20
>;End of IFN FTOPS20

	SEARCH	MACSYM

	IFN FTP4R,FTPHA2==:0	;IF NI DLL, DON'T DO PHASE II NODES
	IFE FTP4R,FTPHA2==:1	;ELSE MIGHT AS WELL

;These are the DECnet-36 TOPS-20 AC definitions.

IFN FTOPS20,<
	DEFINE XP(SYM,VAL),<SYM==:VAL> ;DEFINE SYMBOL GLOBAL SUPRESSED TO DDT
	DEFINE XPP(SYM,VAL),<SYM=:VAL> ;DEFINE SYMBOL GLOBAL NOT SUPRESSED

	FREE0==0		;FREE FOR REDEFINITION
				; FREE0 ONLY APPLIES TO AC 0
	XPP T1,1		;TEMPORARIES
	XPP T2,2		; ..
	XPP T3,3		; ..
	XPP T4,4		; ..
	T5==5			;T5 AND T6 USED MAINLY
	T6==6			; FOR EXTENDED INSTRUCTIONS

	MB==7		 	;MESSAGE BLOCK POINTER

	P1==10			;PRESERVED ACS
	P2==11			; ..

	MS==12			;POINTER TO CURRENT MSD FOR DNxyBY
				;ALSO SEE D36SYM CONCERNING THESE REDEFS
	FREE1==13		;FIRST FREE
	FREE2==14		;FREE1,2,ETC CAN BE ANY NON-ZERO AC
	FREE3==15		; THAT IS NOT OTHERWISE DEFINED HERE

	XPP CX,16		;SCRATCH AC

	XPP P,17		;THE STACK POINTER

>
	OPDEF	TRASH	[HRROI 474747] ;SIMPLE PROCEDURE TO LEAVE JUNK IN AN AC

IFN FTOPS20,<
DEFINE TESTS1,<TSTMS0>
> ;END IFN FTOPS20

IFN FTOPS10,<
  DEFINE TESTS1,<
    IFN FTDEBUG,<
      IFN FTXMON,<
	XMOVEI CX,0
	SKIPN CX
	CALL TESTSB		;;COMMON BUG. FOR ALL SECTION 1 ASSERTION FAILS
      >;;END IFN FTXMON
    >;;END IFN FTDEBUG		;;IN D36COM
 >;END DEFINE TESTS1
>;END IFN FTOPS10

IFN FTOPS10,<
	OPDEF  CALLRET [JRST]	; to be defined with CALL and RET
	.NODDT CALLRET

;LOCAL CALL ERROR RETURN

DEFINE RETBAD (ERN,EXTRA)<
	IFNB <ERN'EXTRA>,<
	JRST [	EXTRA
	   IFNB <ERN>,<MOVEI T1,ERN>
		RET]>
	IFB <ERN'EXTRA>,<
	RET>>

;HARDWARE INTERLOCK DEFINITIONS

OPDEF	D36OFF [JSP CX,D36PIF##]
OPDEF	D36ON  [JSP CX,D36PIN##]

;MACROS TO CHANGE SECTION (WILL CALL COROUTINES, TO ENSURE RETURNING TO
;	PROPER SECTION WHEN CURRENT ROUTINE POPJ'S)
;

DEFINE	SEC0,<
IFN FTXMON,<PUSHJ P,SSEC0##>
>

DEFINE	SEC1,<
	SE1ENT
>

DEFINE S0CALL(ROUTINE),<
IFN FTXMON,<
	CALL [	SEC0		;;ROUTINE WANTS TO BE IN SECTION 0
		CALLRET ROUTINE] ;;ROUTINE IN SEC 0, HE WILL POPJ TO SEC N
	>; END IFN FTXMON
IFE FTXMON,<CALL ROUTINE>	;;JUST CALL IT (NO SECTION PROBLEMS)
>; END DEFINE S0CALL

DEFINE DNSNUP(LABEL,%A),<
IFE FTXMON,<
	PUSH P,T1		;;SAVE AN AC
	MOVS T1,LABEL		;;SEE IF BREAKPOINT IS INSERTED
	CAIN T1,(TRN 0)		;;IS IT?
	 JRST %A		;;NO, SAVE LOTS OF OVERHEAD
	POP P,T1		;;YES, RESTORE AC
	PUSHJ P,RGMAP##		;;BREAKPOINT ONLY EXISTS IN MONITOR CONTEXT
>;;FTXMON
LABEL::	TRN			;****LABEL FOR DNSNUP
IFE FTXMON,<
	PUSHJ P,DNPJ1##		;;REENTER DECNET CONTEXT AND SKIP
%A:	 POP P,T1		;;RESTORE AC IF NO BP
>;;FTXMON
>;END DEFINE DNSNUP

MSEC1==(MCSEC1)			;SECTION 1 MONITOR CODE
	SUBTTL MISC CONSTANTS

;MISC CONSTANTS

.INFIN==:377777,,777777		;PLUS INFINITY
.MINFI==:1B0			;MINUS INFINITY
.LHALF==:777777B17		;LEFT HALF
.RHALF==:777777			;RIGHT HALF
.FWORD==:-1			;FULL WORD

>;END OF IFN FTOPS10


IFN FTOPS20,<
	DEFINE D36OFF <PIOFF>
	DEFINE D36ON <PION>

   Repeat 0,< ;Old defs
	DEFINE D36OFF <
	   CONSO PI,77000	    ;;CHECK TO SEE IF AT PI LEVEL
	   NOSKED		    ;;NO, KEEP SCHEDULER OUT TOO
	   CHNOFF DLSCHN
	>
	DEFINE D36ON <
	   CHNON DLSCHN
	   CONSO PI,77000	    ;;CHECK TO SEE IF AT PI LEVEL
	   OKSKED		    ;;NO, MATCH D36OFF'S NOSKED
	>
   >
	DEFINE SYSPIF <		    ;System PIOFF
	   PIOFF
	>
	DEFINE SYSPIN <		    ;System PION
	   PION
	>
	DEFINE SEC0 <S0.ENT>
	DEFINE SEC1 <EA.ENT>
>;END IFN FTOPS20

;Define a mask to strip off area and node from the Phase IV message

	XP RN%ARE,MASK.(^D6,^D25)  ;MASK TO GET AREA
	XP RN%NOD,MASK.(^D10,^D35) ;MASK TO GET NODE


IFN FTOPS10,<

;The following definition of USRSAV is the default.  Redefine it if
;you want.  The calls to SPCSAV have two arguments: the routine name
;and a list of ACs saved by that routine.  The IFDEFs are not needed
;if you are sure the ACs will be defined.

DEFINE USRSAV,<
  IFDEF .FPAC,<
	SPCSAV(.SAV1,.FPAC)
	SPCSAV(.SAV2,<.FPAC,.FPAC+1>)
	SPCSAV(.SAV3,<.FPAC,.FPAC+1,.FPAC+2>)
	SPCSAV(.SAV4,<.FPAC,.FPAC+1,.FPAC+2,.FPAC+3>)
  >
>

EXT <.SAV1,.SAV2,.SAV3,.SAV4>
;THE FOLLOWING MACRO MAY BE USED TO SUPPRESS CREF ENTRIES FOR
;ALL THE JUNK SYMBOLS USED INTERNALLY WITHIN MACROS IN MACSYM

DEFINE .XCMSY <
	.XCREF
	.XCRF1 <..ACT,..CSC,..CSN,..IFT,..JX1,..MSK,..MX1,..MX2>
	.XCRF1 <..NAC,..NRGS,..NS,..NV,..PST,..STKN,..STKQ,..STKR>
	.XCRF1 <..TRR,..TSA1,..TX1,..TX2,..TXAC,.FP,.FPAC,.NAC,.SAC,.SAV1>
	.XCRF1 <.SAV2,.SAV3,POINTR,POS,..LDE,..FLG,WID,..CAS1,..CNS,..CNS2>
	.XCRF1 <..DPB,..GNCS,..ICNS,..JE,..JN,..LDB,..STR0,..STR1,..STR2>
	.XCRF1 <..STR4,..TMO,..TMZ,..TSAC,..TSIZ,..TX,..TY,.ACV1,.ACV2>
	.XCRF1 <..TX1,..TX2,..TXAC,..TX3,..TYNE,..TYNN>
	.XCRF1 <.ACV3,.CASE,.DECR0,.IF0,.INCR0,.OPST1,.OPST2,.STKV1>
	.XCRF1 <.STKV2,.STKV3,.TRV1,.TRV2,.TRV3>
	.XCRF1 <..OLD,...OLD,..BITS,..OFF,..LOC,.LDBE,..LDBE>
	.XCRF1 <..RELO>
	.CREF
   >
DEFINE .XCRF1 (SYMS)<
	IRP SYMS,<
	 IFDEF SYMS,< .XCREF SYMS>>>

>;END OF IFN FTOPS10
	SUBTTL	Definitions -- Operating System Dependent

;The following are some definitions that must be redefined depending upon
;the operating system being used.

;These are the TOPS-20 specific definitions

IFN FTOPS20,<

; $RELOC is kept for compatibility only

DEFINE	$RELOC <
	IF1,<PRINTX %Warning: $RELOC is being phased out>
	>

DEFINE	$HIGH <
	IF1,<PRINTX %Warning: $HIGH is being phased out>
	RESCD
	>

DEFINE	$LOW <
	IF1,<PRINTX %Warning: $LOW is being phased out>
	RESDT
	>

;For code generation, one of the TOPS-20 macros RESCD, RESCD(INIT),
; RESCD(SEC0) or SWAPCD should be used.

;For data declarations, one of the following macros should be used
;
; RESDT		Move to initialized data psect
; RESVR		Move to zeroed data psect
; SWAPVR	Move to swappable zeroed data psect

;Resident or non-resident variables in extended sections must be
; defined in STG; the macros live only within STG

DEFINE	RESVR <
	.ENDPS
	.PSECT RSVAR
	>

DEFINE	SWAPVR <
	.ENDPS
	.PSECT NRVAR
	>

>

IFN FTOPS10,<

;The TOPS-20 code and data generation macros are turned into $HIGH or $LOW
; on the 10.

DEFINE RESCD <$HIGH>
DEFINE SWAPCD <$HIGH>
DEFINE RESDT <$LOW>
DEFINE RESVR <$LOW>
DEFINE SWAPVR <$LOW>

;THE FOLLOWING OPCODES ARE USED TO REFERENCE DATA IN THE 'PREVIOUS
;CONTEXT'.  THE PREVIOUS CONTEXT IS THE USER ADDRESS SPACE IF
;THE JSYS CALL WAS EXECUTED BY A USER PROGRAM, OR THE
;MONITOR ADDRESS SPACE IF IT WAS EXECUTED BY THE MONITOR.
;WHEN WRITING JSYS CODE HOWEVER, IT IS CONVENIENT TO THINK OF THE
;CURRENT CONTEXT AS 'MONITOR' AND THE PREVIOUS CONTEXT AS
;'USER'.  THESE TERMS SHOULD BE UNDERSTOOD IN THIS WAY IN THE
;FOLLOWING DISCUSSION AND IN THE OPDEF'S.

;XCTU IS THE GENERAL CASE AND IS USED FOR ALL ORDINARY (ONE-ADDRESS)
;INSTRUCTIONS.  IF USED FOR BLT, IT WILL CAUSE BOTH SOURCE AND
;DESTINATION TO BE USER.

;XCTUU ARE USED TO BOTH COMPUTE EFFECTIVE ADDRS IN USER AND FETCH
;FROM USER, I.E. - XCTUU [MOVE T1,@T1]

;XBLTMU AND XBLTUM ARE USED WITH BLT TO DO MONITOR-TO-USER
;AND USER-TO-MONITOR BLT'S RESPECTIVELY.  XBLTUU IS ALSO DEFINED
;FOR CONSISTENCY FOR USER-TO-USER BLT.

;XCTBU IS USED WITH BYTE INSTRUCTIONS WHERE POINTER IS IN MONITOR,
;DATA IN USER.  XCTBUU IS BYTE INSTRUCTION WITH POINTER AND DATA
;IN USER (KI10 DOES NOT SUPPORT).

;XPSHUM AND XPOPMU ARE THE ONLY CASES OF PUSH AND POP CURRENTLY USED.
;XPSHUM MEANS PUSH USER-TO-MONITOR, XPOPMU MEANS POP MONITOR-TO-USER, ETC.
;ADDITIONAL SUCH MNEMONICS WILL BE DEFINED IF NEEDED.

OPDEF	XCTU	[XCT 4,0]	;DATA ONLY IS IN PREVIOUS CONTEXT
OPDEF	XCTUU	[XCT 14,0]	;"E" AND DATA FROM PREV. CONTEXT (INCLUDES AC LOOK-UP)


OPDEF	XBLTMU	[XCT 4,0]	;DATA FROM PREVIOUS CONTEXT
OPDEF	XBLTUM	[XCT 1,0]	;DATA TO PREVIOUS CONTEXT
OPDEF	XBLTUU	[XCT 5,0]	;DATA FROM AND TO PREVIOUS CONTEXT
OPDEF	XCTBU	[XCT 3,0]	;EXTENDED BLT - DATA FROM PREVIOUS CONTEXT
OPDEF	XCTBMU	[XCT 1,0]	;BLT - DATA TO PREVIOUS CONTEXT
OPDEF	XCTBUU	[XCT 7,0]	;POINTER,POINTER E AND DATA FROM PREVIOUS CONTEXT

OPDEF	XPSHUM	[XCT 4,0]	;STACK IN PREVIOUS CONTEXT
OPDEF	XPOPMU	[XCT 4,0]	;STACK IN PREVIOUS CONTEXT

.NODDT XCTU,XCTUU,XBLTMU,XBLTUM,XBLTUU,XCTBU,XCTBMU,XCTBUU,XPSHUM,XPOPMU

>;END IFN FTOPS10

	SUBTTL Macro Definitions -- Queue Management Macros

;These macros depend on the data structures QH and QP in NSPUNV.

;Put the block pointed to by BLKPTR at the end of HEADER's queue
;The arguments:	blkptr:	ac that points to block to be queued
;		header: pointer to QH data structure
;		offset: offset into block of forward pointer for this q
;		ac:	a temp ac other than CX, don't count on value


DEFINE ENDQUE(blkptr,header,offset,tempac),<
	OPSTR <SKIPN tempac,>,QHEND,+header
	STOR blkptr,QHBEG,+header
	SKIPE tempac
	STOR blkptr,QPNXT,+offset(tempac)
	STOR blkptr,QHEND,+header
	SETZRO QPNXT,+offset(blkptr)
	INCRQH(header,tempac)
>;END OF DEFINE ENDQUE



;INCRQH is used in LLINKS by the QSRTMB routine as well as by ENDQUE

DEFINE INCRQH(header,tempac),<

IF1,<IFN <QHCNT!QHMAX>+1 + <QHMAX!777777>+1 + QH.CNT - QH.MAX,<
	PRINTX ?BEGSTR QH is defined wrong for INCRQH(header)
>>
	AOS tempac,QH.CNT+header	;;ONE MORE ENTRY ON Q
	HLRZ CX,tempac			;;ISOLATE OLD MAX
	CAIGE CX,(tempac)		;;GOT A NEW MAX?
	HRLM tempac,QH.MAX+header	;;YES, STORE IT
>;END OF DEFINE INCRQH


;DECRQH is separated for symmetry with INCRQH

DEFINE DECRQH(header),<
	DECR QHCNT,+header
>;END OF DEFINE DECRQH
;These macros depend on the data structures QH and QP in NSPUNV.

;Take the first element off a queue and put pointer in designated AC
;The arguments:	ac:	Return pointer to dequeued block here
;		header: pointer to QH data structure
;		offset: offset into block of forward pointer for this q
;		empty:	JRST EMPTY if queue is empty
;		%label:	default this one, of course


DEFINE DEQUE(ac,header,offset,empty),<
	OPSTR <SKIPN ac,>,QHBEG,+header
	JRST empty
	OPSTR <SKIPN CX,>,QPNXT,+offset(ac)
	STOR CX,QHEND,+header
	STOR CX,QHBEG,+header
	DECRQH header
>
;Remove the block pointed to by BLKPTR from HEADER's queue
;The arguments:	blkptr:	ac that points to block to be queued
;		header: pointer to QH data structure
;		offset: offset into block of forward pointer for this q
;		ac:	a temp ac other than CX, don't count on value


DEFINE RMVQUE(blkptr,header,offset,tempac,%lab1,%lab2,%lab3),<
				;;POINT TO HEAD-OF-QUEUE PTR
IFN QPNXT+1,<PRINTX QPNXT muxt be a full word for RMVQUE>
IFN QHBEG+1,<PRINTX QHBEG muxt be a full word for RMVQUE>
IFN QHEND+1,<PRINTX QHEND muxt be a full word for RMVQUE>
	XMOVEI tempac,QH.BEG-QP.NXT-offset+header
%lab1:!
	OPSTR <CAMN blkptr,>,QPNXT,+offset(tempac)
	JRST %lab2		;;FOUND IT, NOW REMOVE IT
	LOAD tempac,QPNXT,+offset(tempac) ;;GET NEXT POINTER
	JUMPE tempac,%lab3	;;NO MORE, CAN'T REMOVE IF NOT THERE
	JRST %lab1		;;NOW TRY THIS ONE
%lab2:!
	SKIPN CX,QP.NXT+offset(blkptr)	;;GET NEXT POINTER
	STOR tempac,QHEND,+header     	;;IF ITS ZERO, UPDATE END PTR
	STOR CX,QPNXT,+offset(tempac) 	;;STORE IT IN PREVIOUS BLOCK
	SKIPN tempac,QH.BEG+header    	;;IF LIST IS NOW EMPTY
	STOR tempac,QHEND,+header     	;; THEN ZERO END PTR TOO FOR ENDQUE
	DECRQH header		;;DECREMENT THE Q COUNTER
%lab3:!
>;END OF RMVQUE MACRO

	SUBTTL	Macro Definitions -- ASSUME - verify symbol values

;Assume macro verifies a relation between two values
	DEFINE ASSUME(A,B,C) <
	IFIDN <B><EQ>,<IFN <A> - <C>,<IF1 <PRINTX ?ASSUME failed: 'A 'B 'C>>>
	IFIDN <B><NE>,<IFE <A> - <C>,<IF1 <PRINTX ?ASSUME failed: 'A 'B 'C>>>
	IFIDN <B><GT>,<IFLE <A> - <C>,<IF1 <PRINTX ?ASSUME failed: 'A 'B 'C>>>
	IFIDN <B><LT>,<IFGE <A> - <C>,<IF1 <PRINTX ?ASSUME failed: 'A 'B 'C>>>
	>

	SUBTTL	Macro Definitions -- D36SYM - MACSYM fixups

;D36SYM should be called by DECnet-36 modules which call TOPS-20's
;MACSYM universal after SEARCHing MACSYM and D36PAR.  It redefines
;those variables, macros and OPDEFs from MACSYM which do not fit into
;the DECnet-36 environment as defined in MACSYM.

IFE FTOPS10,<DEFINE D36SYM,<PURGE P3,P4>>

	SUBTTL	Macro Definitions -- Network management -- Error macro

;Define error macro that works like RETBAD, except that it understands
; negative error codes

DEFINE RNMXER (ERN,EXTRA)<
	IFNB <ERN'EXTRA>,<
	JRST [	EXTRA
	   IFNB <ERN>,<MOVX T1,ERN>
		RET]>
	IFB <ERN'EXTRA>,<
	RET>>

	SUBTTL	Macro Definitions -- Network management -- No data macro

;Define macro that returns a 'no data present' code

DEFINE RNMXND <
	JRST [	MOVX T1,NF.NDP
		RET]
>

	SUBTTL	Macro Definitions -- Network management -- Success macro

;Define success macro that does a return with success code loaded into T1

DEFINE RNMXOK <
	JRST [	MOVX T1,NF.FCS
		RET]
>

	SUBTTL	Macro Definitions -- Network management -- Parameters

;The PA structure is used to keep the information for a DECnet network
;management parameter.  It is pointed to by a table, generated with the
;PARAMETER macro.  This structure is read by the routine NTPARM in D36COM.

	BEGSTR PA
		WORD PNR	;Parameter #
		FIELD FLA,5	;Flag field
	  	  BIT NST	;Cannot set this parameter
		  BIT NCL	;Cannot clear this parameter
		  BIT NRD	;Cannot read this parameter (Write only memory)
		  BIT BEX	;Buffer from NTMAN expected
		  BIT DRC	;Don't range check "set" value
		FILLER 13
		HWORD DEF	;Default value for parameter
		HWORD MAX	;Maximum value that can be set
		HWORD MIN	;Minimum value that be set
		WORD SET	;Instruction to execute to set the parameter
		WORD RED	;Instruction to execute to read the parameter
		WORD CLR	;Instruction to execute to clear the parameter
	ENDSTR

;The PARAMETER macro generates one entry in the parameter table
;Make sure that the assumtions are valid
	ASSUME PAPNR,EQ,-1
	ASSUME PA.PNR,EQ,0
	ASSUME PADEF,EQ,<0,,-1>
	ASSUME PA.NST,EQ,1
	ASSUME PA.NCL,EQ,1
	ASSUME PA.NRD,EQ,1
	ASSUME PA.DEF,EQ,1
	ASSUME PA.MAX,EQ,2
	ASSUME PA.MIN,EQ,2
	ASSUME PA.SET,EQ,3
	ASSUME PA.RED,EQ,4
	ASSUME PA.CLR,EQ,5
;Define PARAMETER macro
DEFINE PARAMETER (NR,XFLAG,XMAX,XMIN,XDEF,XSET,XREAD,XCLEAR,COMNT) <
   IFB <XFLAG>,<FLAG==0>
   IFNB <XFLAG>,<FLAG==XFLAG>
   IFB <XMAX>,<MAX==^D65535>
   IFNB <XMAX>,<MAX==XMAX>
   IFB <XMIN>,<MIN==0>
   IFNB <XMIN>,<MIN==XMIN>
   IFB <XDEF>,<DEF==0,,-1>
   IFNB <XDEF>,<DEF==XDEF>
   IFE <<CURPSX-PXRESCD>*<CURPSX-PXSWAPCD>>,<
	XCDSEC,,[NR>
   IFN <<CURPSX-PXRESCD>*<CURPSX-PXSWAPCD>>,<
	 MSEC1,,[NR>
		FLAG!DEF
		XWD MAX,MIN
  IFNB <XSET>, <XSET>
   IFB <XSET>, <TRN>
 IFNB <XREAD>, <XREAD>
  IFB <XREAD>, <TRN>
 IFNB <XCLEAR>,<XCLEAR>
 IFB <XCLEAR>, <TRN> ]
>

	SUBTTL	Macro Definitions -- Network management -- Counters

;The CT structure is used to keep the information for a DECnet network
;management counter.  It is pointed to by a table, generated with the
;COUNTER macro.  This structure is read by the routine NTCTRS in D36COM.

	BEGSTR CT
		FIELD BMF,1	;Bit map flag
		FIELD HDR,35	;Counter width, number
		WORD RED	;Instruction to execute to read the counter
		WORD CLR	;Instruction to execute to clear the counter
		WORD BMP	;Instruction to execute to get the bit map
	ENDSTR

;The COUNTER macro generates one entry in the counter table
;First make sure that the COUNTER macros assumptions are valid
	ASSUME CTRED,EQ,-1
	ASSUME CT.RED,EQ,1
	ASSUME CTCLR,EQ,-1
	ASSUME CT.CLR,EQ,2

;Now define COUNTER macro
DEFINE COUNTER(NR,WIDTH,ACCESS,CLEAR,BMACC,COMMENT) <

  IFNB <BMACC>,<FLAG==<CTBMF_-^D18>>
   IFB <BMACC>,<FLAG==0>

   IFE <<CURPSX-PXRESCD>*<CURPSX-PXSWAPCD>>,<
	XCDSEC,,[XWD FLAG!WIDTH,NR>
   IFN <<CURPSX-PXRESCD>*<CURPSX-PXSWAPCD>>,<
	MSEC1,,[XWD FLAG!WIDTH,NR>
		ACCESS
 IFNB <CLEAR>, <CLEAR>
 IFB <CLEAR>,  <TRN>
 IFNB <BMACC>, <BMACC> ]
>

	SUBTTL	Structure Definitions -- Queue Header

;See macros ENDQUE, DEQUE and RMVQUE for examples of QH uses.
;LLINKS also uses these definitions in its QSRTMB routine

;When a queue is emptied, DEQUE assures that the QHBEG pointer, the
;QHEND pointer and the QHCNT count will be zero.

BEGSTR QH
	WORD BEG		;THESE MAY BE MADE LESS THAN FULL WORDS
	WORD END		; IF NEED BE AND FULL-WORD ADDRESSING
				; IS NOT REQUIRED.
	HWORD MAX		;MAX LENGTH QUEUE EVER GOT
	HWORD CNT		;CURRENT LENGTH OF QUEUE
ENDSTR


;Structure QP, queue pointer, is included to emphasize the fact that
;ENDQUE and DEQUE expect the forward pointer in a block to be a full
;word, and to simplify the addition of backward pointers should that
;become desirable.

;Note that the message block does not use QP, since it is in the
;universal file, not in LLINKS.  There is a comment in the definition
;of the message block pointing out that the forward pointer must be a
;full word for LLINKS.

BEGSTR QP
	WORD NXT		;POINTER TO NEXT BLOCK ON QUEUE
ENDSTR

;Byte pointer and count structure. Routines DNGUBY, DNPUBY, and
;all related DNGUnB require a pointer to this type of structure.
;All byte pointers are section local (for the moment)

BEGSTR BP
	WORD BPT		;BYTE POINTER TO USER STRING
	WORD BYT		;BYTE COUNT LEFT
ENDSTR

;DNGUBY will return an error of NEPAM% if the count BPPYT runs out,
;DNPUBY will return an error of NEPVL% if the count runs out,
;and both will return NEADC% if they get an addressing error of
;any kind.

	SUBTTL	Structure Definitions -- DECnet-36 Initialization Block

;The initialization block is the argument to all DECnet-36 initialization
; routines.  It is set with NODE% jsys functions, and read by the various
; DECnet layers during and after initialization.

	BEGSTR IB
		FIELD PH2,1	;Set if Phase II desired
		FILLER 1
		FIELD RTR,4	;Routing type: one of
				; RNT.L1 Level-1 router
				; RNT.NR Endnode
		FIELD FCM,2	;Default flow control
		WORD NAM	;Executor node name (in sixbit)
		WORD ADR	;Executor node address (16-bit address)
		WORD MXA	;Maximum address
		WORD MXB	;Maximum buffers
		WORD DGL	;Default goal
		WORD DBL	;Default # of buffers per link
		WORD BIP	;Buffer input percentage
		WORD BSZ	;Buffer size
	ENDSTR

;Router type from field IBRTR

	XP RNT.L2,3		;LEVEL 2 ROUTER
	XP RNT.L1,4		;LEVEL 1 ROUTER
	XP RNT.NR,5		;NON-ROUTING
	SUBTTL	Structure Definitions -- DECnet-36 Message Descriptor

;This is the DECnet-36 Message Segment Descrpitor.  Every Segment of
;the message is described by this small block.  In the typical case,
;this descriptor resides in the owner's (the owner being a level of
;DECnet) portion of the Message Block.
;
;NSP's message trace facility (TRCMSG) makes illicit use of the MSD
;fields and of the nature of the position value returned by DNRPOS.
;The trace program DNTATL also knows about the structure of the MSD.
;
;Note that DTESER and D8KINT 'know' that all the fields in the MSD
;are full-words.

BEGSTR MD		;Input Meaning,      ;Output Meaning
	WORD NXT,QP.LEN	;MUST BE ZERO        ;PTR TO NEXT MSD
	WORD PTR	;ILDB PTR INTO MSG   ;IDPB PTR INTO MSG
	WORD AUX	;NOT USED            ;ILDB PTR TO BEG OF MSG
	WORD BYT	;BYTES LEFT TO READ  ;BYTES WRITTEN SO FAR
	FIELD VMC,3	;VIRTUAL MAP CONTEXT
		VMC.XC==:0	;EXEC Context (Map through EPT)
		VMC.US==:1	;USER Context (Map through UPT)
		VMC.NO==:2	;DO NOT Map (Physical Address)
	HWORD ALL	;ALLOCATED LENGTH IN BYTES
	WORD ALA	;ALLOCATED ADDRESS OF SEGMENT'S DATA
ENDSTR
	SUBTTL	Structure Definitions -- DECnet-36 Message Block

;The following is the definition of the DECnet-36 Message Block.  This is
;the fundamental data structure used to represent an individual message.
;The Message Block is divided up into a public section and several private
;sections which belong to each of the layers of the DECnet architecture.

;The Public Section

BEGSTR MB
	WORD NXT		;PTR TO NEXT MESSAGE.  MUST BE FULL
				; WORD FOR NSP, SEE BEGSTR QP IN LLINKS.MAC
	WORD FMS		;POINTER TO FIRST MSD (DLLs
				; EXPECT THIS FIELD TO BE RIGHT HERE)
	WORD MSN		;DDCMP MESSAGE NUMBER (DLLs
				; EXPECT THIS FIELD TO BE RIGHT HERE)
	HWORD DST		;DESTINATION NODE
	HWORD SRC		;SOURCE NODE
	WORD DS1		; FIRST 32 BITS OF DESTINATION
	WORD SR1		; FIRST 32 BITS OF SOURCE
	FIELD FLG,9		;FLAGS
	  BIT OTH		;ON THE "OTHER" SUBLINK
	  BIT BOM		;BEGINNING OF MESSAGE
	  BIT EOM		;END OF MESSAGE
	  BIT EBF		;MESSAGE BLOCK HAS BEEN ALLOCATED FROM
				; EMERGENCY BUFFER FREE LIST
	  BIT PH2		;PHASE II MESSAGE
	  BIT DON		;"SYNCHRONOUS" INTERLOCK DONE BIT (NSP & SC)
	  BIT LCL		;BOUND FOR THE LOCAL NSP
	  BIT UNR		;UNREACHABLE

	FIELD VST,9		;VISITS COUNT
	HWORD ABS		;Adjacency's block size
	WORD CHN		;LOOPBACK CHANNEL (CIRCUIT ID)
	WORD PRC		;PROCEDURE PROCESSOR (NSP & SC)
	WORD AR1		;ARGUMENT STORAGE #1 (NSP & SC)
	WORD AR2		;ARGUMENT STORAGE #2 (NSP & SC)
	WORD AR3		;ARGUMENT STORAGE #3 (NSP & SC)
ENDSTR
;Router's Section

	RMH.LN==^D 21		;BYTES FOR RTR HEADER

BEGSTR RM,MB.LST
	WORD OCP		;OUTPUT CIRCUIT BLK PTR
	WORD ICP		;INPUT CIRCUIT BLK PTR
	WORD OAP		;OUTPUT ADJACENCY POINTER
	WORD IAP		;INPUT ADJACENCY POINTER
	FILLER 1		;FILLER SO THAT FST FITS BETTER
	FIELD FST,8		;FIRST BYTE IN MESSAGE
				;** THIS ORDER MUST BE ENFORCED **
				;Phase III definitions
	  BIT MZ1		; RESERVED (MUST BE ZERO)
	  BIT EVL		; EVOLUTION BIT (RESERVED)
	  BIT MZ2		; RESERVED (MUST BE ZERO)
	  BIT RTS		; BEING RETURNED TO SENDER
	  BIT RQR		; RETURN REQUESTED
	  BIT MZ3		; RESERVED (MUST BE ZERO)
	  BIT MB1		; RESERVED (MUST BE ONE)
	  BIT CTL		; CONTROL MESSAGE (NOT DATA)
;
; Redefine the bits for the Phase IV packet format

;	SYNSTR RMPFD,RMMZ1 ;PAD FIELD
;	SYNSTR RMVER,RMEVL ;VERSION (1 IF PHASE II)
;	SYNSTR RMINP,RMMZ2 ;INTRA-NI PACKET
;	SYNSTR RMLGF,RMMZ3 ;LONG FORMAT HEADER

	FIELD CTY,3		; CONTROL MESSAGE TYPE
	FIELD FLG,5		;FLAG FIELD
	  BIT ODN		; LOCAL NSP DOESN'T WANT THIS LOCAL MESSAGE
				;  "ODN"ED
	  BIT PH2		;MESSAGE SEEMS TO BE PHASE II
	  BIT TRY		;NSP wants Router to "TRYHARD" on the NI
	  BIT TST		;This is a test message
	  BIT DRM		;This message should be resent to multicast
				; "All-Endnodes"
	WORD MSD,MD.LEN		;ROOM FOR RTR MESSAGE DESCRIPTOR

;Note that the HDR field is only used on output and that the marks
;are only used on input, so they occupy the same space.

	WORD HDR,<<RMH.LN+3>/4> ;RTR HEADER ROOM (** OUTPUT ONLY **)
	WORD MK1		;FIRST MARK
	WORD MK2		;SECOND MARK
ENDSTR
;Network Services Section

	NMH.LN==^D 12		;LENGTH OF HEADER SPACE (BYTES)
				;** MUST BE AT LEAST 2 WORD FOR MARKS

BEGSTR NM,RM.LST
	FIELD FLG,6		;FLAGS
	  BIT ACK		;NEEDS TO BE ACKED
	  BIT RET		;RETURN MSG TO SC
	  BIT DLY		;ACK DELAY ALLOWED
	FIELD SGN,12		;MESSAGE SEGMENT NUMBER
	FIELD MGF,9		;THE MSGFLG FIELD OF THE NSP HEADER
	FIELD CNT,9		;# OF TIMES WE'VE SENT MESSAGE
	WORD TIM		;TIME STAMP
	WORD PRT		;PTR TO PORT BLOCK
	HWORD LLA		;LOCAL LINK ADDRESS
	HWORD RLA		;REMOTE LINK ADDRESS
	WORD MSD,MD.LEN		;SPACE FOR MSD

	WORD ORQ,QP.LEN		;ORQ queue link
	WORD MAG		;Magic word for DTESRV

;Note that the HDR field is only used on output and that the marks
;are only used on input, so they occupy the same space.

	WORD HDR,<<NMH.LN+3>/4> ;NSP HEADER ROOM
	WORD MK1		;FIRST MARK
	WORD MK2		;SECOND MARK
ENDSTR
;Here is the User Data Area

	UDH.LN==^D16		;BYTES OF USER DATA KEPT IN MSG BLK

BEGSTR UD,NM.LST
	WORD MSD,MD.LEN		;SPACE FOR MSD
	WORD DAT,<<UDH.LN+3>/4>	;ROOM FOR 16 BYTES ALWAYS AVAILABLE
ENDSTR

	MB.LEN==UD.LST		;REDEFINE LENGTH OF MB

;We make use of the User Data MSD (UD.MSD) as the input MSD (on input
;all the message data is in one MSD.  References to the input MSD
;should use the symbol IN.MSD.
;
	XP IN.MSD,UD.MSD	;DEFINE THE INPUT MSD
;
;We will also define a first MSD (FI.MSD), which will most likely be
;RM.MSD (the router MSD), although all references to it should be
;to FI.MSD.
;
	XP FI.MSD,RM.MSD	;FIRST MSD IN A MESSAGE BLOCK
;
;The following fields are used to pass the NSP.  UUO arguments from
;SCxUUO and SCLUUO to SCLINK.  When SCLINK returns control back to
;SCxUUO, it changes these arguments and expects SCxUUO to change them
;in the user's argument block.  These arguments are stored over the
;private portions of the message block.
;
;When Session Control uses a message block like this, it can never be
;used as a conventional message block (i.e.  with MSDs, etc.).

BEGSTR SA,MB.LST		;START RIGHT AFTER PUBLIC PORTION OF MB
	FIELD FLG,6		;FLAGS (NOTE: THESE MUST BE IN
				; THE SAME ORDER AS NSWAI AND NSEOM)
	  BIT WAI		; WAIT IF USER WANTS (CHECK NS.WAI)
	  BIT EOM		; END OF MESSAGE FLAG
	  BIT BOM		; BEGINNING OF MESSAGE FLAG
	  BIT KCB		; KEEP CONNECT BLOCK FOR LIFE OF LINK
	  BIT BLK		; HIBER ROUTINE HAS BLOCKED.
				;Room for future MONUSR flags 
	FIELD MFG,6		;MONUSR FLAGS, NOT PART OF SAFLG!
	  BIT EVA		; USER BUFFER IN EXEC VIRTUAL ADDR SPACE
	  BIT SAT		; DATA READ SATISFIED
				;Room for future monitor flags
	HWORD ERR		;PLACE TO STORE ERROR RETURN
	HWORD NAG		;NUMBER OF USER ARGUMENTS SUPPLIED
	HWORD AFN		;FUNCTION CODE
	HWORD AST		;STATUS VARIABLE
	HWORD ACH		;CHANNEL OR JOB NUMBER
	WORD AA1		;ARGUMENT ONE
	WORD AA2		;ARGUMENT TWO
	WORD AA3		;ARGUMENT THREE
	WORD SBP		;POINTER TO STRING BLOCK
	WORD CBP		;POINTER TO CONNECT BLOCK
	WORD BCT		;BUFFER BYTE COUNT
	WORD BPT,2		;BUFFER BYTE POINTER (POSSIBLY EXTENDED)
	WORD SJB		;POINTER TO SESSION CONTROL JOB BLOCK
	WORD SLB		;POINTER TO SESSION CONTROL LINK BLOCK
	WORD SLT		;Indirect table entry this SAB belongs in

	WORD HBA		;ADDRESS OF ROUTINE TO PERFORM HIBER
	WORD WKA		;ADDRESS OF ROUTINE TO PERFORM WAKE

	WORD UID		;SLB'S SERIAL NUMBER - FOR STALE DETECTION
ENDSTR

IFG <SA.LST-MB.LEN>,<IF2,<PRINTX ?Session Control SA structure is longer
			  PRINTX ? than a message block.>>
SA.LEN==SA.LST+1		;MAKE SA.LEN INCLUDE MB.LEN
	SUBTTL	Structure Definitions -- Session Control Link Block

;This is the sub-link block.  There are two of these in the SL block, one
;for the normal sub-link and one for the other sublink.

BEGSTR SS
	FIELD FLG,18		;FLAG FIELD
	  BIT OTH		;INDICATES THIS IS THE "OTHER" SUB-LINK
	FIELD XDO,9		;SUBLINK TRANSMIT DRQS OUTSTANDING
	FIELD RDO,9		;SUBLINK RECEIVE DRQS OUTSTANDING
	WORD INQ,QH.LEN		;SUBLINK INPUT QUEUE
ENDSTR


;This is the Session Control Link Block.  It contains all the per-logical
;link data.

BEGSTR SL			;SESSION CONTROL LINK BLOCK
	WORD ASQ		;NEXT SLB ON ALL SLBs QUEUE
	WORD NXP		;NEXT SLB WITH ACTIVE PSI
	WORD JFQ		;NEXT SLB WITH ACTIVE JIFFY REQUEST
	WORD SLB		;CHECK POINTER TO THIS SLB
	WORD SJB		;POINTER TO JOB BLOCK (SJB)
	WORD CHN		;CHANNEL NUMBER (STARTS AT 1)

	HWORD DOB		;DESTINATION OBJECT TYPE
	HWORD SOB		;SOURCE OBJECT TYPE

	FIELD FLG,18		;FLAG FIELD
	  BIT CCB		; CHECK CONNECT BLOCK
	  BIT KCB		; KEEP CONNECT BLOCK FOR LIFE OF LINK
	  BIT PSI		; PSI PENDING FLAG
	  BIT PH2		; PHASE II HAS NO RESEND CAPABILITY
	  BIT ABO		; TRYING TO CLOSE AFTER ABORT & RELEASE
	  BIT FSL		; FREE THE SLB WHEN DONE WITH ALL PROCESSING
	  BIT BSY		; SLB IS BUSY (CANNOT BE FREED)
	  BIT LBC		; LINK IS BEING CLOSED BY NSP
	  BIT JFR		; JIFFY REQUEST OUTSTANDING
	  BIT EOM		; LAST SEGMENT OUTPUT WAS END OF MESSAGE
	  BIT PAS		; Set if this SLB belongs to a passive task

	FIELD STA,6		;SESSION CONTROL STATE
	FIELD XFL,3		;TRANSMIT FLOW CONTROL OPTION
	FIELD RFL,3		;RECEIVE FLOW CONTROL OPTION

	HWORD GOL		;RECEIVE DATA REQUEST GOAL

	HWORD INQ		;INPUT QUOTA FOR LINK
	HWORD OTQ		;OUTPUT QUOTA FOR LINK
	HWORD INU		;INPUT BUFFERS IN USE
	HWORD OTU		;OUTPUT BUFFERS IN USE

	HWORD SST		;LINK STATUS WORD
	HWORD PSM		;THE PSI MASK

	WORD NSL,SS.LEN		;"NORMAL" SUBLINK
	WORD OSL,SS.LEN		;"OTHER" SUBLINK

	HWORD DRR		;NORMAL DATA REQUESTS TO RESEND AT CLOCK LEVEL
	HWORD RSN		;REASON CODE OF DISCONNECT OR REJECT (16 BITS)

	WORD PID		;NSPpid OF PORT

	HWORD DNA		;DESTINATION NODE ADDRESS
	HWORD SIZ		;SEGMENT SIZE IN BYTES

	WORD CTM		;CONNECT INITIATE TIMER
	WORD WKA		;ADDRESS OF WAKEUP ROUTINE
	WORD CDM		;PTR TO CONNECT/DISCONNECT MESSAGE
	WORD CBP		;POINTER TO CONNECT BLOCK FOR PASSIVE TASK
	WORD OTM		;PTR TO PARTIALLY FILLED OUTPUT MESSAGE

	WORD UID		;SERIAL NUMBER - FOR STALE DETECTION

	HWORD BYS		;User bytes sent
	HWORD BYR		;User bytes received

	HWORD PKS		;PACKETS SENT OUT
	HWORD PKR		;PACKETS RECIEVED
ENDSTR
	SUBTTL	Structure Definitions -- Session Control Job Block

;We allocate SLT.LN number of channels in the channel table in the SJB
;itself.  When a job has more than SLT.LN channels open, we allocate
;the table from free core.
;
	XP SLT.LN,4		;LENGTH OF INITIAL SLB TABLE
;
;There is one Session Control Job Block for every job with an open
;logical link on the system.

BEGSTR SJ			;SESSION CONTROL JOB BLOCK
	WORD NXT		;NEXT JOB BLOCK IN SYSTEM
	WORD CHT		;PTR TO SLB TABLE (INDEXED BY CHANNEL)
	WORD CHC		;COUNT OF SPACES ALLOCATED IN SLB TABLE
	WORD PSJ		;POINTER TO SYSTEM'S POINTER TO THE SJB
				; THIS POINTS TO PDBSJB ON TOPS-10 AND
				; IS USED FOR RESET PROCESSING

	FIELD FLG,9		;FLAGS FIELD
IFN FTOPS20,BIT BLK		;(20  )THIS FORK IS BLOCKED
IFN FTOPS10,BIT PRV		;(10  )USER IS PRVJ PRIVILEGED
	  BIT RST		;(both)RESET IN PROGRESS
IFN FTOPS10,FIELD JOB,9		;(10)JOB NUMBER
IFN FTOPS20,FIELD FRK,9		;(20)FORK NUMBER
	HWORD CTA		;NUMBER OF CI TIMERS ACTIVE FOR JOB

	WORD SLT,SLT.LN		;INITIAL SLB TABLE
	WORD TXQ,QH.LEN		;TRANSACTION QUEUE OF LLINKS CALLS
	WORD PSQ,QH.LEN		;QUEUE OF SLBs WITH PSIs OUTSTANDING

;Note that the following two quotas are copied in SCUUO from the PDB's
;information about the job quotas

	HWORD GOL		;INPUT DATA REQUEST GOAL
	HWORD INQ		;JOB INPUT QUOTA
	HWORD OTQ		;JOB OUTPUT QUOTA
	HWORD INU		;BUFFERS USED TOWARD INPUT QUOTA BY JOB
	HWORD OTU		;BUFFERS USED TOWARD OUTPUT QUOTA BY JOB

	WORD SAB		;SA BLOCK POINTER
IFN FTOPS10,WORD MUU		;(10)SAVE MUUO WORD HERE FOR STOTAC, ETC
IFN FTOPS20,<
	WORD PRT		;(20)Pointer to the port indirect table
	WORD MXP		;(20)Number of slots in port table
> ;End of FTOPS20
ENDSTR
	SUBTTL Structure Definitions -- NSP Sublink Block

;The Sublink Block is part of the link block.  It holds the information
;about the "normal" and the "other" sublinks.
;
;The structure name ES is used instead of the more obvious NS
;(NSP Sublink) to avoid a conflict with the other NS structure
;defined in this universal file.  The "E" stands for the new
;name for the NSP layer: "End-to-end" layer.

BEGSTR ES
	FIELD FLG,12		;FLAGS, KEEP FIELD MOD 3 WIDE FOR DDT
	  BIT OTH		;SET IF THIS IS OTHER SUBLINK
	  BIT ACK		;SEND ACK FOR THIS SUBLINK NEXT JIFFY
	  BIT NAK		;SEND NAK TO PH2 NSP (TURN ACK ON TOO)
	  BIT ROF		;RECEIVE IS OFF
	  BIT ROC		;RECEIVE OFF HAS CHANGED
	  BIT XOF		;XMIT IS OFF
;	  BIT XOC		;XMIT OFF HAS CHANGED (NOT USED)
	  BIT BFR		;REMOTE IS "BUFFER-RICH" ON THIS LINK
	  BIT DLY		;ACK DELAYING ALLOWED
	FILLER 1		;MAKE FOLLOWING FIELD PRETTY FOR DDT
	FIELD RFL,2		;RECEIVE FLOW CONTROL TYPE
	FILLER 1		;MAKE FOLLOWING FIELD PRETTY FOR DDT
	FIELD XFL,2		;XMIT FLOW CONTROL TYPE
	FIELD GOL,9		;DATA REQUEST GOAL (9 FOR DDT EASE)
	FIELD CGL,9		;AFTER-CONGESTION RECOVERY GOAL

	NXTWRD
	FIELD XLD,8		;XMIT DRQS OUTSTANDING TO LOCAL SC
	FIELD XRD,8		;XMIT DRQS OUTSTANDING TO REMOTE NSP
	FIELD XSD,8		;XMIT DRQS NEED TO SEND TO SC

	NXTWRD
	FIELD RLD,8		;RECEIVE DRQS OUTSTANDING TO LOCAL SC
	FIELD RRD,8		;RECEIVE DRQS OUTSTANDING TO REMOTE NSP
	FIELD RSD,8		;RECEIVE DRQS NEED TO SEND TO SC

	NXTWRD
	FIELD LMA,12		;LAST MESSAGE NUMBER ASSIGNED
	FIELD LAR,12		;LAST ACK RECEIVED (AND PROCESSED)
	FIELD LMR,12		;LAST MESSAGE RECEIVED

	WORD AKQ,QH.LEN		;QUEUE HEADER FOR THE TO-BE-ACKED Q
	WORD RCQ,QH.LEN		;QUEUE HEADER FOR THE RECEIVE Q
	WORD XMQ,QH.LEN		;QUEUE HEADER FOR THE XMIT Q

	FIELD CWS,12		;Current window size
	FIELD CDA,12		;# of ACKs since last window change
	FIELD DLT,12		;ACK delay timer

ENDSTR
 	SUBTTL Structure Definitions -- NSP LINK Block

;The Link Block holds all the NSP information about this logical link.

BEGSTR EL
	WORD APQ,QP.LEN		;NEXT IN QUEUE OF ALL LINK BLOCKS
	WORD HBQ,QP.LEN		;NEXT IN QUEUE OF LINKS IN A HASH BUCKET
	WORD JFQ,QP.LEN		;NEXT IN QUEUE OF LINKS NEEDING JIFFY SERVICE
	FIELD FLG,9		;FLAGS, MOD 3 NUMBER OF BITS FOR DDT
	  BIT OJQ		;LINK IS ON THE JIFFY-REQUEST QUEUE
	  BIT SNC		;SET IF NOT YET TOLD SC ABOUT NO CONF
	  BIT CNF		;SET IF WE HAVE CONFIDENCE IN LINK
	  BIT SCM		;SEND CONNECT ACK MESSAGE NEXT JIFFY
	  BIT SDM		;SEND DISCONNECT CONFIRM MESSAGE NEXT JIFFY
	  BIT ABO		;ABORTING THIS LOGICAL LINK
	  BIT DTO		;DELAY TIMER IS FOR "OTHER" SUBLINK
	FIELD STA,6		;NSP STATE OF THIS LINK
	HWORD SIZ		;MAX SIZE OF A SEGMENT ON THIS LINK

	HWORD LLA		;LOCAL LINK ADDRESS
	HWORD RLA		;REMOTE LINK ADDRESS

	WORD ORQ,QH.LEN		;Queue header for MBs sent to ROUTER and
				; expected to be returned to LLINKS
	WORD CLC		;Count of retries left, trying to close a
				; port waiting for MBs to be returned from
				; ROUTER and children.

	HWORD ORC		;COUNT OF MSGS OUT IN ROUTER
	FIELD VER,3		;VERSION OF REMOTE NSP, SEE VER3.1,VER3.2
	FILLER 3		;MAKE DTM RIGHT JUSTIFIED FOR DDT
	FIELD DSG,12		;MSG SEGMENT BEING TIMED FOR DELAY CALC
				; (MUST BE SEGNUM-SIZE FIELD FOR CMODxx)
	WORD DTM		; AND TIME IT WAS FIRST SENT

	HWORD NNM		;THE REMOTE'S NODE NUMBER
	WORD NDB		;PTR TO NSP NODE BLOCK

	WORD TMA		;INACTIVITY TIMER
	WORD SCV		;SESSION CONTROL CALL VECTOR BASE ADDRESS
	WORD SCB		;SESSION CONTROL BLOCK ID
	WORD CIM		;Ptr to (R)CI message
	WORD DIM		;PTR TO DI MESSAGE
	WORD NSL,ES.LEN		;THE NORMAL SUBLINK BLOCK
	WORD OSL,ES.LEN		;THE OTHER SUBLINK BLOCK


	WORD CIR		;OUTPUT CIRCUIT FOR LOOPBACK CONNECTION

	WORD CHK		;ADDRESS OF THIS EL, FOR ADDR CHECK
ENDSTR

	SUBTTL	NSP Node Block Definition

;Note - many counters are full words, even though they only have to be
; 16 bits wide. This is so the OPSTR logic will generate a single
; read-modify-write instruction when updating them, and will spare
; us the worry of interlocking this data base.

BEGSTR NN			;NETWORK NODE BLOCK
	WORD  NXT,QP.LEN	;PTR TO NEXT NODE BLOCK

	WORD TLZ		;Time (from DNGTIM) when last zeroed

	FIELD FLG,2		;MAKE NNNOD RIGHT-JUST IN HALF-WORD
	  BIT GDL		;SET IF WE'VE "GOT DELAY", SEE UPDELAY
	FIELD MSG,1		;Set if we've sent a 'link broken' message
				; for this node
	FILLER 15

	HWORD NOD		;NETWORK NODE ID (2 BYTES) (HWORD for speed)

	WORD TMC		;MESSAGE TIMEOUTS TO NODE

	WORD RBC		;User bytes received from node
	WORD XBC		;User bytes transmitted to node
	WORD RMC		;User msgs received from node
	WORD XMC		;User msgs transmitted to node

	WORD TBR		;Total # of bytes received from node
	WORD TBX		;Total # of bytes transmitted to node
	WORD TMR		;Total # of messages received from node
	WORD TMX		;Total # of messages received from node

	WORD RCC		;CONNECT INITS RECEIVED FROM NODE
	WORD XCC		;CONNECT INITS TRANSMITTED TO NODE

	WORD RRC		;REJECTS RECEIVED FROM NODE
	WORD XRC		;REJECTS TRANSMITTED TO NODE

	WORD LKC		;CURRENT ACTIVE LINKS TO NODE
	WORD LKM		;MAX ACTIVE LINKS TO NODE

	WORD CRC		;CONNECT RESOURCE ERRORS RECEIVED
	WORD DLY		;ESTIMATED ROUND-TRIP DELAY (MSECS)

	WORD SLZ		;SECONDS SINCE LAST ZEROED (TIME STAMP)

	WORD PSZ		;Pipe size (= 3 * last message's visit count)
ENDSTR

	SUBTTL  Structure Definitions -- Router Adjacency Block
BEGSTR AJ
	WORD NXT		;Pointer to next adjacency block

	FIELD STA,2		;Adjacency state
	FIELD NTY,4		;Neighbor node type

	FIELD FLA,6		;Flag field
	  BIT PH4		;Phase 4 node
	  BIT VRQ		;Verification requested by remote
	  BIT BLO		;Blocking is requested by this node
	  BIT RJF		;Reject flag
	  BIT MTA		;No multi-cast traffic accepted
	FIELD VER,8		;Version of neighbor's router
	FIELD ECO,8		;ECO number of neighbor's router
	FIELD CUS,8		;Customer version of neighbor's router

	WORD NAH		;Adjacency's hi-order address (NI)
	FIELD NAL,18		;Low order in string format <a1,a2>
	FILLER 2
	FIELD NAA,6		;Adjacency's node area
	FIELD NAN,10		;Adjacency's node number
	 MSKSTR (AJADR,AJ.NAN,<AJNAA!AJNAN>) ; 16 bit address of adjacency
; Make a macro to be sure masks are in same word
	WORD RTV		;Pointer to this adjacency's routing vector
	WORD CBP		;Circuit block for this adjacency
	WORD BSZ		;Block size requested by neighbor
	WORD NHT		;Neighbor's hello timer
	WORD TLR		;Time last message received from adjacency
	FIELD PRI,8		;Routers priority to be designated router (NI)
	FIELD ARE,8		;Routers area (reserved field)
	FIELD MPD,^D16		;MPD (reserved)

ENDSTR


;These are the various types of nodes (in FIELD AJNTY).

	XP ADJ.3F,0		;Phase III routing node
	XP ADJ.3S,1		;Phase III non-routing node
	XP ADJ.L2,3		;Phase IV level II router
	XP ADJ.L1,4		;Phase IV level I router
	XP ADJ.LN,5		;Phase IV non-routing
	 ADJ.MX==ADJ.LN		;Maximum node type

;These are the various states in field AJSTA

	XP ADJ.UN,0		;This entry is currently unused
	XP ADJ.IN,1		;Currently initializing
	XP ADJ.UP,2		;Adjacency is up
	XP ADJ.OL,3		;Adjacency is off-line
	SUBTTL  Structure Definitions -- Router Circuit Block

;This structure contains all the "per-circuit" data for Router-36.

BEGSTR RC
	WORD NXT		;Pointer to next circuit block
	WORD LID		;Circuit ID
	WORD DLB		;Data link block address
	WORD AJQ,QH.LEN		;Queue of adjacencies belonging to this circuit

	FIELD FLG,9		;Place for some flags
	  BIT BCT		; Broadcast circuit (should be bit 0)
	  BIT SRM		; Send routing message flag
	  BIT EBU		; Emergency buffer is in use
	  BIT SHM		; Send hello message
	  BIT DSR		; We are the designated router
IFN FTOPS10,<
	  BIT OPN		; Call Kontroller function DF.OPN
	  BIT CLS		; Call Kontroller function DF.CLS
>; END IFN FTOPS10

	FIELD STA,3		; Circuit state
	FIELD CST,12		; Circuit cost
	FIELD DRT,9		; Timer before we assume DSR role

	WORD TLS		;Time last message of any type was sent
	WORD TLR		;Time last routing message was sent
	WORD TLH		;Time we sent the last hello (NI only)
	WORD TIN		;Time we got protocol up from controller
	WORD TM3		;Hello message timer
	HWORD BSZ		;Minimum of adjacencies' block sizes
	HWORD RBS		;Receive block size for this circuit
	HWORD MXR		;Maximum routers allowed on this circuit
	HWORD NRO		;Number of routers online
	WORD DSH		;ID of current designated router (NI only)
	HWORD DSL		; ...
	HWORD PRI		;Priority to be designated router (NI only)

	WORD JSQ,QH.LEN		;Queue header for jiffy resend queue
				;Circuit counters:
	WORD CMQ		; Messages queued
	WORD CLC		; Local messages
	WORD SLZ		;   (0) Time stamp of when last zeroed.
	WORD CAP		; (800) Arriving packets received (to NSP)
	WORD CDP		; (801) Departing packets sent (from NSP)
	WORD CAL		; (802) Arriving congestion loss (to NSP)
	WORD CTR		; (810) Transit packets received
	WORD CTS		; (811) Transit packets sent
	WORD CTL		; (812) Transit congestion loss
	WORD CCD		; (820) Circuit down events
	WORD AJD		;	Adjacency down
	WORD CIF		; (821) Initialization failures
	WORD BSX		; (xxxx) Adjacency block size exceeded /output
ENDSTR

;These are the possible circuit states (in FIELD RCSTA).

	XP RCS.OF,0		;Off, not to be looked at
	XP RCS.RJ,1		;Rejected - Attempt to queue output failed
	XP RCS.FA,2		;Failed - Received line down from DLL
	XP RCS.WT,3		;Waiting for protocol up (initializing)
	XP RCS.TI,4		;Waiting for Router inititialization message
	XP RCS.TV,5		;Waiting for Router verification message
	XP RCS.TT,6		;Through-put testing (or whatever)
	XP RCS.RN,7		;Circuit is up and running

	SUBTTL  Structure Definitions -- DNADLL data link block

BEGSTR DL
	WORD NXT		; Link to next data link block
	WORD UID		; ID supplied by DNADLL user
	WORD DID		; Device ID
	FIELD FLG,6		; Data link flags
	  BIT RUN		; Data link is running
	  BIT EBU		; Emergency buffer in use
	  BIT LIU		; Line in use by circuit
	WORD LNB		; Line data block address
	WORD SLZ		;(0) Seconds since last zeroed
	WORD BYR		;(1000) Total bytes received
	WORD BYS		;(1001) Total bytes sent
	WORD DBR		;(1010) Total data blocks received
	WORD DBS		;(1011) Total data blocks sent
	WORD UBU		;(1065) User buffer unavailable
ENDSTR
;Router test message data block

IFN FTRTST,<

BEGSTR TR
	WORD TND		; Node to test with
	WORD TSN		; Serial number of message
	WORD TAF		; Time when message reaches RTRFWD
	WORD TIC		; Time at input complete
	WORD TOC		; Time when output complete is received
	WORD TTD		; Time given to DLL
	WORD TTA		; Total time to turn around (TIC-TAF)
	WORD TED		; Time to get from FWD to DLL (TTD-TAF)
	WORD TFD		; Time from forward to output done (TTF-TOC)
ENDSTR
> ;End FTRTST

;This structure describes the DECnet word in the TOPS-10 PDB.
;Note that this field never made it into the PDB.

BEGSTR PD			;DECNET WORD IN PDB
	FIELD GOL,12		;PROCESS'S GOAL
	FIELD DQT,12		;PROCESS'S DEFAULT QUOTA
	FIELD IPR,12		;PROCESS'S INPUT PERCENTAGE
ENDSTR

	SUBTTL Value Definitions --  NSP Port States

;Define the Port State constants

DEFINE STATE(st),<
	ZZ==ZZ+1
	NPS.'st==ZZ>
	ZZ==0

	STATE	OP		;OPEN, WAITING FOR ENTER ACTIVE FROM SC
	STATE	CI		;CONNECT INITIATE SENT
	STATE	CD		;CONNECT DELIVERED
	STATE	CR		;CONNECT RECEIVED
	STATE	CC		;CONNECT CONFIRM
	STATE	DR		;DISCONNECT REJECT
	STATE	RC		;DISCONNECT REJECT COMPLETE (DRC)
	STATE	RN		;RUN
	STATE	RJ		;REJECT
	STATE	DI		;DISCONNECT INITIATE
	STATE	IC		;DISCONNECT INITIATE COMPLETE (DIC)
	STATE	DN		;DISCONNECT NOTIFICATION
	STATE	CN		;CLOSE NOTIFICATION
	STATE	NR		;NO RESOURCES
	STATE	NC		;NO COMMUNICATION
	STATE	CL		;CLOSED
	STATE	DP		;DESTROY PORT

PURGE	ZZ,STATE
	SUBTTL Value Definitions -- DECnet Standard Parameters

;The REASON values for a Disconnect Initiate or Disconnect Confirm message

	..RDX==10		;SAVE PRESENT RADIX
	RADIX 10		;USE DECIMAL FOR THE REASONS

	RSNRBO==0		;REJECTED BY OBJECT
	RSNDBO==0		;DISCONNECTED BY OBJECT (WHEN RUNNING)
	RSNRES==1		;NO RESOURCES
	RSNUNN==2		;UNRECOGNIZED NODE NAME
	RSNRNS==3		;REMOTE NODE SHUT DOWN
	RSNURO==4		;UNRECOGNIZED OBJECT
	RSNIOF==5		;INVALID OBJECT NAME FORMAT
	RSNOTB==6		;OBJECT TOO BUSY
	RSNABM==8		;ABORT BY MANAGEMENT
	RSNABO==9		;ABORT BY OBJECT
	RSNINF==10		;INVALID NODE NAME FORMAT
	RSNLNS==11		;LOCAL NODE SHUT DOWN
	RSNACR==34		;ACCESS CONTROL REJECTION
	RSNNRO==38		;NO RESPONSE FROM OBJECT
	RSNNUR==39		;NODE UNREACHABLE
	RSNNLK==41		;NO LINK
	RSNDSC==42		;DISCONNECT COMPLETE
	RSNIMG==43		;IMAGE FIELD TOO LONG (RQSTRID,
				; PASSWORD, ACCOUNT, USRDATA, ETC)

	RADIX ..RDX		;RESTORE PREVIOUS RADIX
	SUBTTL Value Definitions -- DECnet-wide states

;The following states are from the possible executor states as defined
;by Network Management.  This state is contained in the cell DCNSTA
;located in D36COM.

	XP DS.ON,0		;ON
	XP DS.OFF,1		;OFF
	XP DS.SHU,2		;SHUT
	XP DS.RES,3		;RESTRICTED

	SUBTTL Inter-Layer Parameters -- Overall Argument Conventions

;Session Control will be called with the following basic calling
;sequence:

;Call:	T1/ Function-specific argument, see below
;	T2/ Function-specific argument, see below
;	T3/ Function code = SV.xxx, defined below
;	T4/ Full-word pointer to a message block
;	CALL	@NP.SCV(PB)
;	Normal Return
;Changes T1,T2,T3,T4, preserves all others



;NSP will be called with the following basic calling sequence:

;Call:	T1/ Function-specific argument, see below
;	T2/ Function-specific argument, see below
;	T3/ Function code = NV.xxx, defined below
;	T4/ Full-word pointer to a message block
;	CALL	NSP
;	Normal Return
;Changes T1,T2,T3,T4, preserves all others



;Router will be called with the following basic calling sequence:

;Call:	T1/ RT%RQR set if return is requested on transmission failure
;	MB/ Pointer to the message block
;	CALL	RTRXMT
;	Normal Return
;Changes T1,T2,T3,T4, preserves all others


;The DLL layer kontrollers are called with the the following sequence:

;Call:	T1/ Kontroller Function (KF.xxx)
;	T2/ Pointer to Line Block to use
;	T3/ Function dependant data (usually pointer to message block)
;	CALL CALKON
;	Normal Return
;Changes T1-T4

	SUBTTL Inter-Layer Parameters -- Session Control Function Codes

;These are the function codes for the calls to Session Control from
;NSP.

	XP SV.CCR, 0		;CONNECT CONFIRMED CALL
	XP SV.DIR, 1		;DISCONNECT INITIATE RECEIVED CALL
	XP SV.DCR, 2		;DISCONNECT CONFIRM RECEIVED CALL
	XP SV.OND, 3		;OUTPUT NOT DONE CALL
	XP SV.ODN, 4		;OUTPUT DONE CALL
	XP SV.SEG, 5		;SEGMENT RECEIVED CALL
	XP SV.DRQ, 6		;DATA REQUEST RECEIVED CALL
	XP SV.NCF, 7		;NO CONFIDENCE IN PORT CALL
	XP SV.NRS,10		;NO RESOURCES CALL
	XP SV.CLS,11		;CLOSE COMPLETED CALL
	XP SV.NLK,12		;NO LINK CALL
	XP SV.NCM,13		;NO COMMUNICATION CALL
	XP SV.NRN,14		;NOT IN RUN STATE
	XP SV.CAK,15		;CONNECT ACKNOWLEGE CALL

				;The Connect Initiate call does not go
				;through the vectored interface, since
				;it must go to a single routine
				;capable of sorting out which Session
				;Control will handle the incoming
				;message.  the connect initiate call
				;goes to the global label SCTLCI.
	SUBTTL Inter-Layer Parameters -- NSP Function Codes

	XP NV.OPN, 0		;OPEN FROM SESSION CONTROL
	XP NV.ACT, 1		;ENTER ACTIVE FROM SESSION CONTROL
	XP NV.ACC, 2		;ACCEPT CONNECT FROM SESSION CONTROL
	XP NV.REJ, 3		;REJECT CONNECT FROM SESSION CONTROL
	XP NV.SEG, 4		;SEND SEGMENT FROM SESSION CONTROL
	XP NV.DRQ, 5		;REQUEST DATA FOR SESSION CONTROL
	XP NV.GOL, 6		;SET QUOTA/GOAL FROM SESSION CONTROL
	XP NV.DSC, 7		;SEND DISCONNECT FROM SESSION CONTROL
	XP NV.ABO,10		;SEND ABORT FROM SESSION CONTROL
	XP NV.CLS,11		;CLOSE PORT FROM SESSION CONTROL

	XP NV.RVF,12		;FIRST ROUTER CALL VECTOR OFFSET
	XP NV.RCV,12		;RECEIVE MESSAGE FROM ROUTER
	XP NV.ODN,13		;OUTPUT DONE FROM ROUTER
	XP NV.RTS,14		;RETURN TO SENDER FROM ROUTER
	XP NV.RFR,15		;Returned to sender from remote router
	XP NV.RVL,15		;LAST ROUTER CALL VECTOR OFFSET

	SUBTTL Inter-Layer Parameters -- Session Control/NSP

;Arguments passed between Session Control and NSP:

;Flow Control Mode, for NSP and Session Control.  These must not be
;changed, as they mirror definitions in the protocol.

	XP FCM.NO,0		;NO FLOW
	XP FCM.SG,1		;SEGMENT
	XP FCM.MG,2		;MESSAGE
	XP FCM.XX,3		;RESERVED


;The DATA REQUEST call's argument definitions for T2

BEGSTR QA
	FIELD FLG,6
;	  BIT OFF		;SET IF THE SUBLINK IS TO BE TURNED OFF
	HWORD CNT		;THE DATA REQUEST COUNT BEING REQUESTED
ENDSTR				;IF NEGATIVE, ITS 2'S COMPLEMENT IN FIELD
				; HALF WORD SO LOADE CAN MAKE HRRE
;Some of the calls between Session Control and NSP require more arguments
;than will fit into the two registers reserved for argument passing.
;These calls pass instead a pointer to an argument block.  The formats
;of those blocks are described here.

;The OPEN call's argument block

BEGSTR OA			;OPEN ARGUMENT BLOCK
	WORD SCB		;SCB ID FOR NEW PORT
	WORD NOD		;DESTINATION NODE
	WORD FLO		;FLOW CONTROL TYPE
	WORD GOL		;DATA REQUEST GOAL
	WORD SIZ		;MAX BYTES ALLOWED IN A MESSAGE SEGMENT
	WORD SCV		;SESSION CONTROL'S ENTRY ADDRESS
	WORD CIR		;LOOPBACK CIRCUIT
ENDSTR


;The ACCEPT call's argument block

BEGSTR AA			;ACCEPT ARGUMENT BLOCK
	WORD SCB		;SCB ID FOR NEW PORT
	WORD PID		;NSP'S PORT IDENTIFIER
	WORD FLO		;FLOW CONTROL TYPE
	WORD GOL		;DATA REQUEST GOAL
	WORD SIZ		;MAX BYTES ALLOWED IN A MESSAGE SEGMENT
	WORD SCV		;SESSION CONTROL'S ENTRY ADDRESS
ENDSTR

;The Connect Initiate and Connect Confirm calls' argument format for T2.
;T1 holds the NSPpid for the new logical link.

BEGSTR IA
	HWORD FLO		;FLOW CONTROL TYPE
	HWORD SIZ		;MAX BYTES ALLOWED IN A MESSAGE SEGMENT
				;SOURCE NODE ID AND ROUTER CHANNEL ARE
				; IN THE PUBLIC PART OF THE MESSAGE BLOCK
ENDSTR
	SUBTTL Inter-Layer Parameters -- NSP/Router

;Arguments passed between NSP and Router:

;NSP passes this flag in T1 to Router on a call to RTRXMT if it wants
;to request a return of the message it is sending.

	XP RT%RQR,1B0		;RETURN REQUESTED ON TRANSMISSION FAILURE
	XP RT%ODN,1B1		;RETURN MESSAGE BLOCK TO NSP WHEN OUTPUT DONE
	XP RT%TRY,1B2		;TRYHARD WHEN OUTPUT CIRCUIT IS NI

;NSP passes this flag in T1 to Router on a call to RTRINI, to say that he
;is the one and only NSP which will take Phase II messages.

	XP RT%PH2,1B0		;I AM THE "PHASE2" NSP

	SUBTTL Inter-Layer Parameters -- Router/DLL

;The interface between Router and the DLL is vectored. These are the
;functions codes of the interrupts which the DLL ("kontroller") will
;pass to Router.


	XP DI.ODN,1		;OUTPUT DONE
	XP DI.INC,2		;INPUT COMPLETE
	XP DI.LSC,3		;LINE STATE CHANGE
	XP DI.ICB,4		;INITIALIZE CIRCUIT BLOCK
	XP DI.MAX,DI.ICB	;MAXIMUM FUNCTION

;The DLL performs these functions for Router.

	XP DF.OPN,0		;OPEN THE CIRCUIT
	XP DF.CLS,1		;CLOSE THE CIRCUIT
	XP DF.XMT,2		;TRANSMIT MESSAGE

;The DLL preforms these functions for Network management (NTMAN)

	XP DF.SET,3		;NTMAN - SET FUNCTION
	XP DF.CLR,4		;NTMAN - CLEAR FUNCTION
	XP DF.RED,5		;NTMAN - READ FUNCTION
	XP DF.SHC,6		;NTMAN - Show counters
	XP DF.SZC,7		;NTMAN - Show and zero counters
	XP DF.RET,10		;NTMAN - Return list (e.g. show known lines)
	XP DF.A2N,11		;NTMAN - Map node address to name
	XP DF.N2A,12		;NTMAN - Map node name to address
	XP DF.CET,13		;NTMAN - Check entity
	XP DF.MAX,DF.CET	;MAXIMUM FUNCTION NUMBER

;These are needed until NTMAN is modernized

	XP KF.SET,5		;Set parameters
	XP KF.CLR,6		;Clear parameters
	XP KF.RED,7		;Read parameters

;These are DTESRV specific functions

	XP DD.OPN,0 		; Open circuit
	XP DD.CLS,1 		; Close circuit
	XP DD.QUE,2 		; Queue output buffer
	XP DD.PRB,3 		; Post receive message block
	XP DD.CKE,4		; Check existance of DTE
	XP DD.MAX,DD.CKE	; Maximum function number

;This is the KONTROLLER interface to DDCMP KONTROLLERS
;Functions (to KONTROLLER)
	XP DC.FHL,0		; Halt protocol
	XP DC.FIL,1		; Initialize protocol
	XP DC.FSM,2		; Set maint mode
	XP DC.FQB,3		; Queue output buffer
	XP DC.FAL,4		; Assign line (Used to exchange portal IDs)
	XP DC.FMX,DC.FAL	; Max fcn

;Interrupts (to user)
	XP DC.IPU,0		; Protocol up
	XP DC.IPD,1		; Protocol down
	XP DC.IMR,2		; Maint msg received
	XP DC.ISR,3		; Start msg received
	XP DC.IOD,4		; Output done
	XP DC.IOF,5		; Output failed
	XP DC.IIC,6		; Input complete
	XP DC.IGB,7		; Get buffer (for input msg)
	XP DC.IOC,10		; Open circuit (define line)
	XP DC.ICC,11		; Close circuit (undefine line)
	XP DC.IMX,DC.ICC	; Max fn

;These are the generic line states.

	XP LS.ON,0		; On
	XP LS.OFF,1		; Off
	XP LS.SRV,2		; Service
	XP LS.CLR,3		; Cleared

;These are the error codes CIDLL will return to DNADLL on non-network
; management functions.

	XP CIEBAS,2000		;CI errors have a base of 2000

	XP CNSUC%,0!CIEBAS	;Success
	XP CNNCI%,1!CIEBAS	;No CI interface present
	XP CNNRE%,2!CIEBAS	;No resources
	XP CNNSP%,3!CIEBAS	;No such port
	XP CNPNA%,4!CIEBAS	;Port block not allocated
	XP CNPAO%,5!CIEBAS	;Port is already open
	XP CNLPT%,6!CIEBAS	;Local port is illegal
	XP CNPWS%,7!CIEBAS	;Port is in wrong state
	XP CNIMS%,10!CIEBAS	;Illegal message size
	XP CNXMF%,11!CIEBAS	;SCA datagram send failed

	SUBTTL Inter-Layer Parameters -- Layer/NMX (Event logger)

;The interface between a layer and the event logger in NTMAN is vectored.
;These are the function codes a layer will pass to NTMAN.

	XP EV.GEC,0		;Get an EC block
	XP EV.REC,1		;Release an EC block
	XP EV.FIL,2		;Filter an event
	XP EV.LOG,3		;Log an event
	XP EV.SIG,4		;Log a signal

	SUBTTL Network Management -- Argument blocks

;The following is the defintion of the Line-ID that router maps into
;a line block address. This is used
;	On an initial open from the DLL to ROUTER;
;	By router to determine an Kontroller specific peculiarities;
;	By network management to communicate with ROUTER.

BEGSTR LI			;LINE-ID
	FIELD LXC,1		; BIT INDICATING LINE ID OR CIRCUIT ID.
	FILLER 2		;  (BIT=0 MEANS CIRCUIT, =1 MEANS LINE)
	FIELD DEV,6		; DEVICE TYPE
	FIELD KON,9		; CONTROLLER NUMBER (CPU# FOR DTE'S AND CI'S)
	FIELD UNI,9		; UNIT NUMBER
	FIELD DRP,9		; DROP NUMBER (PORT FOR CI'S)
ENDSTR

;These are the bits indicating which of the above fields are present
	XP KD.DEV,1		;DEVICE NAME (ALWAYS PRESENT)
	XP KD.KON,2		;CONTROLLER NUMBER
	XP KD.UNI,4		;UNIT NUMBER
	XP KD.DRP,10		;DROP NUMBER

;These are the types of devices that we know about (in field LIDEV).

	XP LD.TST,0		;TEST BED DRIVER (OBSOLETE)
	XP LD.DTE,1		;DTE
	XP LD.KDP,2		;KDP
	XP LD.DDP,3		;DDP
	XP LD.CIP,4		;CI PORT
	XP LD.ETH,5		;ETHERNET
	XP LD.DMR,6		;DMR
	   LD.MAX==LD.DMR

;Define block of ''globals'' used by NMX

BEGSTR NX
	FIELD FLG,7		;FLAGS
	 BIT  WRM		;WRITING MONITOR'S DATA BASE. 1=WRITING
	 BIT  WUS		;WRITING USERS DATA STRING. 1=WRITING
	 BIT  ZMC		;ZEROING OR CLEARING MONITOR CORE.
	 BIT  CXP		;COUNTER=1 OR PARAMETER=0.
	 BIT  NIL		;NOT IN LAYER. (I DIDN'T BIT)
	 BIT  ECV		;DO ENTITY CONVERSION
	 BIT  MCX		;BUFFER IS IN MONITOR CONTEXT
	FILLER 2
	FIELD NTY,3		;NODE TYPE, IF NODE.
	 XP NX.EXN,1		;EXECUTOR NODE
	 XP NX.REN,2		;REMOTE NODE
	 XP NX.LPN,3		;LOOPBACK NODE
	FIELD LTY,3		;LINE TYPE
	 XP NX.TST,0		;TEST BED DRIVER (OBSOLETE)
	 XP NX.DTE,1		;DTE
	 XP NX.KDP,2		;KDP
	 XP NX.DDP,3		;DDP
	 XP NX.CIP,4		;CI PORT
	 XP NX.NI,5		;ETHERNET
	 XP NX.DMR,6		;DMR
	FIELD ENT,3		;ENTITY TYPE
	HWORD PRM		;PARAMETER/COUNTER IDENTIFIER.
	WORD NUM		;ENTITY SEQUENCE NUMBER. (NODE ADDR OF LINE ID)
	WORD VAL,8		;MAXIMUM STRING SIZE (32 BYTES)
	WORD MBY		;MAXIMUM NUMBER OF BYTES
	WORD ADR		;USER VIRTUAL ADDRESS OF ARGUMENT BLOCK
	WORD UUO		;SAVED CALLING UUO (NEED FOR STOTAC)
	WORD EID,BP.LEN		;STRING POINTER TO ENTITY ID
	WORD FNC		;FUNCTION CODE.
	WORD SEL		;SELECTION CRITERIA FOR FUNCTION.
	WORD DAT,BP.LEN		;STRING POINTER FIELD TO DATA STRING
	WORD ERR		;ERROR CODE.
ENDSTR

;A special error code

	NEADC%==-^D47

	SUBTTL Network Management -- NSP and ROUTING VERSION Number Formats
;Define NSP and Routing Version number words

BEGSTR VN
	FIELD VER,8		;Version number
	FIELD ECO,8		;ECO number
	FIELD UCO,8		;User ECO number
	FILLER 12		;Fill up the word
ENDSTR


;Define Counter Block Sub-fields

BEGSTR KB
	FIELD BMF,1		;Bit Map Flag
	FIELD WID,^D17		;Counter width in bits
	HWORD TYP		;Counter Type (Number)
	WORD VAL		;Counter Value
	WORD MSK		;Bit Mask
ENDSTR

	SUBTTL Network Management -- Values used by NMX

	XP NSXILL,0		;ILLEGAL
	XP NSXVRS,1		;NSP VERSION NUMBER
	XP NSXECO,2		;ECO NUMBER
	XP NSXUEC,3		;USER ECO NUMBER
	XP NSXDLY,4		;DELAY
	XP NSXDLW,5
	XP NSXIAT,6		;
	XP NSXRTM,7		;RESPONSE TIMEOUTS

;Line states according to NMX

	XP NCK.ON,0		;CIRCUIT/LINE STATE ON
	XP NCK.OF,1		;STATE OFF
	XP NCK.SR,2		;SERVICE
	XP NCK.CL,3		;CLEARED

;Line substates according to NMX

	XP NCB.ST,0		;--STARTING
	XP NCB.SN,^D10		;--SYNCHRONIZING
	XP NCB.FA,^D11		;--FAILED
;Circuit states according to Router
	XP RNS.OF,0		; Off
	XP RNS.FA,1		; Failed
	XP RNS.ST,2		; Starting
	XP RNS.ON,3		; Running

;Network management node states
	XP RM.REA,4		;Reachable
	XP RM.UNR,5		;Unreachable

;For LLINKS and ROUTER
;Entity types
	XP .NTNON,-1
	XP .NTNOD,0		;NODE ENTITY
	XP .NTLIN,1		;LINE
	XP .NTLOG,2		;LOGGING
	XP .NTCKT,3		;CIRCUIT
	XP .NTMOD,4		;MODULE
	XP .NTARE,5		;AREA


;Qualifiers for functions
	XP .NTSGN,-5		;SIGNIFICANT		;(FOR .NTRET)
	XP .NTADJ,-4		;ADJACENT
	XP .NTLOP,-3		;LOOP
 	XP .NTACT,-2		;ACTIVE ITEMS
	XP .NTKNO,-1		;KNOWN ITEMS		


	SUBTTL	Network Management -- NMX Function Block Definition

;This is the NMX Interface Function Argument Block.  Its purpose
;is to implement a standard calling interface between Network
;Management (NTMAN) and the DECnet Layers.
;Define Network management Functions Block

BEGSTR NF
	WORD EID		;Entity ID
	HWORD BYT		;Byte count
	HWORD PRM		;Parameter Number
	FIELD BFF,1		;Buffer Flag
	FIELD UBF,1		;User Buffer passed (for return KNOWN NODES)
	FIELD QUF,1		;Qualifier Flag
	FIELD ETY,6		;Entity Type
	FIELD SEL,9		;Selector
	HWORD BLN		;Buffer Length
	WORD QUA		;Qualifier
	WORD BUF		;Buffer Address or Parameter value
	WORD BPT		;Byte pointer to data
ENDSTR

;Network management Function Codes
	XP NF.ILG,-1		;Illegal Function
	XP NF.SET,0		;Set Parameter
	XP NF.CLR,1		;Clear Parameter
	XP NF.RED,2		;Read Parameter
	XP NF.COU,3		;Show Counters
	XP NF.SZC,4		;Show and Zero Counters
	XP NF.RET,5		;Return list of Entity Ids
	XP NF.A2N,6		;Map Node Address to Name
	XP NF.N2A,7		;Map Node Name to Address
	XP NF.CET,10		;Check Entity
	XP NF.CKL,11		;Check Loopback Node

	NF.MAX==NF.CKL		;Maximum Function code value

;Network Management Interface Error returns

;These error codes are for internal monitor use only
	XP NF.FCS,^D1		;Function completed successfully
	XP NF.NDP,^D0		;No data present

;The following error codes may be returned to the user level
	XP NF.UFO,^D-1		;Unrecognized Function or Option
	XP NF.IMF,^D-2		;Invalid Message Format
	XP NF.PRV,^D-3		;Privilege Violation
	XP NF.MPE,^D-5		;Management Program Error
	XP NF.UPT,^D-6		;Unrecognized Parameter Type
	XP NF.URC,^D-8		;Unrecognized Component
	XP NF.INI,^D-9		;Invalid Identification
	XP NF.CWS,^D-11		;Component in Wrong State
	XP NF.RES,^D-15		;Resource Error
	XP NF.IPV,^D-16		;Invalid Parameter Value
	XP NF.NRM,^D-20		;No room, or slot already taken
	XP NF.PNA,^D-22		;Parameter not applicable
	XP NF.PVL,^D-23		;Parameter value too long
	XP NF.OPF,^D-25		;Operation failure
	XP NF.FNS,^D-26		;Function not supported
	XP NF.IPG,^D-27		;Invalid Parameter grouping
	XP NF.PAM,^D-29		;Parameter missing

	SUBTTL	Network Management -- Event Parameters and Argument blocks

;Event Classes
	XP .NCNML,0		;NETWORK MGMT LAYER
	XP .NCALP,1		;APPLICATION LAYER
	XP .NCSCT,2		;SESSION CONTROL LAYER
	XP .NCNSP,3		;NETWORK SERVICES (NSP) LAYER
	XP .NCRTR,4		;ROUTER LAYER
	XP .NCDLL,5		;DATA LINK LAYER
	XP .NCPLL,6		;PHYSICAL LINK LAYER
;		7-31		;RESERVED FOR COMMON CLASSES
;		32-63		;RESERVED FOR RSTS
;		64-95		;RESERVED FOR RSX
	XP .NCLCG,^D96		;TOPS-10/20 specific events
;		97-127		;RESERVED FOR TOPS-10/20
;		128-159		;RESERVED FOR RT
;		160-479		;RESERVED FOR FUTURE DEC USE
;		480-511		;RESERVED FOR CUSTOMER USE

;Event and signal queue maximum lengths
	XP NMXELN,^D10		;Maximum # of entries in event queue
	XP NMXSLN,^D3		;Maximum # of entries in signal queue

;Event communication block.
;
;The EC block is a communications area between a layer and NTMAN.

BEGSTR EC
	;NTMAN private section
	HWORD LOS		;Count of "events lost"
	HWORD CNT		;Count of events on queue
	FIELD DEL,1		;This EC block marked for deallocation
	FILLER 2

	;Communications area, set by the layer
	FIELD LAY,3		;DECnet layer this EC block belongs to
	HWORD ETY		;Entity type of DECnet device this EC block
				; belongs to
	WORD EID		;Entity ID of DECnet device this EC block
				; belongs to
	HWORD MAX		;Maximum # of events on queue allowed
ENDSTR

;Network event block
;
;A NE block contains all information about an event

BEGSTR NE
	WORD NXT		;Pointer to next NE block on queue
	WORD TIM		;Time of event
	WORD CBK		;Address of callback routine
	WORD ECP		;Pointer to event communications block
	FIELD CCL,13		;Event class
	FIELD CTY,5		;Event type
	HWORD DLN		;Data length in bytes
	HWORD ETP		;Entity type
	WORD EID		;Entity ID
	WORD DAT		;Fullword pointer to data string
ENDSTR

;Filter argument block
;
;Used to pass arguments to the EV.FIL function of NMXEVT

BEGSTR FA			;Filter argument block
	HWORD CCL		;Event class
	HWORD CTY		;Event type
ENDSTR

IFN FTDEBUG <

;For test and debug purposes there is an extra function of the NTMAN jsys.
;This function will log an event or signal.
;
;The function code is -5 (.NTTEV)
	.NTTEV==:-5
;
;The entity ID and type for the event are taken from the standard words in
;the NTMAN argument block.
;
;Word .NTSEL points to a secondary argument block of the following layour
;
	BEGSTR ET
		FIELD SIG,1	;Set if this is a signal
		HWORD CNT	;Replication count
		FIELD CCL,13	;Event class
		FIELD CTY,5	;Event type
		HWORD DLN	;Data length in bytes
		WORD DAT,<44/4>	;Space for data
	ENDSTR
>

	SUBTTL	Test Bed Stuff

;Here are the TRACE and ETRACE symbols.

	XP TRCCOM,1B35		;/TRACE:COM
	XP TRCRTR,1B34		;/TRACE:RTR
	XP TRCNSP,1B33		;/TRACE:NSP
	XP TRCSC,1B32		;/TRACE:SC
	XP TRCUSR,1B31		;/TRACE:USR
	XP TRCNMX,1B30		;/TRACE:NMX

	XP ETRCOM,1B35		;/ETRACE:COM
	XP ETRRTR,1B34		;/ETRACE:RTR
	XP ETRNSP,1B33		;/ETRACE:NSP
	XP ETRSC,1B32		;/ETRACE:SC
	XP ETRUSR,1B31		;/ETRACE:USR
	XP ETRNMX,1B30		;/ETRACE:NMX

;This is a macro for generating traces about things.

DEFINE	TRACE(PREFIX,TEXT),<
  IFN FTTRACE,<
	EXT <S.TRAC,.TSTRG>
	CALL [SAVEAC <T1,T2,T3,T4> ;;YES, SAVE SOME AC'S
	      HRRZ T1,S.TRAC	;;GET THE TRACE SWITCH
	      TXNN T1,TRC'PREFIX ;;IF HE WANTS IT, GIVE IT TO HIM
	      RET		;;RETURN TO SENDER
	      MOVEI T1,[ASCIZ/['PREFIX: 'TEXT]
/] 				;;SET UP FOR SCAN .TSTRG
	      CALLSCAN .TSTRG	;;CALL HIM
	      RET]		;; AND RETURN
  >;END OF IFN FTTRACE
>

DEFINE	ETRACE(PREFIX,TEXT),<
  IFN FTTRACE,<
	EXT <S.ETRA,.TSTRG>
	CALL [SAVEAC <T1,T2,T3,T4> ;;YES, SAVE SOME AC'S
	      HRRZ T1,S.ETRA	;;GET THE TRACE SWITCH
	      TXNN T1,ETR'PREFIX ;;IF HE WANTS IT, GIVE IT TO HIM
	      RET		;;RETURN TO SENDER
	      MOVEI T1,[ASCIZ/['PREFIX: 'TEXT]
/] 				;;SET UP FOR SCAN .TSTRG
	      CALLSCAN .TSTRG	;;CALL HIM
	      RET]		;; AND RETURN
  >;END OF IFN FTTRACE
>
	SUBTTL  FIXADJ Macro - Compensate for bug in negative ADJBP

;This macro should be removed if and when the KL microcode is fixed to
;handle byte pointers that have a 777777 in the right half and an index
;AC that points to the first address in a section.  Such a byte pointer
;might be generated by backing up a byte pointer with an ADJBP instruction.

;For example, if the byte pointer is 41006,,777777 and AC 6 contains 10,,0
;the effective address calculation computes an address of 7,777777.  If it
;is the case that section 7 is not mapped a page fault will result even if
;the instruction is an ILDB wishing to get its byte from 10,,0.  This macro
;will change the byte pointer from 410xx,,-1 to 4410xx,,0.

DEFINE FIXADJ (ac),<
	TLNE ac,700000		;Is it 0410xx,,xxx?
	IFSKP.
	  TLO ac,400000		;Yes, make it 4410xx,,xxx
	  HRRI ac,1(ac)		;Non-carrying add to RH, TLO just made IFIW!
	ENDIF.
>

IFN FTOPS20,<
DEFINE TSTS6 <>

;;Hack in test section 6
;DEFINE TSTS6 <
;  IF2,<IFNDEF $TSTS6,<EXTERNAL $TSTS6>>
;	JSP CX,$TSTS6
;>
> ;END IFN FTOPS20

IFN FTOPS10,<
	SUBTTL	LOBOTOMIZED definitions of things for TOPS-10

;
;Definition of PSECT numbers.  These are not used on TOPS-10
;
	PSWAPCD==0
	PRESCD==0
	PXSWAPCD==0
	PXRESCD==0
	CURPSX==0

	XCDSEC==(MS.HGH)	;TOPS-10 uses only section MS.HGH for code

;
;Definition of XTENDed section stuff
;
	DEFINE XADDR.($ADDR),<XCDSEC,,$ADDR>
	DEFINE XRESCD,<$PSECT(SKY)>
	DEFINE XSWAPCD,<$PSECT(SKY)>
	DEFINE TSTS6,<>

;Definitions for extended code

;Transfer to RESCD
DEFINE TORESCD (%LBL) <
IFN FTXMON,<
	XJRST .+1
	XWD MSEC1,%LBL
	RESCD
%LBL:!
>; FTXMON
>

;Transfer to SWAPCD
DEFINE TOSWAPCD (%LBL) <
IFN FTXMON,<
	XJRST .+1
	XWD MSEC1,%LBL
	SWAPCD
%LBL:!
>; FTXMON
>

;Transfer to extended resident code
DEFINE TOXRESCD (%LBL) <
IFN FTXMON,<
	XJRST .+1
	%LBL
	XRESCD
%LBL:!
>; FTXMON
>

;Transfer to extended swappable code
DEFINE TOXSWAPCD (%LBL) <
IFN FTXMON,<
	XJRST .+1
	%LBL
	XSWAPCD
%LBL:!
>; FTXMON
>

;Define an entry point in extended resident code
DEFINE XRENT ($NAME,G) <
	RESCD
IFB <G>,<$NAME: XCALLRET (,X'$NAME)>
IFNB <G>,<$NAME:: XCALLRET (,X'$NAME)>
	XRESCD
X'$NAME:
.IF $NAME,INTERNAL,<INTERNAL X'$NAME>
>

;Define an entry point in extended swappable code
DEFINE XNENT ($NAME,G) <
	SWAPCD
IFB <G>,<$NAME: XCALLRET (,X'$NAME)>
IFNB <G>,<$NAME:: XCALLRET (,X'$NAME)>
	XSWAPCD
X'$NAME:
.IF $NAME,INTERNAL,<INTERNAL X'$NAME>
>

;Call a monitor subroutine in specific context/section
DEFINE MCALL ($CTX, $SECNR, $ADDR) <
IFE FTXMON,<
    IFB  <$CTX>,<CALL $ADDR>
    IFNB <$CTX>,<
	IFDIF <$CTX><RG>,<IFDIF <$CTX><DN>,<PRINTX ?Illegal context $CTX>>
	IFIDN <$CTX><RG>,<RGCALL $ADDR>
	IFIDN <$CTX><DN>,<DNCALL $ADDR>
    >; END IFNB <$CTX>
>; END IFE FTXMON
IFN FTXMON,<
    IFB  <$SECNR>,<CALL $ADDR>
    IFNB <$SECNR>,<SNCALL ($ADDR, <$SECNR>B17)>
>; END IFN FTXMON
>; END DEFINE MCALL

;Call a subroutine in another section from any non-zero section
DEFINE CALLX ($SECNR, $ADDR) <
	IFB <$SECNR>,<CALL @[$ADDR]>
	IFNB <$SECNR>,<CALL @[$SECNR,,$ADDR]>
>

;Call a subroutine in another section from MSEC1
DEFINE XCALL ($SECNR, $ADDR) <
	SE1ENT
	IFB <$SECNR>,<CALL @[$ADDR]>
	IFNB <$SECNR>,<CALL @[$SECNR,,$ADDR]>
>

;JSP to another section
DEFINE XJSP (AC, $SECNR, $ADDR) <
	SE1ENT
	IFB <$SECNR>,<JSP AC,@[$ADDR]>
	IFNB <$SECNR>,<JSP AC,@[$SECNR,,$ADDR]>
>

;CALLRET to another section
DEFINE XCALLRET ($SECNR, $ADDR) <
	SE1ENT
	IFB <$SECNR>,<XJRST [$ADDR]>
	IFNB <$SECNR>,<XJRST [$SECNR,,$ADDR]>
>

;Execute one or more instructions in section 1
DEFINE S1XCT (A) <
	TORESCD
	A
	TOXRESCD
>
> ;END IFN FTOPS10

	SUBTTL	End of D36PAR

	END