DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦340bb9b70⟧

    Length: 188708 (0x2e124)
    Notes: pts_type(SC)
    Names: »X25:L3.SC«

Derivation

└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
    └─⟦this⟧ »TOSSWORK/X25:L3.SC« 

PTS(SC)

	IDENT	X25:L3	REL 11.0 81-07-06 870105041100
			=1, CF A15 IN INHIBIT
			=2,  MISSING RET.CODE
* 
********************************************
* 
*	PHILIPS TERMINAL SYSTEM PTS 
* 
*	X25-L3:	DRIVER FOR DATA COMMUNICATION 
*		SERVING THE PACKET LEVEL AS
*		DEFINED IN X25 LEVEL 3.
* 
* 
********************************************
* 
* 
* 
	EJECT
* 
************************************************************
* 
* 
*	ORDERS :
* 
*	/00  READ STATUS
* 
*	/02  READ 
* 
*	/06  WRITE
* 
*	/21  OPEN 
* 
*	/22  CLOSE
* 
*	/24  CONNECT ACTIVE 
* 
*	/27  CONNECT PASSIVE
* 
*	/2F  DISCONNECT 
* 
*	/2D  GET STATISTICS 
* 
*	/38  SET STATUS 
* 
*	/39  SET TIMER
* 
* 
************************************************************
* 
	EJECT
* 
********************************************
* 
*	E N T R I E S 
* 
********************************************
* 
	ENTRY	REQTIM	REQUEST TIME OUT VALUE
	ENTRY	X25:ON	POWER ON ROUTINE
	ENTRY	DRX25	ACTIVATION 
* 
	EJECT
* 
********************************************
* 
*	E X T E R N A L S 
* 
********************************************
* 
*	ECB - DISPLACEMENTS 
* 
	EXTRN	ECBFC	FILE CODE
	EXTRN	ECBBA	BUFFER ADDRESS 
	EXTRN	ECBRL	REQUESTED LENGTH 
	EXTRN	ECBEL	EFFECTIVE LENGTH 
	EXTRN	ECBRC	RETURN CODE
	EXTRN	ECBCW1 
	EXTRN	ECBCW2 
* 
*	DWT - DISPLACEMENTS: FIXED PART 
* 
	EXTRN	DWTCHP	CHANNEL PARAMETERS
	EXTRN	DWTST	STATUS 
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	DWTOPT	OPTION
	EXTRN	DWTOR	ORDER
	EXTRN	DWTTAB	TTAB-ADDRESS
* 
	EJECT
* 
*	MONITOR ROUTINES
* 
	EXTRN	FNDTID	FIND TTAB-ADDRESS 
	EXTRN	SETIME	TIMER ROUTINE 
	EXTRN	ACTOT	TASK ACTIVATION ROUTINE
	EXTRN	TDISP	TOSS DISPATCHER
	EXTRN	MOVSU	MOVE DATA FROM SYSTEM TO USER
	EXTRN	MOVUS	MOVE DATA FROM USER TO SYSTEM
	EXTRN	TENDIO	TOSS END I/O ROUTINE
	EXTRN	GETBLK	GET A MONITOR BLOCK 
	EXTRN	FREBLK	RELEASE A MONITOR BLOCK 
	EXTRN	FNDDNT	FIND LOCAL DTE
	EXTRN	GETDST	GET SYMBOLIC DTE ADDRESS
	EXTRN	GETDNA	GET DTE NETWORK ADDRESS 
	EXTRN	GETDNT	GET DTE NETWORK ADDR.FOR A SPEC.TYPE
	EXTRN	SCTDCT	POINTER TO DC ADDR. TABLE 
	EXTRN	TRAC	TRACE ROUTINE 
	EXTRN	TRTASK	TTAB ADDRESS FOR #T-TASK
* 
*	TTAB DISPLACEMENTS
* 
         EXTRN    TTB:ST
	EXTRN	TTB:PW	PSW 
         EXTRN    TTB:SA           REGISTER SAVE AREA 
* 
	EJECT
****************************************************************************
* 
*	A PROGRAM VERSION USING MMU PAGING IS OBTAINED
*	BY SETTING MMUPAG TO 1
* 
MMUPAG	EQU	0
* 
****************************************************************************
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 TO 0
* 
CPU852	EQU	1
* 
*************************************************************************** 
* 
	EJECT
* 
X:A	EQU	1 
SYNRLN	EQU	X:A	NUMBER OF PHYSICAL LINES 
* 
X:B	EQU	600 
REQTIM	EQU	X:B	REQUEST TIME OUT VALUE(IN 100MS) 
* 
X:C	EQU	128 
SYMXDL	EQU	X:C	OVER ALL MAXIMUM USER DATA LENGTH
* 
X:D	EQU	3 
SYNRL1	EQU	X:D	# OF LOGICAL CHANNELS LINE 1 
* 
X:H	EQU	2 
SYMXW1	EQU	X:H	WINDOW SIZE,PACKET LEVEL,LINE 1
* 
X:L	EQU	128 
SYMDL1	EQU	X:L	MAXIMUM USER DATA LENGTH,LINE 1
* 
X:P	EQU	0 
SYNRP1	EQU	X:P	# OF PERMANENT VIRTUAL CIRCUITS,LINE1
* 
X:T	EQU	0 
CALDTE	EQU	X:T	LOCAL DTE-ADDRESS IN CALL PACKET ? 
* 
X:U	EQU	0 
STATI	EQU	X:U	STATISTICS OF HDLC PROTOCOL HANDLER 
* 
	EJECT
* 
	IFF	SYNRLN=1 
* 
X:E	EQU	3 
SYNRL2	EQU	X:E	# OF LOGICAL CHANNELS LINE 2 
* 
X:I	EQU	2 
SYMXW2	EQU	X:I	WINDOW SIZE,PACKET LEVEL,LINE 2
* 
X:M	EQU	128 
SYMDL2	EQU	X:M	MAXIMUM USER DATA LENGTH,LINE 2
* 
X:Q	EQU	0 
SYNRP2	EQU	X:Q	# OF PERMANENT VIRTUAL CIRCUITS,LINE 2 
* 
	IFF	SYNRLN=2 
* 
X:F	EQU	3 
SYNRL3	EQU	X:F	# OF LOGICAL CHANNELS,LINE 3 
* 
X:J	EQU	2 
SYMXW3	EQU	X:J	WINDOW SIZE,PACKET LEVEL,LINE 3
* 
X:N	EQU	128 
SYMDL3	EQU	X:N	MAXIMUM USER DATA LENGTH,LINE 3
* 
X:R	EQU	0 
SYNRP3	EQU	X:R	# OF PERMANENT VIRTUAL CIRCUITS,LINE 3 
* 
	IFF	SYNRLN=3 
* 
X:G	EQU	3 
SYNRL4	EQU	X:G	# OF LOGICAL CHANNELS,LINE 4 
* 
X:K	EQU	2 
SYMXW4	EQU	X:K	WINDOW SIZE,PACKET LEVEL,LINE 4
* 
X:O	EQU	128 
SYMDL4	EQU	X:O	MAXIMUM USER DATA LENGTH,LINE 4
* 
X:S	EQU	0 
SYNRP4	EQU	X:S	# OF PERMANENT VIRTUAL CIRCUITS,LINE 4 
* 
	XIF
* 
SYNRRC	EQU	2	# OF READ REQUESTS FOR HDLC
* 
SYNRTR	EQU	2	# OF WRITE REQUESTS FOR HDLC 
* 
SYUBNR	EQU	2	# OF INPUT BUFFERS FOR HDLC
* 
SYCLTM	EQU	600	CLEAR TIME OUT VALUE IN 100MS
* 
SYRETM	EQU	600	RESET TIME OUT VALUE IN 100MS

SYRSTM	EQU	600	RESTART TIME OUT VALUE IN 100MS
* 
BUFDEL	EQU	1	TIMER IN 100MS FOR WAIT FOR BUFFER 
* 
LOOP	EQU	0	LOOP TEST IN MODEM 
* 
TRACE	EQU	0	TRACE TASK IN SYSTEM
BYTE	FORM	8,8 
* 
	EJECT
* 
	IFT	SYNRLN=1 
PERMVC	EQU	SYNRP1 
SWITVC	EQU	SYNRL1-SYNRP1
	XIF
	IFT	SYNRLN=2 
PERMVC	EQU	SYNRP1+SYNRP2
SWDUM1	EQU	SYNRL1+SYNRL2
SWITVC	EQU	SWDUM1-PERMVC
	XIF
	IFT	SYNRLN=3 
PEDUM1	EQU	SYNRP1+SYNRP2
PERMVC	EQU	PEDUM1+SYNRP3
SWDUM1	EQU	SYNRL1+SYNRL2
SWDUM2	EQU	SWDUM1+SYNRL3
SWITVC	EQU	SWDUM2-PERMVC
	XIF
	IFT	SYNRLN=4 
PEDUM1	EQU	SYNRP1+SYNRP2
PEDUM2	EQU	SYNRP3+SYNRP4
PERMVC	EQU	PEDUM1+PEDUM2
SWDUM1	EQU	SYNRL1+SYNRL2
SWDUM2	EQU	SYNRL3+SYNRL4
SWDUM3	EQU	SWDUM1+SWDUM2
SWITVC	EQU	SWDUM3-PERMVC
	XIF
* 
*	TRANSLATION TABLE FROM THROUGHPUT CLASS 
*	TO WINDOW SIZE AND PACKET LENGTH
* 
CLAS1	BYTE	1,128	CLASS 1,LAYOUT: WINDOW SIZE/PACKET LENGTH
	BYTE	1,128	CLASS 2 
	BYTE	1,128	CLASS 3 
	BYTE	1,128	CLASS 4 
	BYTE	1,128	CLASS 5 
	BYTE	1,128	CLASS 6 
	BYTE	2,128	CLASS 7 
	BYTE	3,128	CLASS 8 
	BYTE	3,128	CLASS 9 
	BYTE	3,128	CLASS 10
	BYTE	3,128	CLASS 11
	BYTE	3,128	CLASS 12
	BYTE	3,128	CLASS 13
	BYTE	3,128	CLASS 14
	BYTE	3,128	CLASS 15
* 
	EJECT		DWT 
* 
*	DWT DISPLACEMENTS 
* 
	IFT	MMUPAG=0 
DWTDRD	EQU	/10	DWTTQ+2
	XIF
	IFT	MMUPAG=1 
DWTDRD	EQU	/14	DWTMEC+2 
	XIF
DWTSTB	EQU	DWTDRD	OFFSET REL START DWT TO STATISTIC BUFFER
DWTCHD	EQU	DWTDRD+2	CONFIG CHAIN LINK HEAD DWT
DWTCHN	EQU	DWTDRD+4	CONFIG CHAIN LINK NEXT DWT
DWTLAD	EQU	DWTDRD+6	LOCAL SYMBOLIC DTE ADDRESS
DWTRAD	EQU	DWTDRD+8	REMOTE SYMBOLIC DTE ADDRESS 
DWTWRO	EQU	DWTDRD+10	WRITE OPTION 
DWTLCN	EQU	DWTDRD+11	LOGICAL CHANNEL NUMBER 
DWTFNC	EQU	DWTDRD+12	FUNCTION CODE
DWTSTE	EQU	DWTDRD+13	DWT STATE
DWTRTV	EQU	DWTDRD+14	REQUEST TIMER VALUE
DWTRTP	EQU	DWTDRD+16	REQUEST TIMER POINTER
DWTRCI	EQU	DWTDRD+18	RETURN CODE INFORMATION
DWTRES	EQU	DWTDRD+20	CAUSE AND DIAGNOSTIC CODE FOR RESET
DWTCLE	EQU	DWTDRD+22	CAUSE AND DIAGNOSTIC CODE FOR CLEAR
DWTIPQ	EQU	DWTDRD+24	INPUT QUEUE(IF LC CLEARED) 
* 
*	IDENTIFICATION OF A DWT FOR A VC; USED IN DWTCHP
* 
DWTTYP	EQU	'VC'	VIRTUAL CIRCUIT 
* 
	EJECT		DWT 
* 
*	INTERNAL FUNCTION CODES; USED IN DWTFNC 
* 
OPESYS	EQU	/00	OPEN REQUEST 
CLOSYS	EQU	/02	CLOSE REQUEST
CONACT	EQU	/04	CONNECT ACTIVE REQUEST 
CONPAS	EQU	/06	CONNECT PASSIVE REQUEST
DISCAL	EQU	/08	DISCONNECT REQUEST 
ACCCAL	EQU	/0A	ACCEPT CALL
ACCDAT	EQU	/0C	ACCEPT DATA
REFDAT	EQU	/0E	REFUSE DATA REQUEST
WRIDAT	EQU	/10	WRITE REQUEST
WRIINT	EQU	/12	WRITE INTERRUPT
READAT	EQU	/14	READ REQUEST 
REASTA	EQU	/16	READ STATUS REQUEST
STATIS	EQU	/18	STATISTICAL REQUEST
* 
*	DWT STATE CODES; USED IN DWTSTE 
* 
DISCON	EQU	/00	DISCONNECTED STATE 
CONAD	EQU	/01	CONNECTED: ACCEPT DATA
CONRD	EQU	/02	CONNECTED: REFUSE DATA
INCALR	EQU	/03	INC.CALL RECEIVED(WITH ACC/REF CALL) 
INCALL	EQU	/04	INC.CALL REC.(WITHOUT ACC/REF CALL)
VCREL	EQU	/05	VC IS RELEASED
* 
*	OPTION CODES; USED IN DWTOPT AND DWTWRO 
* 
CLOOPT	EQU	/08	SOFT CLOSE 
MOPT	EQU	/10	M-BIT
CALOPT	EQU	/20	ACCEPT CALL
INTOPT	EQU	/40	INTERRUPT PACKET 
QOPT	EQU	/80	Q-BIT
* 
	EJECT		USER
* 
*	RETURN CODES OF A USER REQUEST
* 
ACPT.RC	EQU	/0000	ACCEPTED
RQUE.RC	EQU	/8000	REQUEST ERROR 
ABOT.RC	EQU	/4000	REQUEST ABORTED 
INTR.RC	EQU	/2000	INTERRUPT PACKET RECEIVED 
LAST.RC	EQU	/1000	LAST PACKET IN SEQUENCE 
NOTU.RC	EQU	/0800	NOT USED
QBIT.RC	EQU	/0400	Q-BIT SET IN PACKET 
NOLC.RC	EQU	/0200	LOGICAL CHANNEL NOT AVAILABLE 
DATA.RC	EQU	/0100	DATA RECEIVED AND QUEUED
MORE.RC	EQU	/0080	MORE INFORMATION
TIMO.RC	EQU	/0040	TIME OUT
RSET.RC	EQU	/0020	VC RESET,LOCAL OR REMOTE
SEQE.RC	EQU	/0010	SEQUENCE ERROR
INVL.RC	EQU	/0008	INVALID LENGTH
CLEA.RC	EQU	/0004	VC CLEARED,LOCAL OR REMOTE
LOGE.RC	EQU	/0002	LOGICAL ERROR 
PHYE.RC	EQU	/0001	PHYSICAL ERROR
TOLD.RC	EQU	/0001	RETURN INFO.TOLD TO USER(INTERNAL PAR.) 
* 
*	RETURN CODES FROM LEVEL 3 TO REQUEST HANDLER
* 
RTNOK	EQU	/00	RETURN CODE = OK
CLEBUS	EQU	/02	CLEAR REQUEST BUSY 
DISCRM	EQU	/04	REMOTE DISCONNECTED
HRDERR	EQU	/06	HARDWARE ERROR 
ILLSIZ	EQU	/0A	NO MAX. PACKET LENGTH WHEN M=1 
INVSTA	EQU	/0C	NO CORRECT LOG. CHANNEL STATE
MAXLNG	EQU	/0E	MAX. LENGTH EXCEEDED FOR TRANSM. 
NOLCAV	EQU	/10	NO LOGICAL CHANNEL AVAILABLE 
TMEOUT	EQU	/12	TIME OUT DETECTED
NOREMO	EQU	/14	REMOTE ADDRESS NOT SUPPORTED 
* 
	EJECT		USER
* 
*	DIAGNOSTIC CODES FOR THE REMOTE USER
* 
LOCPER	EQU	/01	LOCAL PROCEDURE ERROR
NOUSER	EQU	/02	NO USER KNOWN
NOTINT	EQU	/03	NO INTERESTED USER 
RESLCH	EQU	/04	LOCAL SEQUENCE ERROR 
* 
*	DIAGNOSTIC CODES FOR THE LOCAL USER 
* 
LOCCLE	EQU	/80	VC IS CLEARED LOCAL
RSTRED	EQU	/82	RESTART PACKET RECEIVED
* 
	EJECT		SYSTEM
* 
*	EQUATE VALUES FOR BUFFER LAY-OUT
* 
BFCHPT	EQU	-2	QUEUE CHAIN POINTER 
HDLC	EQU	/00	HDLC HEADER
GNFRM	EQU	/02	GENERAL FORMAT IDENTIFIER 
QBIT	EQU	/02	CHARACTER DISPLACEMENT OF Q-BIT
LCIDNT	EQU	/03	LOGICAL CHANNEL NUMBER 
IDENT	EQU	/04	PACKET TYPE 
MBIT	EQU	/04	CHARACTER DISPLACEMENT OF M-BIT
BEGDAT	EQU	/05	USER DATA IN DATA PACKET 
CAUSE	EQU	/05	RESET-, RESTART OR CLEARING CAUSE 
DGNCOD	EQU	/06	DIAGNOSTIC CODE
QPOS	EQU	/80	MASK FOR Q-BIT 
MPOS	EQU	/10	MASK FOR M-BIT 
* 
*	EQUATE VALUES FOR PACKET TYPES
* 
CAL.P	EQU	/0B	CALL PACKET 
CAL.CP	EQU	/0F	CALL CONFIRMATION PACKET 
CLE.P	EQU	/13	CLEAR PACKET
CLE.CP	EQU	/17	CLEAR CONFIRMATION PACKET
DATA.P	EQU	/01	DATA PACKET
INT.P	EQU	/23	INTERRUPT PACKET
INT.CP	EQU	/27	INTERRUPT CONFIRMATION PACKET
RR.P	EQU	/01	RR-PACKET
RNR.P	EQU	/05	RNR-PACKET
RSET.P	EQU	/1B	RESET PACKET 
RSET.CP	EQU	/1F	RESET CONFIRMATION PACKET 
RSTR.P	EQU	/FB	RESTART PACKET 
RSTR.CP	EQU	/FF	RESTART CONFIRMATION PACKET 
	EJECT		SYSTEM
* 
*	EQUATE VALUES FOR PACKET LENGTH 
* 
CAL.CL	EQU	/05	CALL CONFIRMATION
CLE.L	EQU	/07	CLEAR PACKET
CLE.CL	EQU	/05	CLEAR CONFIRMATION PACKET
INT.L	EQU	/06	INTERRUPT PACKET
INT.CL	EQU	/05	INTERRUPT CONFIRMATION PACKET
RR.L	EQU	/05	RR-PACKET
RSET.L	EQU	/07	RESET PACKET 
RSET.CL	EQU	/05	RESET CONFIRMATION PACKET 
RSTR.L	EQU	/07	RESTART PACKET 
RSTR.CL	EQU	/05	RESTART CONFIRMATION PACKET 
* 
*	SYSTEM VARIABLES
* 
NEG	EQU	/8000 
LOCAL	EQU	'LP'	LOCAL PACKET SWITCHING DTE 
SVCTYP	EQU	'RS'	REMOTE DTE REACHED VIA SVC
PVCTYP	EQU	'RP'	REMOTE DTE REACHED VIA PVC
TSKID	EQU	'#X'	TASK IDENTIFICATION X25-TASK 
SAVE	RES	8	SAVE AREA
THRESH	DATA	50	PERCENTAGE FOR WIND. UPDATING
DCLEVL	DATA	0	PROCESS INDICATION DC-TASK
	DATA	0,0	EXTEND DC-STACK 
	RES	12	CALL FUNCTION STACK 
DCSTAK	EQU	*-2	STACK POINTER
* 
* 
	EJECT		LC
* 
*	LOGICAL CHANNEL TABLE DISPLACEMENT
* 
LCSTAT	EQU	0	STATUS 
LCSBST	EQU	LCSTAT+1	SUB-STATUS
VCTYP	EQU	LCSBST+1	CIRCUIT TYPE 
LCNUM	EQU	VCTYP+1	LOG. CHANNEL NUMBER 
LCDWT	EQU	LCNUM+1	DWT ADDRESS 
LCTHRE	EQU	LCDWT+2	THRESHOLD VALUE
NRNUBF	EQU	LCTHRE+1	# OF NOT USED BUFFERS 
QUEINP	EQU	NRNUBF+1	INPUT QUEUE ANCHOR
QUEOUT	EQU	QUEINP+2	OUTPUT QUEUE ANCHOR 
LCTRWN	EQU	QUEOUT+2	TRANSMIT WINDOW 
LCREWN	EQU	LCTRWN+1	RECEIVE WINDOW
PS	EQU	LCREWN+1	NEXT PACKET SEND SEQU. NR.
PR	EQU	PS+1	CURRENT PACKET RECEIVE SEQU. NR.
RPS	EQU	PR+1	NEXT PS TO BE RECIEVED 
SLWE	EQU	RPS+1	SEND LWE = LAST RECEIVED PR
RLWE     EQU      SLWE+1           LAST TRANSMITTED PR
NOUSE	EQU	RLWE+1	NOT USED 
REMADR	EQU	NOUSE+1	REMOTE DTE IF PVC
REBFSZ	EQU	REMADR+2	MAX.RECEIVE PACKET LENGTH 
TRBFSZ	EQU	REBFSZ+2	MAX. TRANSM. PACKET LENGTH
FLAGS	EQU	TRBFSZ+2	FLAGS
TIMADR	EQU	FLAGS+2	TIMER ADDRESS
SYSBUF	EQU	TIMADR+4	SYSTEM OUTPUT BUFFER
LCALNG	EQU	SYSBUF+8	TABLE LENGTH
* 
	EJECT		LC
* 
*	EQUATE VALUES FOR LOGICAL CHANNEL STATUS
* 
READ.ST	EQU	/00	READY STATE 
LCAL.ST	EQU	/01	LOCAL CALL STATE
RCAL.ST	EQU	/02	REMOTE CALL STATE 
DATA.ST	EQU	/03	DATA TRANSFER STATE 
CLEA.ST	EQU	/04	CLEAR STATE 
FLCN.ST	EQU	/00	FLOW CONTROL READY SUB-STATE
RSET.ST	EQU	/01	RESET SUB-STATE 
* 
*	EQUATE VALUES FOR CIRCUIT TYPE
* 
PVC	EQU	/01	PERMANENT VIRTUAL CIRCUIT 
SVC	EQU	/00	SWITCHED VIRTUAL CIRCUIT
* 
	EJECT		LINE
* 
*	LINE ADMINISTRATION BLOCK DISPLACEMENTS 
* 
FILCOD	EQU	0	FILE CODE FOR LINE ADDRESSING
LC:TAB	EQU	FILCOD+2	LC-ADM'S TABLE ADDRESS
PACKLN	EQU	LC:TAB+2	MAXIMUM PACKET LENGTH 
WNDSIZ	EQU	PACKLN+2	MAXIMUM WINDOW SIZE 
NRLC	EQU	WNDSIZ+2	# OF LOGICAL CHANNELS 
NRPVC	EQU	NRLC+1	# OF PERMANENT VIRTUAL CIRCUITS
CHAIN	EQU	NRPVC+1	ANCHOR FOR CONNECTED DWT'S
NRPNDT	EQU	CHAIN+2	# OF PENDING TRANSMIT REQUESTS 
RSTQUE	EQU	NRPNDT+2	RESTART QUEUE ANCHOR
RTMADR	EQU	RSTQUE+2	RESTART CONF. TIMER ADDRESS 
HRDSTA	EQU	RTMADR+2	HARDWARE STATUS 
CMNFLG	EQU	HRDSTA+2	COMMON FLAGS
LOCECB	EQU	CMNFLG+2	LINE OPEN/CLOSE ECB 
UBNUM	EQU	LOCECB+12	BLOCK FOR (DIS)CONNECT REQUEST
	IFF	MMUPAG+STATI=2 
D1	EQU	UBNUM+SYUBNR+2 
ECBINL	EQU	12	LENGTH INPUT/OUTPUT ECB'S 
SYSBFL	EQU	SYMXDL+BEGDAT+1	BUFFER LENGTH
ECBIN1	EQU	D1+SYUBNR	LINE INPUT ECB'S 
	XIF
	IFT	MMUPAG+STATI=2 
D1	EQU	UBNUM+SYUBNR+2 
INTSTB	EQU	D1+SYUBNR	INTERMEDIATESTATISTIC BUFFER 
ECBINL	EQU	12	LENGTH INPUT/OUTPUT ECB'S 
SYSBFL	EQU	SYMXDL+BEGDAT+1	BUFFER LENGTH
ECBIN1	EQU	INTSTB+42	LINE INPUT ECB'S 
	XIF
	IFF	SYNRRC=1 
ECBIN2	EQU	ECBIN1+ECBINL
	IFF	SYNRRC=2 
ECBIN3	EQU	ECBIN2+ECBINL
	IFF	SYNRRC=3 
ECBIN4	EQU	ECBIN3+ECBINL
	XIF
* 
	EJECT		LINE
* 
	IFT	SYNRRC=1 
ECBOU1	EQU	ECBIN1+ECBINL
	XIF
	IFT	SYNRRC=2 
ECBOU1	EQU	ECBIN2+ECBINL
	XIF
	IFT	SYNRRC=3 
ECBOU1	EQU	ECBIN3+ECBINL
	XIF
	IFT	SYNRRC=4 
ECBOU1	EQU	ECBIN4+ECBINL
	XIF
SYSOU1	EQU	ECBOU1+ECBINL
	IFF	SYNRTR=1 
ECBOU2	EQU	SYSOU1+SYSBFL
SYSOU2	EQU	ECBOU2+ECBINL
	IFF	SYNRTR=2 
ECBOU3	EQU	SYSOU2+SYSBFL
SYSOU3	EQU	ECBOU3+ECBINL
	IFF	SYNRTR=3 
ECBOU4	EQU	SYSOU3+SYSBFL
SYSOU4	EQU	ECBOU4+ECBINL
	XIF
	IFT	SYNRTR=1 
LNBLNG	EQU	SYSOU1+SYSBFL
	XIF
	IFT	SYNRTR=2 
LNBLNG	EQU	SYSOU2+SYSBFL
	XIF
	IFT	SYNRTR=3 
LNBLNG	EQU	SYSOU3+SYSBFL
	XIF
	IFT	SYNRTR=4 
LNBLNG	EQU	SYSOU4+SYSBFL
	XIF
* 
	EJECT		LINE
* 
*	ORDER CODES FOR HDLC PROTOCOL HANDLER 
* 
CONN	EQU	/21	CONNECT REQUEST
DISCN	EQU	/22	DISCONNECT REQUEST
RECEIV	EQU	/02	INPUT REQUEST
TRANSM	EQU	/06	OUTPUT REQUEST 
STATR	EQU	/2D	STATISTIC REQUEST 
* 
*	RETURN CODES FOR HDLC PROTOCOL HANDLER
* 
HRDWER	EQU	/8000	HARDWARE ERROR 
REMDIS	EQU	/000D	REMOTE DISCONNECTED
DEFTIM	EQU	/000E	DEFINITE TIME-OUT
* 
*	EQUATE VALUES FOR FLAG POSITIONS
* 
CONTIM	EQU	/10	CONFIRMATION TIMER RUNNING 
INTPNG	EQU	/20	INTERRUPT PENDING
REMBUS	EQU	/40	REMOTE BUSY
NPRFLG	EQU	/01	NO PROCESSING FLAG FOR QUEUES
* 
*	EQUATE VALUES FOR THE COMMON FLAGS
* 
RSTFLG	EQU	/01	RESTART BUSY 
STRTFL	EQU	/80	LINE CONNECTED FLAG
STATFL	EQU	/04	STATISTIC REQUEST BUSY FLAG
CLOFLG   EQU      /10                  CLOSE BUSY FLAG
OPEFLG   EQU      /20                  OPEN BUSY FLAG 
* 
	EJECT
* 
*	BLOCK WITH ADDRESSES OF LINE ADMINISTRATION BLOCKS
* 
LINTAB	DATA	LINBL1	ADDRESS 1ST LINE ADM. BLOCK
	IFF	SYNRLN=1 
	DATA	LINBL2	ADDRESS 2ND LINE ADM. BLOCK
	IFF	SYNRLN=2 
	DATA	LINBL3	ADDRESS 3TH LINE ADM. BLOCK
	IFF	SYNRLN=3 
	DATA	LINBL4	ADDRESS 4TH LINE ADM. BLOCK
	XIF
* 
*	FIRST LINE ADMINISTRATION BLOCK 
* 
LINBL1	EQU	*
	DATA	/60	FILE CODE 
	DATA	LCADM1	LOG. CHANNEL ADM. POINTER
	DATA	SYMDL1	MAX. PACKET LENGTH 
	DATA	SYMXW1	MAX. WINDOW SIZE 
	BYTE	SYNRL1,SYNRP1	# OF LOG.CH. AND # OF PVC'S 
	RORG	LINBL1+LNBLNG 
* 
*	BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
* 
LCADM1	EQU	*
	DATA	LCAD1.1 
	IFF	SYNRL1=1 
	DATA	LCAD1.2 
	IFF	SYNRL1=2 
	DATA	LCAD1.3 
	IFF	SYNRL1=3 
	DATA	LCAD1.4 
	IFF	SYNRL1=4 
	DATA	LCAD1.5 
	IFF	SYNRL1=5 
	DATA	LCAD1.6 
	IFF	SYNRL1=6 
	DATA	LCAD1.7 
	IFF	SYNRL1=7 
	DATA	LCAD1.8 
	XIF
	EJECT
* 
*	LOGICAL CHANNEL ADMINISTRATION BLOCKS 
* 
LCAD1.1	EQU	* 
	RORG	LCAD1.1+LCALNG
	IFF	SYNRL1=1 
LCAD1.2	EQU	* 
	RORG	LCAD1.2+LCALNG
	IFF	SYNRL1=2 
LCAD1.3	EQU	* 
	RORG	LCAD1.3+LCALNG
	IFF	SYNRL1=3 
LCAD1.4	EQU	* 
	RORG	LCAD1.4+LCALNG
	IFF	SYNRL1=4 
LCAD1.5	EQU	* 
	RORG	LCAD1.5+LCALNG
	IFF	SYNRL1=5 
LCAD1.6	EQU	* 
	RORG	LCAD1.6+LCALNG
	IFF	SYNRL1=6 
LCAD1.7	EQU	* 
	RORG	LCAD1.7+LCALNG
	IFF	SYNRL1=7 
LCAD1.8	EQU	* 
	RORG	LCAD1.8+LCALNG
	XIF
	IFF	SYNRLN=1 
	EJECT
* 
*	SECOND LINE ADMINISTRATION BLOCK
* 
LINBL2	EQU	*
	DATA	/61	FILE CODE 
	DATA	LCADM2	LOG. CHANNEL ADM. POINTER
	DATA	SYMDL2	MAX. PACKET LENGTH 
	DATA	SYMXW2	MAX. WINDOW SIZE 
	BYTE	SYNRL2,SYNRP2	# OF LOG.CH. AND # OF PVC'S 
	RORG	LINBL2+LNBLNG 
* 
*	BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
* 
LCADM2	EQU	*
	DATA	LCAD2.1 
	IFF	SYNRL2=1 
	DATA	LCAD2.2 
	IFF	SYNRL2=2 
	DATA	LCAD2.3 
	IFF	SYNRL2=3 
	DATA	LCAD2.4 
	IFF	SYNRL2=4 
	DATA	LCAD2.5 
	IFF	SYNRL2=5 
	DATA	LCAD2.6 
	IFF	SYNRL2=6 
	DATA	LCAD2.7 
	IFF	SYNRL2=7 
	DATA	LCAD2.8 
	XIF
	EJECT
	IFF	SYNRLN=1 
* 
*	LOGICAL CHANNEL ADMINISTRATION BLOCKS 
* 
LCAD2.1	EQU	* 
	RORG	LCAD2.1+LCALNG
	IFF	SYNRL2=1 
LCAD2.2	EQU	* 
	RORG	LCAD2.2+LCALNG
	IFF	SYNRL2=2 
LCAD2.3	EQU	* 
	RORG	LCAD2.3+LCALNG
	IFF	SYNRL2=3 
LCAD2.4	EQU	* 
	RORG	LCAD2.4+LCALNG
	IFF	SYNRL2=4 
LCAD2.5	EQU	* 
	RORG	LCAD2.5+LCALNG
	IFF	SYNRL2=5 
LCAD2.6	EQU	* 
	RORG	LCAD2.6+LCALNG
	IFF	SYNRL2=6 
LCAD2.7	EQU	* 
	RORG	LCAD2.7+LCALNG
	IFF	SYNRL2=7 
LCAD2.8	EQU	* 
	RORG	LCAD2.8+LCALNG
	XIF
	IFF	SYNRLN=1 
	IFF	SYNRLN=2 
	EJECT
* 
*	THIRTH LINE ADMINISTRATION BLOCK
* 
LINBL3	EQU	*
	DATA	/62	FILE CODE 
	DATA	LCADM3	LOG. CHANNEL ADM. POINTER
	DATA	SYMDL3	MAX. PACKET LENGTH 
	DATA	SYMXW3	MAX. WINDOW SIZE 
	BYTE	SYNRL3,SYNRP3	# OF LOG.CH. AND # OF PV'S
	RORG	LINBL3+LNBLNG 
* 
*	BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
* 
LCADM3	EQU	*
	DATA	LCAD3.1 
	IFF	SYNRL3=1 
	DATA	LCAD3.2 
	IFF	SYNRL3=2 
	DATA	LCAD3.3 
	IFF	SYNRL3=3 
	DATA	LCAD3.4 
	IFF	SYNRL3=4 
	DATA	LCAD3.5 
	IFF	SYNRL3=5 
	DATA	LCAD3.6 
	IFF	SYNRL3=6 
	DATA	LCAD3.7 
	IFF	SYNRL3=7 
	DATA	LCAD3.8 
	XIF
	EJECT
	IFF	SYNRLN=1 
	IFF	SYNRLN=2 
* 
*	LOGICAL CHANNEL ADMINISTRATION BLOCKS 
* 
LCAD3.1	EQU	* 
	RORG	LCAD3.1+LCALNG
	IFF	SYNRL3=1 
LCAD3.2	EQU	* 
	RORG	LCAD3.2+LCALNG
	IFF	SYNRL3=2 
LCAD3.3	EQU	* 
	RORG	LCAD3.3+LCALNG
	IFF	SYNRL3=3 
LCAD3.4	EQU	* 
	RORG	LCAD3.4+LCALNG
	IFF	SYNRL3=4 
LCAD3.5	EQU	* 
	RORG	LCAD3.5+LCALNG
	IFF	SYNRL3=5 
LCAD3.6	EQU	* 
	RORG	LCAD3.6+LCALNG
	IFF	SYNRL3=6 
LCAD3.7	EQU	* 
	RORG	LCAD3.7+LCALNG
	IFF	SYNRL3=7 
LCAD3.8	EQU	* 
	RORG	LCAD3.8+LCALNG
	XIF
	IFF	SYNRLN=1 
	IFF	SYNRLN=2 
	IFF	SYNRLN=3 
	EJECT
* 
*	FOURTH LINE ADMINISTRATION BLOCK
* 
LINBL4	EQU	*
	DATA	/63	FILE CODE 
	DATA	LCADM4	LOG. CHANNEL ADM. POINTER
	DATA	SYMDL4	MAX. PACKET LENGTH 
	DATA	SYMXW4	MAX. WINDOW SIZE 
	BYTE	SYNRL4,SYNRP4	# OF LOG.CH. AND # OF PVC'S 
	RORG	LINBL4+LNBLNG 
* 
*	BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
* 
LCADM4	EQU	*
	DATA	LCAD4.1 
	IFF	SYNRL4=1 
	DATA	LCAD4.2 
	IFF	SYNRL4=2 
	DATA	LCAD4.3 
	IFF	SYNRL4=3 
	DATA	LCAD4.4 
	IFF	SYNRL4=4 
	DATA	LCAD4.5 
	IFF	SYNRL4=5 
	DATA	LCAD4.6 
	IFF	SYNRL4=6 
	DATA	LCAD4.7 
	IFF	SYNRL4=7 
	DATA	LCAD4.8 
	XIF
	EJECT
	IFF	SYNRLN=1 
	IFF	SYNRLN=2 
	IFF	SYNRLN=3 
* 
*	LOGICAL CHANNEL ADMINISTRATION BLOCKS 
* 
LCAD4.1	EQU	* 
	RORG	LCAD4.1+LCALNG
	IFF	SYNRL4=1 
LCAD4.2	EQU	* 
	RORG	LCAD4.2+LCALNG
	IFF	SYNRL4=2 
LCAD4.3	EQU	* 
	RORG	LCAD4.3+LCALNG
	IFF	SYNRL4=3 
LCAD4.4	EQU	* 
	RORG	LCAD4.4+LCALNG
	IFF	SYNRL4=4 
LCAD4.5	EQU	* 
	RORG	LCAD4.5+LCALNG
	IFF	SYNRL4=5 
LCAD4.6	EQU	* 
	RORG	LCAD4.6+LCALNG
	IFF	SYNRL4=6 
LCAD4.7	EQU	* 
	RORG	LCAD4.7+LCALNG
	IFF	SYNRL4=7 
LCAD4.8	EQU	* 
	RORG	LCAD4.8+LCALNG
	XIF
* 
	EJECT
* 
* 
*	BUFFER POOL 
* 
*        THE SIZE OF THE BUFFER AREAS CAN BE OBTAINED IN THE FOLLOWING WAY
*          NUMBER OF BUFFERS NEEDED PER LOGICAL CHANNEL = WINDOW SIZE 
*          PER LINE SYNRRC BUFFERS FOR INPUT REQUEST AND SYUBNR BUFFERS 
*          TO BE USED BY HDLC 
*          THE TOTAL NUMBER OF BUFFERS CAN THEN BE CALCULATED BY THE FORMULA
*          SYNRLN*(SYNRRC+SYUBNR)+SYNRL1*SYMXW1+SYNRL2*SYMXW2+.... ETC
* 
*        THE BUFFER LENGTH IS OBTAINED BY SYMXDL+BEGDAT+1. THIS IS THE LENGTH 
*        IN CHARACTERS. THIS LENGTH HAS TO BE EVEN (CHAIN POINTER FOR 
*        QUEUEING EXCLUDED) 
* 
BUFLEN EQU SYMXDL+BEGDAT+1
* 
*        THE POOLSIZE IN WORDS IS OBTAINED BY NRBUF*(BUFLEN+2)/2
* 
X:V	EQU	680 
POOLEN	EQU	X:V	LENGTH OF BUFFER POOL
BUFPOL	EQU	*
	RES	POOLEN	POOL AREA 
	DATA	0	END OF QUEUE
BPEND	EQU	* 
* 
*	BUFFER POOL CHAIN ANCHOR
* 
BUFANC	DATA	BUFPOL
* 
	EJECT
* 
*	TTAB FOR #X-TASK IN X25 PACKAGE 
* 
	IFT	MMUPAG=1 
	DATA	0,0,0,0,0,0,0,0	MMU TABLE 
	DATA	0,0,0,0,0,0,0,0	. 
	DATA	0	CURRENT SEGMENT BASE
	DATA	0	SEGMENT TABLE POINTER 
	DATA	0	SEGMENT BLOCK POINTER 
	XIF
	DATA	0	APPLICATION CONTROL BLOCK POINTER 
TTBX25	EQU	*
	DATA	0	DISPATCHER QUEUE LINK 
	DATA	'#X'	TASK IDENTIFICATION
	DATA	50	PRIORITY LEVEL 
	DATA	0	PENDING POINTER 
	DATA	/C8C0	PSW(PROGRAM STATUS WORD)
	DATA	0	DISPATCH ADDRESS
	DATA	0,0,0,0,0,0,0,0	REGISTER SAVE AREA,A1-A14 
	DATA	0,0,0,0,0,0,0	. 
* 
	EJECT
* 
* 
*	MODULE CALLED BY TOSSIO FOR AN USER REQUEST 
* 
********************************************
* 
*	INPUT PARAMETER:
*		A6 = DWT-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABI    DRX25 
* 
***** DRIVER ADDRESS BLOCK *****
	DATA	SYMXDL	BUFFER LENGTH
	DATA	0	DEVICE INDEX
DRX25	EQU	* 
	DATA	DRX250	ACTIVATION ADDRESS 
	DATA	ABTREQ	ABORT ROUTINE ADDRESS
********************************
DRX250	EQU	*
	LDR	A1,A6	PARAMETER
	LDKL	A5,TTBX25	GET TTAB ADDRESS
	LDKL	A2,RHOP	ACTIVATION ADDRESS
	LDK	A3,0 
	CF	A15,ACTOT	ACTIVATE #X-TASK
	ABL	TDISP
	EJECT
* 
* 
*	THIS MODULE IS CALLED AT MONITOR INITIATION TIME
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		NONE 
* 
*	CALLING SEQUENCE: 
*		CF    A15,X25:ON 
* 
X25:ON	EQU	*
	LDKL	A1,LINTAB	TABLE WITH LINE BLOCK ADDRESSES 
	IFF	SYNRLN=1 
	LDK	A2,SYNRLN	NUMBER OF LINES
	XIF
* 
*	INITIATE LINE BLOCK 
* 
X25ON1	EQU	*
	LDR*	A4,A1	LINE BLOCK ADDRESS
	CM	CMNFLG,A4	CLEAR FLAG
	LD	A6,CHAIN,A4	ANY DWT IN CHAIN ?
	RF(Z)	X25ON3	NO
* 
*	INITIATE DWT
* 
X25ON2	EQU	*
	LDKL	A3,NEG
	ST	A3,DWTST,A6	SET STATUS
	CM	DWTFNC,A6	CLEAR FUNCTION CODE AND STATE 
	CM	DWTRTP,A6	CLEAR RUNNING TIMER INDICATION
	LD	A3,DWTCHN,A6	MORE DWT'S FOR THIS LINE ? 
* 
	EJECT
	CM	DWTCHN,A6	. 
	LDR	A6,A3	.
	RB(NZ)	X25ON2	YES
	CM	CHAIN,A4	RESET CHAIN
X25ON3	EQU	*
	IFF	SYNRLN=1 
	ADK	A1,2 
	SUK	A2,1	NEXT LINE ? 
	RB(P)	X25ON1	YES 
	XIF
* 
*	INITIATE BUFFER POOL
* 
	LDKL	A2,BUFPOL	START ADDRESS OF BUFFER POOL
	ST	A2,BUFANC	BUFFER POOL ANCHOR
X25ON4	EQU	*
	LDR	A1,A2	SAVE BUFFER ADDRESS
	ADK	A2,BUFLEN+2
	STR	A2,A1	CREATE CHAIN 
	LDR	A3,A2
	SUKL	A3,BPEND	END OF BUFFER POOL REACHED ? 
	RB(L)	X25ON4	NO
	CMR	A1	END OF CHAIN
	IFT	TRACE=1
* 
*	ACTIVATE TRACE TASK 
* 
	LDKL	A2,TRAC	ACTIVATION ADDRESS
	LDKL	A5,TRTASK	TTAB ADDRESS
	CF	A15,ACTOT	ACTIVATE #T-TASK
	XIF
	RTN	A15	READY
	EJECT
* 
*	ABORT REQUEST HANDLER 
* 
********************************************
* 
*	INPUT PARAMETER:
*		A6 = DWT-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		CF    A15,ABTREQ 
* 
*	OUTPUT PARAMETERS:
*		NONE 
*		WHEN IT IS A ILLEGAL REQUEST THE ROUTINE WILL HALT 
* 
ABTREQ	EQU	*
	LDK	A1,READAT	WAS IT A READ REQUEST ?
	CC	A1,DWTFNC,A6	.
	RF(NE)	ABT000	NO 
         LD       A1,DWTRTP,A6
         LDR      A8,A14
         LDKL     A14,DCSTAK
         CF       A14,CANTIM            CANCEL TIMER
         LDR      A14,A8
         CM       DWTRTP,A6 
         LD       A8,DWTECB,A6
         ST       A1,ECBCW1,A8
	LDKL	A1,ABOT.RC	RETURN CODE = ABORTED
	CF	A15,TENDIO	COMPLETE REQUEST 
ABT000	EQU	*
	ABL	TDISP	DISPATCH 
	EJECT
* 
************************************************************
* 
*	REQUEST HANDLER OUTPUT PART 
* 
************************************************************
* 
RHOP	EQU	*
         LDK      A2,2
         ST       A2,DCLEVL        SET PROCESS INDICATION 
	LDR	A6,A1	COPY DWT ADDRESS 
	LD	A8,DWTECB,A6
	LC	A4,DWTSTE,A6
	LD	A5,ECBRL,A8 
	LD	A7,DWTOR,A6	GET ORDER CODE
	LDKL	A11,TRANSP	ROUTINE TO CALL TRANSPORT HANDLER
	LDKL	A14,DCSTAK	SUBR.STACK POINTER 
	ANK	A7,/3F	MASK ORDER CODE 
	RF(Z)	RSTS00	READ STATUS 
	SUK	A7,2 
	RF(Z)	READ00	READ
	SUK	A7,/06-/02 
	RF(Z)	WRIT00	WRITE 
	SUK	A7,/21-/06 
	ABL(Z)	OPEN00	OPEN 
	SUK	A7,/22-/21 
	ABL(Z)	CLOS00	CLOSE
	SUK	A7,/24-/22 
	ABL(Z)	CONA00	CONNECT ACTIVE 
* 
	EJECT
* 
	SUK	A7,/27-/24 
	ABL(Z)	CONP00	CONNECT PASSIVE
	SUK	A7,/2F-/27 
	ABL(Z)	DISC00	DISCONNECT 
	SUK	A7,/38-/2F 
	ABL(Z)	STAT00	SET STATUS 
	SUK	A7,/39-/38 
	ABL(Z)	TIMO00	SET TIME OUT 
	IFT	STATI=1
	ADK	A7,/39 
	SUK	A7,/2D 
	ABL(Z)	STATS	STATISTICS
	XIF
ERRREQ	EQU	*
	LDKL	A1,RQUE.RC	REQUEST ERROR
	ABL	RHEXIT	COMPLETE REQUEST
* 
	EJECT
* 
********************************************************************* 
* 
*	READ STATUS REQUEST 
* 
********************************************************************* 
* 
RSTS00	EQU	*
	LD	A1,DWTLAD,A6	GET LOCAL DTE ADDRESS
	CF	A14,FNDLIN	GET LINE FLAGS 
	SLL	A1,8 
	ANK	A4,/FF	GET DWT STATE 
	ORR	A4,A1	PUT IT TOGETHER
	ST	A4,ECBCW1,A8
	LDK	A2,DWTRCI
	ADR	A2,A6
	LDR*	A1,A2	GET RETURN CODE INFO. 
	LDR	A7,A1
	ANKL	A1,-2	RESET TOLD.RC-BIT 
	ANK	A7,MORE.RC	MORE INFORMATION ?
	ABL(Z)	RHEXIT	NO 
	ADK	A5,0	REQUESTED LENGTH
	RF(Z)	RSTS10	NO USER BUFFER
	ABL(N)	ERRLEN	INCORRECT LENGTH 
	SUK	A5,1 
	ABL(NP)	ERRLEN	BUFFER TO SHORT 
* 
	EJECT
* 
*	MORE INFORMATION FOUND
* 
RSTS10	EQU	*
	XRRS	A7,A2	RESET MORE INFO BIT 
	IFF	SWITVC=0 
	ANK	A1,RSET.RC+CLEA.RC 
	LDR	A7,A1
	ANK	A1,RSET.RC	RESET ? 
	RF(Z)	RSTS30	NO
	XRRS	A1,A2	RESET RESET-BIT 
* 
*	TEST IF RESET AND CLEAR 
* 
	ANK	A7,CLEA.RC 
	RF(Z)	RSTS15	NO
	LDK	A7,MORE.RC	SET MORE INFO-BIT 
	XRRS	A7,A2	. 
RSTS15	EQU	*
	XIF
	LDK	A7,RSET.RC	RESET 
	LDK	A2,DWTRES	DISP FOR RESET INFO
	ADK	A5,0	USER BUFFER ? 
	ABL(Z)	RHEXIT	NO 
* 
	EJECT
* 
*	MOVE RESET/CLEAR INFORMATION
* 
RSTS20	EQU	*
	ADR	A2,A6
	LDK	A3,2	LENGTH
	ST	A3,ECBEL,A8 
	IFT	MMUPAG=1 
	LDR	A1,A2
	LD	A2,ECBBA,A8	USER BUFFER 
	LD	A4,DWTTAB,A6
	INH		.	=1
	CF	A15,MOVSU	MOVE RESET INFORMATION TO USER
	ENB		.	=1
	XIF
	IFT	MMUPAG=0 
	LDR*	A1,A2	MOVE INFO...
	ST*	A1,ECBBA,A8	...TO USER BUFFER
	XIF
	LDR	A1,A7
	RF	RHEXIT
	IFF	SWITVC=0 
RSTS30	EQU	*
	LDR	A1,A7
	ANK	A1,CLEA.RC	CLEAR ? 
	RF(Z)	RHEXIT	COMPLETE REQUEST
	LDK	A3,TOLD.RC	SET 'TOLD TO USER'-INDICATION 
	ORRS	A3,A2	. 
	LDK	A2,DWTCLE	DISP FOR CLEAR INFO
	ADK	A5,0	USER BUFFER ? 
	RB(NZ)	RSTS20
	RF	RHEXIT	COMPLETE REQUEST 
	XIF
* 
	EJECT
* 
************************************************************
* 
*	READ,WRITE AND SET STATUS REQUEST 
* 
************************************************************
* 
READ00	EQU	*
WRIT00	EQU	*
STAT00	EQU	*
	LD	A1,DWTLAD,A6
	CF	A14,FNDLIN	FIND LINE BLOCK ADDRESS
	ANK	A1,STRTFL	MASK START FLAG
	ABL(Z)	ERRSYS	INCORRECT SYSTEM STATE 
	ANK	A4,/FF 
	LDR	A3,A4	DWTSTE 
	RF(Z)	ERRSTE	INCORRECT DWT STATE 
* 
*        GET LC-ADM ADDRESS 
* 
	LC	A4,DWTLCN,A6
	CF	A14,GTLCAD
* 
*	TEST ON RETURN INFORMATION
* 
	LD	A1,DWTRCI,A6	GET RETURN CODE INFORMATION
	LDR	A2,A1
	ANK	A2,MORE.RC	MORE INFO ? 
	RF(Z)	READ20	NO
	LDR	A2,A1
	ANK	A2,TOLD.RC	RETURN INFO TOLD TO USER ?
	IFF	SWITVC=0 
	RF(NZ)	READ10	YES
	XIF
	IFT	SWITVC=0 
	RF(NZ)	READ15	YES
	XIF
	EJECT
* 
	LDK	A2,TOLD.RC	TELL RETURN INFO TO USER
	ORS	A2,DWTRCI,A6 
	RF	RHEXIT	COMPLETE REQUEST 
	IFF	SWITVC=0 
* 
*	TEST IF RESET/CLEAR 
* 
READ10	EQU	*
	XRR	A1,A2
	ANK	A1,CLEA.RC	CLEAR ? 
	RF(Z)	READ15	NO
	LDR	A1,A2
	ANK	A2,RSET.RC	RESET ? 
	RF(Z)	RHEXIT	NO
* 
*	RESET AND CLEAR 
* 
	XRS	A2,DWTRCI,A6	RESET RESET-BIT 
	XRR	A1,A2	INFORM USER ABOUT THE CLEAR
	RF	RHEXIT
	XIF
READ15	EQU	*
	LDK	A1,RSET.RC+MORE.RC+1 
	XRS	A1,DWTRCI,A6	RESET RETURN INFO 
* 
*	SEPARATE THE REQUESTS 
* 
READ20	EQU	*
	LD	A4,DWTOR,A6 
	ANK	A4,/3F 
	SUK	A4,6 
	RF(Z)	WRIT05	WRITE REQUEST 
	ABL(P)	STAT05	SET STATUS REQUEST 
	EJECT
* 
*        READ REQUEST 
* 
	SU	A5,REBFSZ,A13	RECEIVE BUFFER SIZE 
	RF(L)	ERRLEN	INCORRECT LENGTH
* 
*        BRANCH ON DWT STATE
* 
	LDK	A2,READAT	FUNCTION CODE
         LDR      A4,A3            SAVE DWT STATE 
	ADR	A3,A3
	SUK	A3,ENDRST+2	TEST+2 UPPER BOUND 
	ABI(L)	RSTATE+ENDRST,A3	BRANCH ON STATE
* 
*        STATE TABLE,READ 
* 
RSTATE	EQU	*
	DATA	RCONAD	CONNECTED ACCEPT DATA
	DATA	RCONRD	CONNECTED REFUSE DATA
	IFF	SWITVC=0 
	DATA	RINCAR	INCOMING CALL RECEIVED(WITH ACC/REF )
         DATA     RINCAR           INCOMING CALL RECEIVED(WITHOUT ACC/REF ) 
	DATA	RVCREL	VIRTUAL CIRCUIT RELEASED 
	XIF
ENDRST	EQU	*-RSTATE 
* 
*        READ 
*        CONNECTED REFUSE DATA
* 
RCONRD	EQU	*
	LDK	A2,ACCDAT
	CFR	A14,A11	TRANSPORT HANDLER
	LDK	A1,CONAD	CONNECTED ACCEPT DATA 
	SC	A1,DWTSTE,A6
	LDK	A2,READAT	FUNCTION CODE
	EJECT
* 
*        READ 
*        CONNECTED ACCEPT DATA
* 
RCONAD	EQU	*
* 
*        DEBLOCK INPUT QUEUE
* 
	LDK	A1,NPRFLG
	C1R	A1,A1
	ANS	A1,QUEINP,A13
	IFF	SWITVC=0 
         SUK      A4,INCALR        CHECK DWT STATE
         RF(Z)    READ30
* 
*        READ 
*        INCOMING CALL RECEIVED,WITHOUT ACCEPT/REFUSE CALL
* 
         LDK      A1,CONAD         CONNECTED ACCEPT DATA
         SC       A1,DWTSTE,A6
READ30   EQU      * 
	XIF
	SC	A2,DWTFNC,A6
	RF	WRIT50	ACTIVATE TIMER 
* 
	EJECT
* 
	IFF	SWITVC=0 
* 
*        READ 
*        INCOMING CALL RECEIVED 
* 
RINCAR	EQU	*
	LD	A1,QUEINP,A13 
	ANKL	A1,-2 
	RB(NZ)	RCONAD
	XIF
* 
*	WANTED ACTION NOT ALLOWED IN THIS DWT STATE 
* 
ERRSTE	EQU	*
	LDKL	A1,SEQE.RC	SEQUENCE ERROR 
	RF	RHEXIT	COMPLETE REQUEST 
	IFF	SWITVC=0 
* 
*        READ 
*        VIRTUAL CIRCUIT CLEARED
* 
RVCREL	EQU	*
	ANK	A1,CLEA.RC	CONNECTION CLEARED ?
	RF(NZ)	RHEXIT	YES,COMPLETE REQUEST 
* 
*	ACTIVATE RHIP TO GET A PACKET 
* 
	SC	A2,DWTFNC,A6
	ABL	RHIPRO 
	XIF
* 
	EJECT
* 
************************************************************
* 
*        WRITE REQUEST
* 
************************************************************
* 
WRIT05	EQU	*
* 
*        BRANCH ON DWT STATE
* 
	SUK	A3,CONAD 
	RF(Z)	WRIT20	CONNECTED ACCEPT DATA 
	SUK	A3,CONRD-CONAD 
	RF(Z)	WRIT20	CONNECTED REFUSE DATA 
	IFT	SWITVC=0 
	RB	ERRSTE	INCORRECT DWT STATE
	XIF
	IFF	SWITVC=0 
	SUK	A3,VCREL-CONRD 
	RB(NZ)	ERRSTE	INCORRECT DWT STATE
* 
	EJECT
* 
*        VIRTUAL CIRCUIT RELEASED 
* 
WRIT10	EQU	*
	ANK	A1,TOLD.RC	CLEAR ALREADY TOLD TO USER ?
	RB(NZ)	ERRSTE	YES,SEQUENCE ERROR 
         LDK     A1,CLEA.RC       VC CLEARED
	LD	A2,DWTIPQ,A6
	ANKL	A2,-2	ANYTHING IN QUEUE ? 
	RF(NZ)	WRIT15	YES
	ORK	A1,MORE.RC	MORE INFO 
	LDR	A2,A1
	ORK	A2,TOLD.RC	RETURN CODE TOLD TO USER
	ST	A2,DWTRCI,A6
	RF	RHEXIT
WRIT15	EQU	*
	LD	A2,BFCHPT,A2	ONLY CLEAR IN QUEUE ?
	ABL(Z)	RHIPRO	YES
	ORKL	A1,DATA.RC	DATA AVAILABLE 
	XIF
	EJECT
* 
******************************************************************* 
* 
*        COMPLETE REQUEST 
* 
******************************************************************
* 
RHEXIT	EQU	*
	INH		.	=1
	CF	A15,TENDIO	COMPLETE USER REQUEST
	ENB
RHSCHE EQU *
	ABL	EXITDC	CONTROL TO SCHEDULER
* 
*        CONNECTED
* 
WRIT20	EQU	*
	ADK	A5,0	REQUESTED LENGTH
	RF(N)	ERRLEN	INCORRECT LENGTH
	LC	A3,DWTOPT,A6	GET NEW OPTION CODE
	LDR	A4,A3
	ANK	A4,INTOPT	INTERRUPT ?
	RF(Z)	WRIT30	NO
	LDK	A2,WRIINT	INTERRUPT
	ADK	A5,0	REQUESTED LENGTH
	RF(N)	ERRLEN	INCORRECT LENGTH
	SUK	A5,1 
	RF(Z)	WRIT45 
ERRLEN	EQU	*
	LDKL	A1,INVL.RC	INCORRECT LENGTH 
	RB	RHEXIT
* 
	EJECT
* 
*	WRITE DATA
* 
WRIT30	EQU	*
         CW       A5,TRBFSZ,A13    TRANSMIT BUFFER SIZE 
	RB(G)	ERRLEN	INCORRECT LENGTH
	LDR	A4,A3
	ANK	A4,MOPT	MORE DATA ?
	RF(Z)	WRIT35	NO
	CW	A5,TRBFSZ,A13 
	RB(NE)	ERRLEN
WRIT35	EQU	*
	LC	A1,DWTWRO,A6	GET OLD OPTION CODE
	LDR	A2,A1
	ANK	A1,MOPT	MORE DATA ?
	RF(Z)	WRIT40	NO
	ANK	A2,QOPT	OLD Q-BIT
	LDR	A4,A3
	ANK	A4,QOPT	NEW Q-BIT
	SUR	A2,A4	SAME ? 
	RB(NZ)	ERRSTE	NO,SEQUENCE ERROR
WRIT40	EQU	*
	LDK	A2,WRIDAT	DATA 
	SC	A3,DWTWRO,A6	SAVE NEW OPTION CODE 
WRIT45	EQU	*
	CFR	A14,A11	TRANSPORT HANDLER
* 
	EJECT
* 
* 
*        ACTIVATE TIMER 
* 
WRIT50	EQU	*
	LD	A8,DWTRTV,A6	REQUEST TIMER VALUE
	RB(Z)	RHSCHE	NO TIMER,CONTROL TO SCHEDULER 
         LDKL     A4,TIMOUT+1      TIME OUT ROUTINE 
	LDR	A12,A6 
	CF	A14,STRTIM	START TIMER
	ST	A4,DWTRTP,A6
	RB	RHSCHE	CONTROL TO SCHEDULER 
* 
	EJECT
* 
* 
************************************************************
* 
*        OPEN REQUEST 
* 
************************************************************
* 
OPEN00	EQU	*
	CF	A14,FNDLOC	CONFIRM LOCAL DTE ADDRESS
	ANK	A1,STRTFL	MASK START FLAG
	RF(NZ)	ERRSYS	LINE OPEN
* 
*        LINE CLOSED
*	CHECK IF OPEN SYSTEM ALREADY PENDING
* 
         LD       A3,CMNFLG,A12 
         ANK      A3,OPEFLG 
	RF(Z)	OPEN10	NO
ERRSYS	EQU	*
	LDKL	A1,LOGE.RC	INCORRECT SYSTEM STATE 
	RB	RHEXIT	COMPLETE REQUEST 
* 
	EJECT
* 
*	CHECK TABLE LENGTH
* 
OPEN10	EQU	*
	ADK	A5,0 
	RF(Z)	OPEN15	NO ADDRESS TABLE
* 
*	ADDR. TABLE NOT SUPPORTED IN PRR 11.0 
* 
	RB	ERRLEN	LENGTH ERROR 
OPEN15	EQU	*
	LD	A3,ECBCW2,A8	GET LOCAL SYMBOLIC DTE ADDRESS 
	ST	A3,DWTLAD,A6
	LDK	A2,OPESYS	OPEN SYSTEM
OPEN30	EQU	*
	CFR	A14,A11	TRANSPORT HANDLER
	IFF	PERMVC=0 
* 
*	UPDATE PVC WITH REMOTE ADDRESS
* 
	LDKL	A1,PVCTYP	PVC IDENTIFICATION
	LDKL	A2,SCTDCT	POINTER TO DC ADDRESS TABLE 
	LDKL	A3,LINTAB-2 
	IFF	SYNRLN=1 
	LDK	A4,SYNRLN	NUMBER OF LINES
	XIF
	IFF	PERMVC=0 
OPEN40	EQU	*
	ADK	A3,2	POINTER TO LC-ADM BLOCK-POINTER TABLE 
	LDR*	A5,A3	LC-ADM BLOCK POINTER
	LC	A7,NRPVC,A5	NUMBER OF PVC'S 
	RF(Z)	OPEN80	NO PVC'S
	LD	A5,LC:TAB,A5	LC-ADM BLOCK TABLE 
* 
	EJECT
* 
*	GET NEXT ENTRY IN DC ADDR. TABLE
* 
OPEN60	EQU	*
	LDR*	A2,A2	END OF TABLE ?
	RF(Z)	OPEN90	YES 
* 
*	TEST IF PVC 
* 
	CW	A1,4,A2 
	RB(NE)	OPEN60	NO 
OPEN70	EQU	*
	LDR*	A8,A5	LC-ADM ENTRY
	LD	A9,2,A2	GET SYMBOLIC ADDRESS
	ST	A9,REMADR,A8	SAVE IT IN LC-ADM
	ADK	A5,2	ADDRESS NEXT LC 
	SUK	A7,1	MORE PVC'S ?
	RB(NZ)	OPEN60	YES
OPEN80	EQU	*
	IFF	SYNRLN=1 
	SUK	A4,1	MORE LINES ?
	RB(NZ)	OPEN40	YES
	XIF
OPEN90	EQU	*
	LDK	A3,0	SET RETURN CODE 
	CF	A14,CMPREQ	COMPLETE REQUEST 
	RB	RHSCHE
* 
	EJECT
* 
* 
* 
********************************************************************
* 
*	CONNECT PASSIVE REQUEST 
* 
********************************************************************
* 
CONP00	EQU	*
	IFT	SWITVC=0 
	ABL	ERRREQ	REQUEST ERROR 
	XIF
	IFF	SWITVC=0 
	LDK	A2,CONPAS	FUNCTION CODE
	RF	CONA05
	XIF
* 
	EJECT
* 
********************************************************************
* 
*	CONNECT ACTIVE REQUEST
* 
********************************************************************
* 
CONA00	EQU	*
	IFF	SWITVC=0 
* 
*	TEST MESSAGE LENGTH 
* 
	SUK	A5,SYMXDL-5
	IFT	CALDTE=1 
	ADK	A5,4 
	XIF
	IFF	SWITVC=0 
	RB(P)	ERRLEN	INCORRECT LENGTH
	XIF
	LDK	A2,CONACT	FUNCTION CODE
CONA05	EQU	*
	CF	A14,FNDLOC	CONFIRM LOCAL DTE ADDRESS
	ANK	A1,STRTFL	MASK START FLAG
	RB(Z)	ERRSYS	INCORRECT SYSTEM STATE
	ANK	A4,/FF 
	IFT	SWITVC=0 
	ABL(NZ)	ERRSTE	INCORRECT DWT STATE 
	XIF
	IFF	SWITVC=0 
* 
	EJECT
* 
	RF(Z)	CONA10 
	SUK	A4,VCREL 
	RF(NZ)	CLOS10	SEQUENCE ERROR 
	LD	A1,DWTRCI,A6	RETURN INFO
	LDR	A3,A1
	ANK	A3,CLEA.RC	CLEAR DETECTED ?
	RF(Z)	CLOS10	NO,CONNECT NOT ALLOWED
	ANK	A1,TOLD.RC	TOLD TO USER ?
	RF(Z)	CLOS10	NO
CONA10	EQU	*
	XIF
	EJECT
* 
*	SAVE SYMBOLIC DTE ADDRESSES 
* 
	LD	A3,ECBCW2,A8	LOCAL SYMBOLIC DTE ADDRESS 
	ST	A3,DWTLAD,A6
	LD	A3,ECBCW1,A8	REMOTE SYMBOLIC DTE ADDRESS
	ST	A3,DWTRAD,A6
	CM	DWTRTP,A6	CLEAR TIMER ADDRESS 
	CM	DWTIPQ,A6	CLEAR INPUT QUEUE 
	CM	DWTRCI,A6	CLEAR RETURN INFO.
         CM       DWTWRO,A6        CLEAR WRITE INFO.
	CFR	A14,A11	TRANSPORT HANDLER
	CM	DWTRCI,A6	CLEAR RETURN INFO 
	CF	A14,PUTDWT	PUT DWT IN CHAIN 
	IFF	SWITVC=0 
	IFF	PERMVC=0 
	SUK	A2,CONACT	CONNECT ACTIVE 
	RF(NZ)	CONA40	NO!
	LC	A2,DWTOPT,A6	PVC-OPTION?
	SUK	A2,1 
	RF(NZ)	CONA40	NO 
	XIF
	IFF	PERMVC=0 
	LDK	A2,CONAD 
	SC	A2,DWTSTE,A6	DWT STATE: CONNECTED ACCEPT DATA 
	RF	DISC40	COMPLETE REQUEST 
	XIF
	IFF	SWITVC=0 
CONA40	EQU	*
	RB	WRIT50	ACTIVATE TIMER 
	XIF
* 
	EJECT
* 
************************************************************
* 
*        CLOSE REQUEST
* 
************************************************************
* 
CLOS00	EQU	*
	CF	A14,FNDLOC	CONFIRM LOCAL DTE ADDRESS
	ANK	A1,STRTFL	MASK START FLAG
	RF(Z)	DISC40	CLOSE ALREADY DONE
* 
*	LINE OPEN 
*	CHECK IF CLOSE ALREADY IN PROGRESS
* 
	LDK	A2,CLOSYS
         LD       A3,CMNFLG,A12 
         ANK      A3,CLOFLG 
	RF(Z)	DISC55	NO
CLOS10	EQU	*
	ABL	ERRSTE	SEQUENCE ERROR
* 
	EJECT
* 
******************************************************************* 
* 
*	DISCONNECT REQUEST
* 
******************************************************************* 
* 
DISC00	EQU	*
	LD	A1,DWTLAD,A6	GET LOCAL SYMBOLIC DTE ADDRESS 
	CF	A14,FNDLIN	FIND LINE BLOCK ADDRESS
	ANK	A1,STRTFL	MASK START FLAG
	ABL(Z)	ERRSYS	INCORRECT SYSTEM STATE 
	ANK	A4,/FF 
	RF(Z)	DISC40	DISCONNECT ALREADY DONE 
	CM	DWTRCI,A6	CLEAR RETURN INFO 
	IFT	SWITVC=0 
	RF	DISC50
	XIF
	IFF	SWITVC=0 
	SUK	A4,VCREL	VIRTUAL CIRCUIT RELEASED
	RF(NZ)	DISC50	NO 
* 
*	CLEAR INPUT QUEUE 
* 
DISC10	EQU	*
         LDK      A1,DWTIPQ        INPUT QUEUE ANCHOR 
	ADR	A1,A6
         LD       A2,DWTIPQ,A6     QUEUE EMPTY ?
         RF(Z)    DISC20           YES
         CF       A14,DEQUE        DEQUEUE ELEMENT
         CF       A14,RLBUF        RELEASE BUFFER 
	RB	DISC10	TAKE NEXT
DISC20   EQU      * 
         LDK      A1,DISCON        DISCONNECTED 
         SC       A1,DWTSTE,A6
	XIF
* 
	EJECT
* 
*	REMOVE DWT FROM CHAIN 
* 
DISC25	EQU	*
	CF	A14,RELDWT	RELEASE DWT FROM CHAIN 
DISC40	EQU	*
	LDK	A1,ACPT.RC	ACCEPTED
	ABL	RHEXIT	COMPLETE REQUEST
DISC50	EQU	*
	LDK	A2,DISCAL
DISC55	EQU	*
	LDK	A5,DISCON
DISC60	EQU	*
	CFR	A14,A11	TRANSPORT HANDLER
	SC	A5,DWTSTE,A6
	IFF	PERMVC=0 
	IFF	SWITVC=0 
* 
*	TEST IF PERMANENT VIRTUAL CIRCUIT 
* 
	LC	A1,VCTYP,A13
	ANK	A1,PVC 
	RF(Z)	DISC70	NO
	XIF
	IFF	SWITVC=0 
	SUK	A2,DISCAL	DISCONNECT ? 
	RB(Z)	DISC25	YES 
DISC70	EQU	*
	ABL	RHSCHE	CONTROL TO SCHEDULER
	XIF
	IFT	SWITVC=0 
	RB	DISC25
	XIF
* 
	EJECT
* 
*********************************************************** 
* 
*        SET STATUS REQUEST 
* 
*********************************************************** 
* 
STAT05	EQU	*
	IFF	SWITVC=0 
	LDR	A1,A3
	SUK	A1,VCREL	VIRTUAL CIRCUIT RELEASED
	ABL(Z)	WRIT10	COMPLETE REQUEST 
	XIF
	LD	A1,ECBCW1,A8	GET STATUS INFORMATION 
	IFT	SWITVC=0 
	ABL(NZ)	ERRREQ	REQUEST ERROR 
	XIF
	IFF	SWITVC=0 
	RF(NZ)	STAT20	ACCEPT CALL REQUEST
	XIF
	SUK	A3,CONAD	CONNECTED ACCEPT DATA 
	RF(Z)	STAT10	YES 
	SUK	A3,CONRD-CONAD	CONNECTED REFUSE DATA 
	RB(NZ)	CLOS10	SEQUENCE ERROR 
* 
*	REFUSE DATA REQUEST 
* 
STAT10	EQU	*
	LDK	A2,REFDAT	REFUSE DATA
	LDK	A1,CONRD 
	SC	A1,DWTSTE,A6
	CFR	A14,A11	TRANSPORT HANDLER
	ABL	RHSCHE	CONTROL TO SCHEDULER
	IFF	SWITVC=0 
* 
	EJECT
* 
*	ACCEPT CALL REQUEST 
* 
STAT20	EQU	*
	SUK	A3,INCALR	INCOMING CALL RECEIVED 
	RB(NZ)	CLOS10	SEQUENCE ERROR 
	LDK	A2,ACCCAL	ACCEPT CALL
	LDK	A5,CONAD	CONNECTED ACCEPT DATA 
	RB	DISC60	TRANSPORT HANDLER
	XIF
	EJECT
* 
********************************************************************
* 
*	SET TIMEOUT REQUEST 
* 
********************************************************************
* 
TIMO00	EQU	*
	LD	A1,ECBCW1,A8	GET TIMER VALUE
	ST	A1,DWTRTV,A6
	RB	DISC40	COMPLETE REQUEST 
* 
	IFT	STATI=1
	EJECT
* 
* 
*********************************************************** 
* 
*	STATISTIC REQUEST 
* 
*********************************************************** 
* 
* 
STATS	EQU	* 
	CF	A14,FNDLOC	GET LINE NUMBER
	LDK	A4,STATFL
	ANR	A4,A1
	ABL(NZ)	ERRREQ	STATISTIC REQUEST BUSY
	LD	A2,ECBRL,A8 
	ABL(NP)	ERRLEN	LENGTH ERROR
	ORS	A1,CMNFLG,A12	SET STATISTIC REQUEST BUSY FLAG
	LDK	A1,STATIS
	SC	A1,DWTFNC,A6	SAVE FUNCTION CODE 
* 
*	SAVE THREE WORDS OF THE USER ECB IN A MONITOR BLOCK 
* 
	LD	A1,ECBFC,A8 
	LD	A2,ECBBA,A8 
	LD	A3,ECBCW2,A8
	INH		.	=1
	CF	A15,GETBLK	GET A BLOCK AND SAVE REGISTERS 
	ENB
	ST	A4,DWTRTP,A6	SAVE BLOCK ADDRESS IN DWT
	ST	A6,ECBCW2,A8	SAVE DWT-ADDRESS IN ECB
* 
	EJECT
* 
*	PREPARE ECB FOR STATISTIC REQUEST TO LEVEL 2
* 
	LD	A1,FILCOD,A12 
	ST	A1,ECBFC,A8	FILE CODE FOR LINE IDENTIFICATION 
	IFT	MMUPAG=1 
	LDR	A1,A12 
	ADK	A1,INTSTB	ADDRESS INTERMEDIATE STATISTIC BUFFER
	ST	A1,ECBBA,A8	TO ECB
	XIF
	IFT	STATI=1
	LDR	A1,A8	ECB-ADDRESS AS PARAMETER 
* 
*	ISSUE STATISTIC REQUEST TO LEVEL 2
* 
	LDK	A7,STATR	FUNCTION CODE 
	LKM
	DATA	-1
	DATA	STAEND	ACTIVATION ADDRESS 
	ABL	EXITDC	CONTROL TO SCHEDULER
* 
	EJECT
* 
*	RETURN FROM LEVEL 2 
* 
STAEND	EQU	*
	LDR	A8,A1	ECB-ADDRESS
	LD	A6,ECBCW2,A8	GET DWT-ADDRESS
	LD	A4,DWTRTP,A6	GET ADDRESS SAVE BLOCK 
	CM	DWTRTP,A6 
	INH		.	=1
	CF	A15,FREBLK	RELEASE BLOCK
	ENB
	ST	A1,ECBFC,A8	RESTORE FILE CODE 
	ST	A3,ECBCW2,A8	RESTORE CONTROL WORD 
	IFT	MMUPAG=1 
	LD	A1,ECBBA,A8	GET INTERMEDIATE STAT. BUFFER ADDRESS 
	ST	A2,ECBBA,A8	RESTORE OLD BUFFER ADDRESS
	LD	A4,ECBEL,A8 
	LDKL	A14,DCSTAK	STACK POINTER
	CF	A14,COPTUB	COPY STAT.INFO.TO USER BUFFER
	XIF
	IFT	STATI=1
	LD	A1,ECBRC,A8	RETURN CODE 
	INH		.	=1
	CF	A15,TENDIO	COMPLETE REQUEST TO USER 
	ENB
	LDR	A1,A3
	CF	A14,FNDLIN	GET LINE BLOCK ADDRESS 
	LDK	A1,STATFL
	C1R	A1,A1
	ANS	A1,CMNFLG,A12	RESET STAT. BUSY FLAG
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	XIF
	EJECT
* 
*        ROUTINE TO GET LINE INDEX AND/OR 
*        LINE BLOCK ADDRESS 
* 
*********************************************************** 
* 
*        INPUT PARAMETER :
*          A1 =SYMBOLIC LOCAL DTE ADDRESS 
* 
*        CALLING SEQUENCE : 
*          CF A14,FNDLIN
*	  CF A14,FNDLOC (A1 LOADED IN THE ROUTINE)
* 
*        OUTPUT PARAMETERS :
*          A1 = COMMON FLAGS
*          A12= LINE BLOCK ADDRESS
*	  A3 = LINE INDEX 
*          NO OTHER REGISTERS ARE CHANGED 
* 
FNDLOC	EQU	*
	LD	A1,ECBCW2,A8	GET LOCAL DTE ADDRESS
FNDLIN	EQU	*
	STR	A2,A14	SAVE A2 
	LDKL	A3,LOCAL	SET TYPE 
	INH		.	=1
	CF	A15,FNDDNT	FIND LOCAL DTE 
	ENB		.	=1
	LDR	A1,A1	FOUND ?
	RF(NN)	FNDL10	YES
	ADKL	A14,4	ADJUST STACK POINTER
	ABL	ERRREQ	REQUEST ERROR 
FNDL10	EQU	*
	IFF	SYNRLN=1 
	ADR	A3,A3
	XIF
	LD	A12,LINTAB,A3	LINE ADM. TABLE 
	LD	A1,CMNFLG,A12	GET COMMON FLAGS
	LDR*	A2,A14	RELOAD A2
	RTN	A14
	EJECT
* 
* 
*	PUT DWT IN CHAIN
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT ADDRESS
*		A12 = LINE ADM.BLOCK ADDRESS 
*		A14 = CF STACK POINTER 
* 
*	CALLING SEQUENCE: 
*		CF A14,PUTDWT
* 
*	OUTPUT PARAMETERS:
*		A1 IS CHANGED
* 
PUTDWT	EQU	*
	STR	A2,A14	SAVE A2 
	LDR	A2,A12 
	ADK	A2,CHAIN 
PUTD10	EQU	*
	LDR*	A1,A2	GET ANCHOR
	RF(Z)	PUTD20 
	LDR	A2,A1
	ADK	A2,DWTCHN
	RB	PUTD10	END OF CHAIN ? 
PUTD20	EQU	*
	STR	A6,A2	PUT IN CHAIN 
	LDR*	A2,A14	RESTORE A2 
	RTN	A14
* 
	EJECT
* 
* 
*	RELEASE DWT FROM CHAIN
* 
********************************************************************* 
* 
*	INPUT PARAMETERS: 
*		A6  = DWT ADDRESS
*		A12 = LINE ADM.BLOCK ADDRESS 
*		A14 = CF STACK POINTER 
* 
*	CALLING SEQUENCE: 
*		CF A14,RELDWT
* 
*	OUTPUT PARAMETERS:
*		A1 AND A2 ARE CHANGED
* 
RELDWT	EQU	*
	LDR	A2,A12 
	ADK	A2,CHAIN 
	RF	RELD20	FIRST IN CHAIN ? 
RELD10	EQU	*
	LDR	A2,A1
	ADK	A2,DWTCHN
RELD20	EQU	*
	LDR*	A1,A2	GET NEXT DWT
	RF(Z)	RELD30	END OF CHAIN
	CWR	A1,A6	FOUND ?
	RB(NE)	RELD10	NO 
	LD	A1,DWTCHN,A6
	STR	A1,A2	REMOVE FROM CHAIN
	CM	DWTCHN,A6 
RELD30	EQU	*
	RTN	A14
* 
	EJECT
* 
*	TRANSPORT HANDLER INTERFACE 
* 
TRANSP	EQU	*
	SC	A2,DWTFNC,A6	SAVE FUNCTION CODE 
	CF	A14,TRANSH	CALL TRANSPORT HANDLER 
	LDR	A4,A4	RETURN CODE
	RF(Z)	TRANSR	NO ERROR,RETURN 
* 
*	RETURN CODE TRANSLATION 
* 
	LD	A1,RTNCTR,A4
	LDKL	A4,RHEXIT 
	ST	A4,4,A14	ADJUST RETURN ADDRESS
TRANSR	EQU	*
	RTN	A14
* 
RTNCTR	EQU	*
	DATA	ACPT.RC 
	DATA	ACPT.RC	ACCEPT
	DATA	CLEA.RC	VIRTUAL CIRCUIT CLEARED 
	DATA	PHYE.RC	NOT OPERABLE
	DATA	SEQE.RC	INVALID Q-BIT 
	DATA	INVL.RC	INVALID LENGTH
	DATA	SEQE.RC	INVALID STATE 
	DATA	INVL.RC	INVALID LENGTH
	DATA	NOLC.RC	NO LOGICAL CHANNEL AVAILABLE
	DATA	TIMO.RC	TIME OUT DETECTED 
	DATA	RQUE.RC	REQUEST ERROR 
* 
	EJECT
* 
********************************************************************
* 
*	REQUEST HANDLER INPUT PART
* 
********************************************************************
* 
*	ENTRY USED BY THE DC-SCHEDULER
* 
*	INPUT PARAMETERS: 
*		A1  = QUEUE ANCHOR ADDRESS 
*		A12 = ADDRESS OF LINE ADMINISTRATION BLOCK 
*		A13 = ADDRESS OF LOGICAL CHANNEL ADM.BLOCK 
*		A14 = CF STACK POINTER 
* 
RHIP	EQU	*
         LDK      A7,0             A7:=INDICATION FOR RHIP-ENTRY-POINT
         RF       RHIP10
* 
*	ENTRY USED BY THE REQUEST HANDLER OUTPUT PART 
* 
*	INPUT PARAMETERS: 
*		A6  = DWT ADDRESS
*		A14 = CF STACK POINTER 
* 
RHIPRO	EQU	*
* 
*	SET ADDRESS OF QUEUE ANCHOR 
* 
         LDK      A1,DWTIPQ 
         ADR      A1,A6 
         LDK      A7,6             A7:=INDICATION FOR RHIPRO-ENTRY-POINT
         ST       A7,DCLEVL        SET DC-LEVEL-INDICATION
* 
	EJECT
* 
*	DEQUEUE ELEMENT 
* 
RHIP10	EQU	*
	LDR	A11,A1	A11=QUEUE ANCHOR
	CF	A14,DEQUE 
	LDR	A8,A2	A8=BUFFER ADDRESS
* 
*        GET TYPE OF PACKET 
* 
	LDK	A2,0 
	LC	A2,IDENT,A8	A2:=PACKET TYPE 
	LDK	A3,0	A3:=PACKET TYPE INDEX FOR PROCESS-TABLE 
* 
*	TEST IF ENTRY POINT WAS RHIP
* 
         LDR      A7,A7 
         RF(NZ)   RHIP20           NO!
* 
*        GET DWT ADDRESS FROM LC-ADM
* 
	LD	A6,LCDWT,A13	A6=DWT ADDRESS 
RHIP20	EQU	*
* 
*        GET PENDING REQUEST INDICATION 
* 
	LD	A5,DWTST,A6 
	RF(N)	RHIP30	NO REQUEST PENDING
* 
*        GET PENDING REQUEST
* 
	LDK	A5,0 
	LC	A5,DWTFNC,A6
* 
	EJECT
* 
*        TEST IF READ REQUEST PENDING 
* 
	SUK	A5,READAT
	RF(Z)	RHIP30	YES 
* 
*        RELOAD REQUEST 
* 
	ADK	A5,READAT
RHIP30	EQU	*
	LDR	A6,A6
	RF(NZ)	RHIP40	DWT ADDRESS AVAILABLE
	IFF	SWITVC=0 
* 
*        NO DWT ADDRESS 
*        TEST IF PACKET TYPE IS "CALL PACKET" 
* 
	LDK	A3,6	A3:=INDEX FOR PROCESS-TABLE 
	SUK	A2,CAL.P 
	RF(Z)	RHIP90	PROCESS CALL PACKET 
* 
* 
*	NO CALL PACKET
* 
	XIF
* 
*	RELEASE BUFFER AND SEND CLEAR/RESET PACKET
* 
	LDK	A1,NOUSER	A1:=DIAGNOSTIC CODE
	RF	RHI100
* 
RHIP40	EQU	*
         LDK      A1,DWTRCI 
         ADR      A1,A6 
         LDKL     A9,DATA.RC
* 
	EJECT
* 
*	TEST IF THERE IS MORE IN THE QUEUE
* 
         LDR*     A4,A11
         RF(Z)    RHIP50           NO 
	ORRS	A9,A1	SET INDICATION 'DATA RECEIVED'
         RF       RHIP60
RHIP50   EQU      * 
         C1R      A9,A9 
	ANRS	A9,A1	RESET INDICATION 'DATA RECEIVED'
RHIP60   EQU      * 
	IFF	SWITVC=0 
* 
*	DWT ADDRESS AVAILABLE 
*	TEST IF ENTRY POINT WAS RHIP
* 
         LDR      A7,A7 
         RF(NZ)   RHIP70           NO!
* 
*	TEST IF VC RELEASED 
* 
         LDK      A4,VCREL
	LDR	A10,A4 
         LC       A4,DWTSTE,A6
         SUR      A10,A4
         RF(NZ)   RHIP70           NO!
* 
	EJECT
* 
*	VC RELEASED 
*	MOVE INPUT QUEUE ANCHOR FROM LC-ADM TO DWT
* 
         LDR*     A7,A11           A1:=QUEUE ANCHOR 
	RF(Z)	RHIP65 
	LDR*	A4,A7	MORE DATA IN QUEUE ?
	RF(NZ)	RHIP65	YES
	XRRS	A9,A1	RESET MORE DATA BIT IN DWTRCI 
RHIP65	EQU	*
         CMR      A11              CLEAR QUEUE ANCHOR IN LC.ADM 
         LDKL     A11,DWTIPQ
         ADR      A11,A6           A11:=ADDRESS OF QUEUE ANCHOR IN DWT
         STR      A7,A11           STORE QUEUE ANCHOR IN DWT
	CM	LCDWT,A13	CLEAR RELATION WITH LOGICAL CHANNEL 
	XIF
* 
*        TEST IF PACKET TYPE IS "DATA PACKET" 
* 
RHIP70	EQU	*
	LDK	A4,DATA.P
	TM	A4,A2 
	ABL(Z)	DATPAC	PROCESS DATA PACKET
* 
*        NO DATA PACKET 
* 
RHIP80	EQU	*
	CC	A2,TABLE,A3 
	RF(E)	RHIP90	TYPE FOUND
	ADK	A3,1 
	RB	RHIP80	TRY NEXT PACKET TYPE 
* 
RHIP90	EQU	*
	ADR	A3,A3	A3:=INDEX FOR PROCESS-TABLE
	ABI	PACPRO,A3	PROCESS PACKET 
* 
	EJECT
* 
*        TABLE OF MATCHING PACKET PROCESSING ROUTINES 
* 
PACPRO	EQU	*
	DATA	HALT,HALT	RESTART(-CONF.)PACKET 
	DATA	RESPAC,HALT	RESET(-CONF.)PACKET 
	IFF	SWITVC=0 
	DATA	CLEPAC,HALT	CLEAR(-CONF.)PACKET 
	DATA	CALPAC,CALCON	CALL(-CONF.)PACKET
	XIF
	DATA	INTPAC,INTCON	INTERRUPT(-CONF.)PACKET 
* 
*        UNEXPECTED PACKET RECEIVED 
* 
HALT	EQU	*
	HLT
* 
* 
*	GENERAL EXIT OF RHIP
*	RELEASE BUFFER AND SEND CLEAR/RESET PACKET
* 
RHI100	EQU	*
	LDR	A2,A8
	CF	A14,RLBUF	RELEASE BUFFER
RHI110	EQU	*
	ABL	CLVC	EXIT OF RHIP
* 
	EJECT
* 
*        COMPLETE REQUEST WITH RETURNCODE "ACCEPTED"
* 
RHI120	EQU	*
	LDK	A3,ACPT.RC 
* 
*        COMPLETE REQUEST WITH GIVEN RETURNCODE IN A3 
* 
RHI130	EQU	*
	CF	A14,CMPREQ
* 
*        RELEASE BUFFER AND EXIT
* 
RHI140	EQU	*
	LDR	A2,A8
	CF	A14,RLBUF 
	RF	RIPEXI
* 
*        REQUEUE BUFFER,BLOCK QUEUE AND EXIT
* 
RHI150	EQU	*
	LDR	A1,A11	A1:=ADDRESS OF QUEUE ANCHOR 
	LDR	A2,A8	A2:=BUFFER ADDRESS 
	CF	A14,QUEUEF
* 
*	BLOCK QUEUE 
* 
	LDK	A1,NPRFLG	A1:=0 PROCESSING FLAG
	ORRS	A1,A11
* 
*	EXIT OF RHIP
* 
RIPEXI   EQU      * 
	ABL	EXITDC 
	EJECT
* 
* 
*	TIMEOUT ROUTINE OF REQUEST HANDLER
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A12 = DWT ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CF STACK POINTER 
* 
TIMEXP   EQU      * 
	LDK	A3,TIMO.RC	PRE-SET RETURNCODE"TIMEOUT" 
* 
*	GET ADDRESS OF DWT
* 
	LDR	A6,A12 
* 
*	TEST IF REQUEST ALREADY COMPLETED 
* 
         LD       A5,DWTRTP,A6
         RB(Z)    RIPEXI           YES! 
* 
*	CLEAR RUNNING TIMER INDICATION
* 
         CM       DWTRTP,A6 
* 
	EJECT
* 
*	SCAN ON PENDING REQUEST 
* 
         LDK      A5,0
         LC       A5,DWTFNC,A6
	LDR	A7,A5	SAVE FUNCTION CODE 
	SUK	A5,WRIDAT	WRITE DATA REQUEST 
	RF(Z)	TIME00	YES 
	SUK	A5,READAT-WRIDAT	READ REQUEST
	RF(Z)	COMPLE	YES 
	ADK	A5,READAT-WRIINT	WRITE INTERRUPT REQUEST 
	RF(NZ)	TIME30	NO 
* 
*	TIMEOUT ON WRITE REQUEST
*	TEST IF REQUEST STILL IN OUTPUT QUEUE 
* 
TIME00	EQU	*
         LDR      A1,A13
         ADK      A1,QUEOUT        A1:=ADDRESS OF OUTPUT QUEUE ANCHOR 
* 
*	TEST IF QUEUE IS EMPTY
* 
         LDR*     A2,A1 
         RF(Z)    TIME20
* 
*	TEST IF ONLY NO-PROCESSING FLAG IS SET
* 
TIME10	EQU	*
         SUK      A2,1
         RF(Z)    TIME20           YES! 
         CF       A14,DEQUE        DEQUEUE ELEMENT
* 
	EJECT
* 
*	TEST IF IT IS THE ONE WE ARE LOOKING FOR
* 
         CWR      A2,A6 
         RF(E)    COMPLE           YES! 
* 
*	TEST IF THERE IS ANOTHER ELEMENT IN THE QUEUE 
* 
         LDR*     A4,A1 
         CF       A14,QUEUE        RE-QUEUE ELEMENT 
         RB(NZ)   TIME10           GET SECOND ELEMENT FROM QUEUE
* 
*	ELEMENT NOT IN QUEUE
*	IF NOT WRITE INTERRUPT,IGNORE TIMEOUT 
* 
TIME20   EQU      * 
	SUK	A7,WRIINT
	RF(NZ)	COMEXI
* 
*	COMPLETE REQUEST WITH TIMEOUT RETURNCODE
* 
COMPLE	EQU	*
	CF	A14,CMPREQ
	IFT	SWITVC=0 
TIME30	EQU	*
	XIF
COMEXI	EQU	*
	RB	RIPEXI
	IFF	SWITVC=0 
* 
	EJECT
* 
*	RELEASE DWT FROM CHAIN
* 
TIME30	EQU	*
	IFF	SWITVC=0 
	IFF	SYNRLN=1 
	LD	A1,DWTLAD,A6	LOCAL DTE ADDRESS
	CF	A14,FNDLIN	GET LINE BLOCK ADDRESS 
	CF	A14,RELDWT
	LDK	A3,TIMO.RC	TIME OUT
	XIF
	IFF	SWITVC=0 
	IFT	SYNRLN=1 
	LD	A12,LINTAB	LINE BLOCK ADDRESS 
	CF	A14,RELDWT	RELEASE DWT FROM CHAIN 
	XIF
	IFF	SWITVC=0 
	SUK	A7,CONACT	CONNECT ACTIVE REQUEST ? 
	RF(Z)	TIME40	YES 
	SUK	A7,CONPAS-CONACT	CONNECT PASSIVE REQUEST ? 
	RB(Z)	COMPLE	YES 
* 
*	(AUTOMATIC)ACCEPT REQUEST 
* 
TIME40	EQU	*
* 
*	CLEAR DWT TO LC-ADM RELATION
* 
	LDK	A4,0 
	LC	A4,DWTLCN,A6	LC NUMBER
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	CM	LCDWT,A13	CLEAR DWT-ADDRESS 
	CF	A14,CMPREQ	COMPLETE REQUEST 
	LDK	A1,0 
	RB	RHI110	SEND CLEAR PACKET AND EXIT 
* 
	EJECT
* 
* 
*	CALL PACKET 
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A5  = REQUEST PENDING IND. 
*		A6  = DWT ADDRESS OR ZERO
*		A8  = BUFFER ADDRESS 
*		A11 = QUEUE ANCHOR 
*		A12 = LINE-ADM ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CF STACK POINTER 
* 
CALPAC	EQU	*
* 
*	TEST IF ONLY USER DATA HAS TO BE PASSED TO THE USER 
* 
	LDR	A6,A6
	ABL(NZ)	CAL180	YES!
* 
*	GET DWT FOR LOGICAL CHANNEL 
* 
	LD	A6,CHAIN,A12	GET DWT CHAIN ANCHOR 
	RF(Z)	CALP30	NO CONNECT REQUEST FOR THIS LINE
* 
	EJECT
* 
*	TEST IF CONNECT PASSIVE REQUEST IS PENDING
* 
CALP10	EQU	*
	LD	A4,DWTST,A6 
	RF(N)	CALP20	NO REQUEST PENDING
	LDK	A4,CONPAS
	CC	A4,DWTFNC,A6	CONNECT PASSIVE ?
	RF(E)	CALP40	YES 
CALP20	EQU	*
	LD	A6,DWTCHN,A6	GET NEXT DWT 
	RB(NZ)	CALP10	.
* 
*        NO MATCHING DWT FOUND
*        RELEASE BUFFER AND SEND CLEAR/RESET PACKET AND EXIT
* 
CALP30	EQU	*
	LDK	A1,NOTINT	A1:=DIAGNOSTIC CODE
	RB	RHI100
* 
*	TEST IF CALLING DTE-ADDRESS KNOWN BY SYSTEM 
* 
CALP40	EQU	*
	LDK	A5,BEGDAT
	ADR	A5,A8
* 
*	GET ADDRESS WHERE CALLING LENGTH IN PACKET WILL BE STORED 
* 
	LCR	A1,A5
	ADK	A5,1 
	LDR	A2,A5
	IFT	CALDTE=1 
* 
	EJECT
* 
*	TEST IF CALLED DTE-ADDRESS ALSO IN PACKET 
* 
	LDR	A4,A1
	ANK	A4,/0F 
	RF(Z)	CALP80	NO
* 
*	MOVE CALLING DTE-ADDRESS TO CALLED DTE-ADDRESS
* 
	LDR	A7,A2
	SRL	A4,1	LENGTH OF CALLED DTE IN OCTADS
*			TRUCATED!!! 
	ADR	A5,A4
* 
*	TEST IF CALLING DTE-ADDRESS STARTS ON OCTAD BOUNDARY IN PACKET
* 
         LDR      A3,A1 
         SRL      A1,4             A1:=LENGTH OF CALLING DTE IN SEMI-OCT
	LDR	A4,A1	LENGTH OF CALLING DTE IN SEMI-OCTADS 
         ANK      A3,1
	RF(Z)	CALP60	YES 
* 
	EJECT
* 
*	DTE-ADDRESS STARTS 0N SEMI-OCTAD
* 
CALP50	EQU	*
         LCR      A3,A5 
         SLL      A3,8            A3:=HIGH ORDER DIGIT
         ADK      A5,1             UPDATE ADDRESS OF CALLING DTE IN PAC 
         LCR      A3,A5 
         SRL      A3,4             A3:=LOW ORDER DIGIT
         SCR      A3,A7            STORE DIGITS AT BEGIN OF PACKET
         ADK      A7,1             UPDATE ADDRESS 
         SUK      A4,2
	RB(P)	CALP50	MOVE NEXT TWO DIGITS
	RF(NZ)	CALP85
	ADK	A5,1 
	RF	CALP85
* 
*	DTE-ADDRESS STARTS ON OCTAD BOUNDARY
* 
CALP60	EQU	*
         LCR      A3,A1 
         SCR      A3,A7 
         ADK      A7,1
         ADK      A5,1
         SUK      A4,2
	RB(P)	CALP60 
	RF	CALP85
CALP80	EQU	*
	XIF
	IFF	SWITVC=0 
	LDR	A4,A1
	SRA	A4,5 
	RF(NN)	CALP82
	ADK	A4,1 
CALP82	EQU	*
	ANK	A4,/0F	LENGTH IN OCTETS
	ADR	A5,A4
CALP85	EQU	*
* 
	EJECT
* 
*	GET DTE-ADDRESS 
* 
	LDKL	A3,LOCAL	SET TYPE 
	INH		.	=1
	CF	A15,GETDST	GET SYMBOLIC DTE-ADDRESS 
	ENB		.	=1
* 
*	TEST IF SYMBOLIC DTE ADDRESS FOUND
* 
	LDR	A1,A1
	RB(N)	CALP30	NO
* 
*	TEST IF REMOTE ADDRESS ACCEPTED 
* 
	LD	A2,DWTRAD,A6
	RF(Z)	CALP90	ALL REMOTE ACCEPTED 
	CWR	A1,A2
	RB(NE)	CALP20	NOT ACCEPTED,TRY NEXT
* 
*	DWT FOUND 
* 
CALP90	EQU	*
	ST	A1,DWTRAD,A6	STORE REMOTE SYMBOLIC DTE-ADDRESS
	LD	A2,DWTECB,A6
	ST	A1,ECBCW1,A2
* 
	EJECT
* 
*        STORE LOG CHAN NUMBER IN DWT 
* 
	LC	A1,LCIDNT,A8	GET LC NUMBER
	SC	A1,DWTLCN,A6	STORE IT IN DWT
* 
*        STORE DWT ADDRESS IN LC-ADM
* 
	ST	A6,LCDWT,A13
* 
*	TEST IF FACILITIES OR USER DATA AVAILABLE 
* 
	LDR*	A3,A8	PACKET LENGTH 
	ADR	A3,A8	END ADDRESS OF PACKET
	SUK	A3,2 
	CWR	A5,A3	FACILITIES OR USER DATA IN PACKET ?
	RF(E)	CAL150	NO
	STR	A5,A8	STORE BEGIN ADDR.IN HDLC-HEADDER 
* 
	EJECT
* 
*	TEST IF FACILITIES ONLY 
* 
	LCR	A1,A5
         ANK      A1,/3F           A1:=LENGTH OF FACILITIES 
         RF(Z)    CAL100           NO FACILITIES AT ALL 
         ADR      A1,A5 
         CWR      A1,A3 
         RF(NE)   CAL100           FACILITIES AND USER DATA 
* 
*	ONLY FACILITIES 
* 
         ADK      A1,1             ADD FACILITY-LENGTH OCTAD
         SUR      A1,A5 
         LDR      A3,A1 
         RF       CAL110
CAL100   EQU      * 
         ADK      A3,2
         SUR      A3,A5            A3:=LENGTH IN OCTADS 
CAL110   EQU      * 
         SC       A3,LCIDNT,A8     STORE LENGTH IN LOGICAL CHAN.NUMBER
	LDKL	A3,DATA.RC
* 
*	TEST IF OPTION SET IN CONNECT PASSIVE REQUEST 
* 
	LDK	A2,INCALR
	LC	A4,DWTOPT,A6
	ANK	A4,CALOPT
	RF(NZ)	CAL130	YES
* 
*        SEND CALL CONFIRMATION 
* 
	ST	A3,DWTRCI,A6
* 
	EJECT
* 
*	REQUEUE BUFFER AND BLOCK QUEUE
* 
         LDR      A2,A8 
         LDR      A1,A11
         CF       A14,QUEUEF       REQUEUE BUFFER 
         LDK      A1,NPRFLG 
         ORRS     A1,A11           BLOCK QUEUE
	LDK	A5,INCALL
CAL120	EQU	*
	LDK	A2,ACCCAL
	LDKL	A11,TRANSP
	ABL	DISC60	ACCEPT CALL 
CAL130	EQU	*
	SC	A2,DWTSTE,A6
	CF	A14,CMPREQ
* 
*        REQUEUE BUFFER,BLOCK QUEUE AND EXIT
* 
CAL140	EQU	*
	ABL	RHI150 
* 
	EJECT
* 
*        NO USER DATA AVAILABLE 
*	TEST IF OPTION SET IN CONNECT PASSIVE REQUEST 
* 
CAL150	EQU	*
	LDK	A5,CONAD 
         LC       A3,DWTOPT,A6
         ANK      A3,CALOPT 
	RF(NZ)	CAL155	YES
         LDR      A2,A8 
         CF       A14,RLBUF        RELEASE BUFFER 
	RB	CAL120
* 
CAL155	EQU	*
	LDK	A5,INCALR
         SC       A5,DWTSTE,A6     CHANGE DWT STATE 
* 
*        COMPLETE REQUEST WITH RETURNCODE "ACCEPTED"
*        RELEASE BUFFER AND EXIT
* 
CAL160	EQU	*
	ABL	RHI120 
CAL170   EQU      * 
         LDR      A2,A8 
         CF       A14,RLBUF        RELEASE BUFFER 
         RB       CAL120
	EJECT
* 
*        MOVE INFORMATION OF INCOMMING CALL IN READ BUFFER
* 
CAL180   EQU      * 
* 
*        TEST IF READ REQUEST PENDING 
* 
	LDR	A5,A5
	RF(NZ)	CAL190	NO 
* 
*        READ REQUEST PENDING 
* 
         LDR*     A1,A8            A1:=ADDRESS OF FACILITY LENGTH IN PAC
* 
*        GET NUMBER OF CHARACTERS TO MOVE FROM PACKET IN BUFFER 
* 
         LDK      A4,0
         LC       A4,LCIDNT,A8
         CF       A14,COPTUB
         RB       CAL160           COMPLETE REQUEST WITH RETURN CODE
	                                'ACCEPTED',RELEASE BUFFER AND EXIT 
* 
*        TEST IF VC RELEASED
* 
CAL190	EQU	*
	LDR	A10,A10
	RB(NZ)	CAL140	NO! REQUEUE BUFFER,BLOCK QUEUE,EXIT
	ABL	RHI140	YES! RELEASE BUFFER AND EXIT
* 
	EJECT
* 
* 
*	CALL CONFIRMATION PACKET
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT ADDRESS
*		A8  = BUFFER ADDRESS 
*		A14 = CF STACK POINTER 
* 
CALCON	EQU	*
	LDK	A2,CONAD	DWT STATE :=
	SC	A2,DWTSTE,A6	CONNECTED, ACCEPT DATA 
* 
*        COMPLETE REQUEST WITH RETURNCODE "ACCEPTED"
*        RELEASE BUFFER AND EXIT
* 
	ABL	RHI120 
* 
	EJECT
* 
* 
*	CLEAR PACKET
* 
********************************************************************* 
* 
*	INPUT PARAMETERS: 
*		A5  = REQUEST PENDING INDICATION 
*                       <0: NO REQUEST PENDING
*                       =0: READ REQUEST PENDING
*                       >0: OTHER REQUEST PENDING 
*                 A6  = DWT ADDRESS 
*		A8  = BUFFER ADDRESS 
*		A11 = ADDRESS OF INPUT-QUEUE ANCHOR
*                 A14 = CF STACK POINTER
* 
CLEPAC	EQU	*
	LDK	A3,CLEA.RC+MORE.RC	CLEAR + MORE INFO 
	LDK	A1,DWTCLE	DISP FOR CLEAR INFO
	RF	CLERES
	XIF
	EJECT
* 
* 
*	RESET PACKET
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A5  = REQUEST PENDING INDICATION 
*		      <0: NO REQUEST PENDING 
*		      =0: READ REQUEST PENDING 
*		      >0: OTHER REQUEST PENDING
*		A6  = DWT ADDRESS
*		A8  = BUFFER ADDRESS 
*		A14 = CF STACK POINTER 
* 
RESPAC	EQU	*
	CM	DWTRCI,A6	CLEAR RETURN INFO 
	LDK	A4,0 
	SC	A4,DWTWRO,A6
	LDK	A3,RSET.RC+MORE.RC	RESET + MORE INFO 
	LDK	A1,DWTRES	DISP FOR RESET INFO
CLERES	EQU	*
	ADR	A1,A6	WHERE TO STORE INFO
	LDK	A4,CAUSE 
	ADR	A4,A8	A4:=STARTADDR.OF CAUSE-FIELD IN PACKET 
* 
*        GET CAUSE AND DIAGNOSTIC CODE FROM PACKET
* 
         LCR      A7,A4 
         ECR      A7,A7 
         LC       A7,1,A4 
	EJECT
* 
*        STORE RESET CAUSE AND DIAGNOSTIC IN DWT
* 
	ORS	A3,DWTRCI,A6 
	STR	A7,A1
* 
*	TEST IF REQUEST PENDING 
* 
	LDR	A5,A5
	RF(N)	RESP30	NO! 
* 
*  	TEST IF CLOSE SYSTEM REQUEST PENDING
* 
	SUK	A5,CLOSYS
	IFT	STATI=1
	RF(Z)	RESP40	YES ! 
* 
*  	TEST IF STATISTIC REQUEST PENDING 
* 
	SUK	A5,STATIS-CLOSYS 
	XIF
	RF(Z)	RESP40	YES 
	LDK	A1,TOLD.RC	RESET/CLEAR TOLD TO USER
	ORS	A1,DWTRCI,A6 
	CF	A14,CMPREQ	COMPLETE REQUEST 
RESP30	EQU	*
	IFF	SWITVC=0 
	ANK	A3,CLEA.RC	CLEAR PACKET ?
	RF(Z)	RESP40	NO
	CF	A14,RELDWT	RELEASE DWT FROM CHAIN 
	XIF
* 
*	RELEASE BUFFER AND EXIT 
* 
RESP40	EQU	*
	ABL	RHI140 
	EJECT
* 
* 
*	DATA PACKET 
* 
******************************************************************* 
* 
*	INPUT PARAMETERS: 
*		A5  = REQUEST PENDING INDICATION 
*		      <0: NO REQUEST PENDING 
*		      =0: READ REQUEST PENDING 
*		      >0: OTHER REQUEST PENDING
*		A6  = DWT ADDRESS
*		A8  = BUFFER ADDRESS 
*		A10 = VC RELEASE INDICATION
*		      =0: VC RELEASED,ELSE NOT RELEASED
*		A11 = ADDRESS OF QUEUE ANCHOR
*		A13 = LC-ADM ADDRESS 
*		A14 = CF STACK POINTER 
* 
DATPAC	EQU	*
	LDKL	A9,DATA.RC
	LDR	A3,A6
	ADK	A3,DWTRCI
* 
*        TEST IF READ REQUEST PENDING 
* 
	LDR	A5,A5
	RF(NZ)	DAT030
* 
	EJECT
* 
*        READ REQUEST PENDING 
*        COPY PACKET TO USER BUFFER 
* 
	LDK	A1,BEGDAT	A1:=DISPL.IN PACKET FOR USER DATA
	ADR	A1,A8	A1:=STARTADDR.OF USER DATA IN PACKET 
	LDR*	A4,A8	A4:=TOTAL LENGTH OF DATA PACKET 
	SUK	A4,BEGDAT	A4:=LENGTH OF USER DATA
	CF	A14,COPTUB
	IFF	SWITVC=0 
* 
*        TEST IF DWT STATE IS VC RELEASED 
* 
         LDR      A10,A10 
         RF(Z)    DAT005           YES! 
	XIF
	LC	A2,NRNUBF,A13 
	ADK	A2,1 
	SC	A2,NRNUBF,A13	INCREMENT NR.OF UNUSED BUFFERS
DAT005   EQU      * 
* 
*        PREPARE RETURNCODE 
* 
	LDR*	A3,A3 
* 
*        TEST IF MORE-DATA-INDICATION SET 
* 
	LC	A5,MBIT,A8
	ANK	A5,MPOS
	RF(NZ)	DAT010
* 
*	MORE DATA INDICATION NOT SET
*	ADJUST RETURN CODE
* 
	ORKL	A3,LAST.RC
* 
	EJECT
* 
*        TEST IF QUALIFIER-BIT SET
* 
DAT010	EQU	*
	LC	A1,QBIT,A8
	ANK	A1,QPOS
	RF(Z)	DAT020 
* 
*        QUALIFIER-BIT SET; ADJUST RETURN CODE
* 
	ORKL	A3,QBIT.RC
* 
*        COMPLETE REQUEST WITH RETURNCODE IN A3 
*        RELEASE BUFFER AND EXIT
* 
DAT020	EQU	*
	ABL	RHI130 
* 
*        NO READ REQUEST PENDING
* 
DAT030	EQU	*
	ORRS	A9,A3	SET DATA AVAILABLE IN DWT 
* 
*        REQUEUE BUFFER,BLOCK QUEUE AND EXIT
* 
	ABL	RHI150 
	EJECT
* 
* 
*	INTERRUPT PACKET
* 
******************************************************************* 
* 
*	INPUT PARAMETERS: 
*		A5  = REQUEST PENDING INDICATION 
*		      <0: NO REQUEST PENDING 
*		      =0: READ REQUEST PENDING 
*		      >0: OTHER REQUEST PENDING
*		A6  = DWT ADDRESS
*		A8  = BUFFER ADDRESS 
*		A10 = VC RELEASE INDICATION
*		      =0: VC RELEASED,ELSE NOT RELEASED
*		A11 = ADDRESS OF QUEUE ANCHOR
*		A13 = LC-ADM ADDRESS 
*		A14 = CF STACK POINTER 
* 
INTPAC	EQU	*
         LDK      A7,DWTRCI 
         ADR      A7,A6 
         LDKL     A3,INTR.RC
* 
*	TEST IF READ REQUEST PENDING
* 
	LDR	A5,A5
	RF(NZ)	INT010
* 
	EJECT
* 
*        READ REQUEST PENDING 
*        COPY PACKET TO USER BUFFER 
*        RESET INTERRUPT RECEIVED INDICATION IN DWT 
* 
         C1R      A3,A3 
         ANRS     A3,A7 
	LDK	A1,BEGDAT	A1:=DISPL.IN PACKET FOR INTERRUPT- 
			USER DATA
	ADR	A1,A8	A1:=START ADDRESS OF INT.USER DATA 
	LDK	A4,1	LENGTH OF INT.USER DATA 
	CF	A14,COPTUB
         C1R      A3,A3            A3:=RETURNCODE:INTERRUPT PACKET REC. 
	ORR*	A3,A7 
	CF	A14,CMPREQ	COMPLETE REQUEST 
	LDR	A2,A8
	CF	A14,RLBUF	RELEASE BUFFER
* 
*	TEST IF DWT STATE IS VC RELEASED
* 
         LDR      A10,A10 
         RF(Z)    INT008           YES! 
* 
*	PREPARE INTERRUPT CONFIRMATION PACKET 
* 
INT002	EQU	*
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF
* 
*	TEST IF BUFFER IS FREE
* 
	LDR*	A1,A2 
	RF(Z)	INT004	YES 
	LDKL	A1,INT002	A1:=REACTIVATION ADDRESS
	ABL	BUFWAT	WAIT FOR FREE BUFFER
* 
	EJECT
* 
*	BUFFER IS FREE
* 
INT004	EQU	*
	LDK	A1,INT.CP
	SC	A1,IDENT,A2	SET INTERRUPT CONF.TYPE IN BUFFER 
	LDK	A1,INT.CL	PACKET LENGTH OF INTERRUPT CONF. 
	ST	A1,HDLC,A2	STORE LENGTH IN BUFFER 
	LDR	A1,A13 
	ADK	A1,QUEOUT	A1:=ADDRESS OF OUTPUT QUEUE ANCHOR 
	CF	A14,QUEUEF
* 
*	SET PROCESSING FLAG FOR OUTPUT QUEUE
* 
	LDK	A2,NPRFLG
	C1R	A2,A2
	ANRS	A2,A1	STORE PROCESSING FLAG 
INT008   EQU      * 
	ABL	EXITDC	EXIT
* 
*	NO READ REQUEST PENDING 
*	SET INTERRUPT RECEIVED INDICATION IN DWT
* 
INT010	EQU	*
	ORRS	A3,A7 
* 
*	REQUEUE BUFFER,BLOCK QUEUE AND EXIT 
* 
	ABL	RHI150 
	EJECT
* 
* 
*	INTERRUPT CONFIRMATION PACKET 
* 
********************************************************************* 
* 
*	INPUT PARAMETERS: 
*		A5  = REQUEST PENDING INDICATOR
*                       <0: NO REQUEST PENDING
*                       =0: READ REQUEST PENDING
*                       >0: OTHER REQUEST PENDING 
*                 A6  = DWT ADDRESS 
*		A8  = BUFFER ADDRESS 
*		A14 = CF STACK POINTER 
* 
INTCON	EQU	*
* 
*	TEST IF ANY REQUEST PENDING 
* 
         LDR      A5,A5 
	RF(N)	INC020 
* 
*	TEST IF WRITE INTERRUPT REQUEST PENDING 
* 
         SUK      A5,WRIINT 
	RF(NZ)	INC020	NO; IGNORE PACKET
* 
*        INTERRUPT REQUEST PENDING; COMPLETE REQUEST
*        RELEASE BUFFER AND EXIT
* 
	ABL	RHI120 
* 
*	RELEASE BUFFER AND EXIT 
* 
INC020	EQU	*
	ABL	RHI140 
	EJECT
* 
* 
*	COMPLETE USER REQUEST 
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A3  = RETURN CODE
*		A6  = DWT ADDRESS
*		A14 = CF STACK POINTER 
* 
*	CALLING SEQUENCE: 
*		CF A14,CMPREQ
* 
*	OUTPUT PARAMETERS:
*		NO REGISTERS ARE CHANGED 
* 
CMPREQ	EQU	*
	IFT	CPU852=1 
	ST	A1,CMPSAV	SAVE A1 
	ST	A2,CMPSAV+2	SAVE A2 
	XIF
	IFT	CPU852=0 
	MS	2,CMPSAV	SAVE A1 AND A2 
	XIF
* 
*	TEST IF REQUEST PENDING 
* 
         LD       A1,DWTST,A6 
         RF(N)    CMP020           NO!
* 
	EJECT
* 
*	TEST IF REQUEST TIMER IS RUNNING
* 
	LD	A1,DWTRTP,A6
	RF(Z)	CMP010	NO TIMER RUNNING
* 
*	CANCEL RUNNING TIMER
* 
	CF	A14,CANTIM
	CM	DWTRTP,A6	CLEAR RUNNING TIMER INDICATION
CMP010	EQU	*
* 
*	PREPARE INTERFACE FOR TENDIO
* 
	LDR	A1,A3	A1:= RETURN CODE 
	INH		.	=1
	CF	A15,TENDIO	COMPLETE REQUEST 
	ENB
CMP020   EQU      * 
	IFT	CPU852=1 
	LD	A1,CMPSAV	RELOAD A1 
	LD	A2,CMPSAV+2	RELOAD A2 
	XIF
	IFT	CPU852=0 
	ML	2,CMPSAV	RELOAD A1 AND A2 
	XIF
	RTN	A14	RETURN TO CALLER 
* 
*	SAVE AREA FOR A1,A2 
* 
CMPSAV	EQU	*
	DATA	0,0 
	EJECT
* 
* 
*	COPY INFORMATION FROM SYSTEM TO USER AREA 
* 
********************************************************************
* 
*	INPUT PARAMETERS: 
*		A1  = SYSTEM BUFFER ADDRESS
*		A4  = LENGTH OF BUFFER 
*		A6  = DWT ADDRESS
*		A14 = CF STACK POINTER 
* 
*	CALLING SEQUENCE: 
*		CF A14,COPTUB
* 
*	OUTPUT PARAMETERS:
*		NONE 
* 
COPTUB	EQU	*
	STR	A3,A14	SAVE A3 
	LD	A3,DWTECB,A6	GET ECB ADDRESS
	LD	A2,ECBBA,A3	GET USER BUFFER ADDRESS 
	ST	A4,ECBEL,A3	SET EFFECTIVE LENGTH
	LDR	A3,A4	BUFFER LENGTH
	LD	A4,DWTTAB,A6	GET TTAB ADDRESS 
	INH		.	=1
	CF	A15,MOVSU	MOVE DATA FROM SYSTEM TO USER 
	ENB		.	=1
	LDR*	A3,A14	RESTORE A3 
	RTN	A14
* 
	EJECT
* 
* 
*	SAVE REGISTERS A1-A8 IN DC SAVE AREA
* 
********************************************************************
* 
*	CALLING SEQUENCE: 
*		CF A14,SAVE8 
* 
*	OUTPUT PARAMETERS:
*		NO REGISTERS ARE CHANGED 
* 
SAVE8	EQU	* 
	IFT	CPU852=1 
	ST	A1,SAVE 
	ST	A2,SAVE+2 
	ST	A3,SAVE+4 
	ST	A4,SAVE+6 
	ST	A5,SAVE+8 
	ST	A6,SAVE+10
	ST	A7,SAVE+12
	ST	A8,SAVE+14
	XIF
	IFT	CPU852=0 
	MS	8,SAVE
	XIF
	RTN	A14
	EJECT
* 
* 
*	RELOAD REGISTERS A1-A8 FROM DC SAVE AREA
* 
******************************************************************* 
* 
*	CALLING SEQUENCE: 
*		CF A14,RELOA8
* 
*	OUTPUT PARAMETERS:
*		REGISTERS A1-A8 ARE RELOADED 
* 
RELOA8	EQU	*
	IFT	CPU852=1 
	LD	A1,SAVE 
	LD	A2,SAVE+2 
	LD	A3,SAVE+4 
	LD	A4,SAVE+6 
	LD	A5,SAVE+8 
	LD	A6,SAVE+10
	LD	A7,SAVE+12
	LD	A8,SAVE+14
	XIF
	IFT	CPU852=0 
	ML	8,SAVE
	XIF
	RTN	A14	RETURN TO CALLER 
	EJECT
* 
* 
*	THIS MODULE SELECTS FROM THE DWT THE TRANSPORT HANDLER
*	FUNCTION WHICH HAS TO BE EXECUTED.
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS (NOT FOR START & STOP REQUEST) 
*		A12 = LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,TRANSH 
* 
*	OUTPUT PARAMETERS:
*		A4  = RETURN CODE
*		A13 = LC-ADM ADDRESS 
*		NO OTHER REGISTERS ARE CHANGED 
* 
TRANSH	EQU	*
         CF       A14,SAVE8             SAVE REGISTERS
	LC	A1,DWTFNC,A6	GET FUNCTION CODE
	ANK	A1,/FF	. 
	LC	A4,DWTLCN,A6	GET LC-ADM ADDRESS 
	ANK	A4,/FF	. 
	SLL	A4,1	. 
	AD	A4,LC:TAB,A12	. 
	LDR*	A13,A4	.
         ABI      TABTH,A1              BRANCH TO THE CONCERNING ROUTINE
* 
	EJECT
* 
*	GENERAL RETURN PART 
* 
READY	EQU	* 
         ST       A4,SAVE+6             SAVE RETURN CODE
         CF       A14,RELOA8
	RTN	A14	BACK TO THE REQUEST HANDLER
* 
*	BRANCH TABLE FOR TRANSPORT HANDLER FUNCTIONS
* 
TABTH	EQU	* 
	DATA	START	OPEN REQUEST
	DATA	STPINT	CLOSE REQUEST
	DATA	CALLR	CONNECT ACTIVE REQUEST
	IFF	SWITVC=0 
	DATA	CALL30	CONNECT PASSIVE REQUEST
	DATA	CLEAR	DISCONNECT REQUEST
	DATA	CALLCR	ACCEPT CALL
	XIF
	IFT	SWITVC=0 
	DATA	HLT	CONNECT PASSIVE REQUEST 
	DATA	CLEAR	DISCONNECT REQUEST
	DATA	HLT	ACCEPT CALL 
	XIF
	DATA	RRR	ACCEPT DATA(READ) 
	DATA	RNRR	REFUSE DATA REQUEST
	DATA	DATA	WRITE REQUEST
	DATA	INTR	WRITE INTERRUPT REQUEST
* 
STPINT	EQU	*
	CF	A14,STOP
	RB	READY 
* 
	EJECT
* 
* 
*	PROCESSING OF THE OPEN SYSTEM REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A12 = LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    START 
*		A RETURN IS MADE TO THE LABEL "READY"
* 
*	OUTPUT PARAMETERS:
*		A4  = RETURN CODE
* 
START	EQU	* 
	LDK	A4,HRDERR	PRESET RETURN CODE 
	LDK	A1,CLOFLG	CLOSE STILL BUSY ? 
	AN	A1,CMNFLG,A12	. 
	ABL(NZ)	READY	YES
	LDK	A2,0 
* 
*	INITIATE LC-ADM TABLES
* 
	LC	A4,NRLC,A12	GET # OF LOGICAL CHANNELS 
	ANK	A4,/FF	. 
	SUK	A4,1	. 
	IFF	PERMVC=0 
	LC	A7,NRPVC,A12	GET # OF PVC'S 
	ANK	A7,/FF	. 
	SUK	A7,1	. 
	XIF
* 
	EJECT
STRT00	EQU	*
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	SC	A4,LCNUM,A13	LOGICAL CHANNEL NUMBER 
	ST	A2,LCSTAT,A13	STATUS AND SUB-STATUS 
	ST	A2,FLAGS,A13	BOOLEAN VARIABLES
	SC	A2,VCTYP,A13	VC-TYPE
	SC	A2,NRNUBF,A13	FREE INPUT BUFFERS
	ST	A2,LCDWT,A13	LC TO DWT RELATION 
	ST	A2,QUEINP,A13	RH-INPUT QUEUE
	ST	A2,QUEOUT,A13	TH-OUTPUT QUEUE 
	ST	A2,TIMADR,A13	TIMER BLOCK ADDRESS 
	ST	A2,SYSBUF,A13	FREE SYSTEM BUFFER
	LDKL	A1,/1000
	ORR	A1,A4	GENERAL FORMAT + LOG. CHANNEL NR.
	ST	A1,SYSBUF+LCIDNT-1,A13
	IFF	SWITVC=0 
	IFF	PERMVC=0 
	CWR	A7,A4	IS THIS A PVC ?
	RF(NE)	STRT02	NO 
	XIF
	IFF	PERMVC=0 
	LDKL	A8,PVC	SET PVC TYPE 
	SC	A8,VCTYP,A13	.
	LDKL	A8,DATA.ST	SET DATA TRANSFER STATE
	SC	A8,LCSTAT,A13	. 
	LD	A1,WNDSIZ,A12	SET WINDOW SIZES
	SC	A1,LCREWN,A13	. 
	SC	A1,LCTRWN,A13	. 
	LD	A1,PACKLN,A12	SET PACKET LENGTH 
	ST	A1,TRBFSZ,A13	. 
	ST	A1,REBFSZ,A13	. 
	CF	A14,TRTHR	TRANSLATE THRESHOLD PERCENTAGE
	CF	A14,CLLCAD	CLEAR LC-ADM FIELDS
	SUK	A7,1	. 
STRT02	EQU	*
	XIF
	SUK	A4,1	NEXT LC-ADM ? 
	RB(NN)	STRT00	YES
* 
	EJECT
* 
*	INITIATE LINE BLOCK 
* 
	LD	A1,FILCOD,A12	FILE CODE 
	LDR	A8,A12	LINE ECB-ADDRESS
	ADKL	A8,LOCECB	. 
	STR	A1,A8	SAVE FILE CODE 
	CM	NRPNDT,A12	NUMBER OF PENDING OUTPUT REQUESTS
	CM	HRDSTA,A12	HARDWARE STATUS
	CM	RTMADR,A12	RESTART TIMER ADDRESS
	CM	RSTQUE,A12	CLEAR RESTART QUEUE ANCHOR 
* 
*	INITIATE OUTPUT ECB'S 
* 
	LDK	A2,SYNRTR	GET NUMBER OF ECB'S
	LDR	A3,A12	GET FIRST ECB ADDRESS 
	ADK	A3,ECBOU1	.
STRT05	EQU	*
	ST	A1,ECBFC,A3	SAVE FILE CODE
	CM	ECBBA,A3	CLEAR BUFFER ADDRESS 
         ADK      A3,ECBINL+SYSBFL
	SUK	A2,1 
	RB(P)	STRT05	NEXT ECB
* 
*	PREPARE OPEN REQUEST ECB
* 
	LDR	A8,A12	ECB-ADDRESS 
	ADKL	A8,LOCECB	. 
	LDR	A4,A12	ADDRESS USER BLOCK
	ADK	A4,UBNUM	. 
	ST	A4,ECBBA,A8	TO ECB
	LD	A5,PACKLN,A12	RECEIVE BUFFER SIZE 
	ADK	A5,BEGDAT	.
	ST	A5,ECBRL,A8	. 
* 
	EJECT
* 
*	SET OPEN BUSY INDICATION
* 
	LDK	A3,OPEFLG
	ORS	A3,CMNFLG,A12
* 
*	PREPARE USER BLOCK WITH INPUT BUFFERS 
* 
	LDK	A3,SYUBNR	NUMBER OF USER BUFFERS 
	STR	A3,A4	.
STRT10	EQU	*
	ADK	A4,2	UPDATE STORE POINTER
	CF	A14,GTBUF	GET A BUFFER
	STR	A2,A4	SAVE BUFFER ADDRESS
	SUK	A3,1	MORE BUFFERS NEEDED ? 
	RB(P)	STRT10	YES 
	LDK	A7,CONN+/80	ORDER CODE 
	LD	A2,DWTRTV,A6	GET TIMER VALUE
STRT20	EQU	*
	LKM		ISSUE OPEN LINE REQUEST 
	DATA	1 
* 
*	AFTER COMPLETION,CHECK RETURN CODE
* 
	LD	A1,ECBRC,A8 
	RF(Z)	STRT40	NO ERRORS 
	LDKL	A3,HRDWER	HARDWARE ERRORS ? 
	ANR	A3,A1	.
	RF(Z)	STRT30	NO
	ST	A1,HRDSTA,A12	SAVE STATUS 
	LDK	A4,HRDERR	RETURN CODE
	RF	RETUR2
* 
	EJECT
* 
*	TEST ON TYPE OF ERROR 
* 
STRT30	EQU	*
	LDK	A4,DISCRM	PRESET REURN CODE
	CWK	A1,REMDIS	IS IT REMOTE DISC. ? 
	RF(E)	RETUR2	YES 
	CWK	A1,DEFTIM	TIME-OUT ? 
	ABL(NE)	HLT	ERROR
	LDR	A2,A2	TIME OUT ? 
	RB(Z)	STRT20	NO
	LDK	A4,TMEOUT	PRESET RETURN CODE 
	SUKL	A2,330	TIME OUT ? 
	RF(N)	RETUR2	YES,COMPLETE REQUEST
	RB	STRT20	NO,CONTINUE
* 
	EJECT
* 
*	ISSUE A NUMBER OF INPUT REQUESTS
* 
STRT40	EQU	*
	LDK	A1,STRTFL	SET SYSTEM STARTED FLAG
	ORS	A1,CMNFLG,A12	.
	LDK	A4,SYNRRC	NUMBER OF INPUT REQUESTS 
	LDR	A8,A12	ADDRESS FIRST INPUT ECB 
	ADKL	A8,ECBIN1	. 
STRT50	EQU	*
	LD	A1,FILCOD,A12	FILE CODE TO ECB
	ST	A1,ECBFC,A8	. 
	CF	A14,GTBUF	GET AN INPUT BUFFER 
	ST	A2,ECBBA,A8	. 
	LD	A1,PACKLN,A12	RECEIVE BUFFER SIZE 
	ADK	A1,BEGDAT	.
	ST	A1,ECBRL,A8	. 
	LDR	A1,A8	PARAMETER AFTER COMPLETION 
	LDK	A7,RECEIV	ORDER CODE 
	LKM		ISSUE INPUT REQUEST 
	DATA	-1
	DATA	ENDIN	ACTIVATION ADDRESS
	ADKL	A8,ECBINL	GET NEXT ECB-ADDRESS
	SUK	A4,1	NEXT ONE ?
	RB(P)	STRT50	YES 
* 
	EJECT
* 
*	PREPARE RESTART PACKET AND QUEUE IT FOR OUTPUT
* 
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDK	A1,RSTR.P	RESTART PACKET TYPE
	SC	A1,IDENT,A2	. 
	LDK	A1,0 
	SC	A1,CAUSE,A2	RESTART CAUSE 
	SC	A1,DGNCOD,A2	DIAGNOSTIC CODE
	LDK	A1,RSTR.L	PACKET LENGTH
	ST	A1,HDLC,A2	.
	LDR	A1,A12	OUTPUT QUEUE ANCHOR ADDRESS 
	ADK	A1,RSTQUE	.
	CF	A14,QUEUE	QUEUE ELEMENT 
	LDK	A1,RSTFLG	SET RESTART BUSY FLAG
	ORS	A1,CMNFLG,A12	.
* 
*	START TIMER 
* 
	LDR	A2,A13	SAVE REGISTER A13 
	SUR	A13,A13	CLEAR IT 
	LDKL	A4,TIMOUT	ACTIVATION ADDRESS
	LDKL	A8,SYRSTM	TIME-OUT VALUE
	CF	A14,STRTIM	START TIMER
	ST	A4,RTMADR,A12	SAVE TIMER ADDRESS
	LDR	A13,A2	RESTORE REGISTERS 
	LDK	A4,RTNOK	RETURN CODE := OK 
* 
	EJECT
* 
*	READY 
* 
RETURN	EQU	*
* 
*	RESET OPEN SYSTEM BUSY INDICATION 
* 
	LDK	A1,OPEFLG
         C1R      A1,A1 
         ANS      A1,CMNFLG,A12 
	ABL	READY	BACK TO CALLER 
* 
*	RELEASE BUFFERS, CONNECTION FAILED
* 
RETUR2	EQU	*
	LDK	A3,SYUBNR
	LD	A1,ECBBA,A8	PARAMETER BLOCK ADDRESS 
RETUR4	EQU	*
	ADK	A1,2 
	LDR*	A2,A1	A2 := BUFFER TO BE RELEASED 
	CF	A14,RLBUF 
	SUK	A3,1 
	RB(P)	RETUR4	RELEASE NEXT BUFFER 
	RB	RETURN
	EJECT
* 
* 
*	PROCESSING OF THE CLOSE SYSTEM REQUEST
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT ADDRESS OR ZERO (INTERNAL CALL)
*		A12 = LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK
* 
*	CALLING SEQUENCE: 
*		CF    A14,STOP 
* 
*	OUTPUT PARAMETERS:
*		A4  = RETURN CODE
*                 A1,A2,A3,A5,A6,A7,A8 ARE CHANGED
* 
STOP	EQU	*
* 
*	GET LINE IDENTIFICATION 
* 
         LDK      A1,CLOFLG 
         AN       A1,CMNFLG,A12    CLOSE BUSY?
         RF(NZ)   CLOS40           YES
         LDK      A1,CLOFLG 
         ORS      A1,CMNFLG,A12    SET CLOSE BUSY 
* 
	EJECT
* 
*	PREPARE CLOSE REQUEST ECB 
* 
	LDR	A8,A12	LINE ECB-ADDRESS
	ADKL	A8,LOCECB	. 
	LDR	A1,A12	ADDRESS USER BLOCK
	ADK	A1,UBNUM	. 
	ST	A1,ECBBA,A8	. 
	ST	A6,ECBCW1,A8	SAVE DWT ADDRESS 
	LDK	A4,SYUBNR	NUMBER OF USER BUFFERS 
	STR	A4,A1	.
* 
*	TEST IF THERE IS ANY PENDING REQUESTS TO
*	COMPLETE FOR THIS LINE(IF ALLOWED !)
* 
	LDR	A5,A6
CLOS01	EQU	*
	LD	A6,CHAIN,A12	GET DWT CHAIN ANCHOR 
	RF(Z)	CLOS30	NO CONNECTION ACTIVE
CLOS05	EQU	*
* 
*	TEST IF DISCONNECTION ALLOWED 
* 
	ADK	A5,0	INTERNAL CALL ? 
	RF(Z)	CLOS15	YES 
	LDK	A3,SEQE.RC	SEQUENCE ERROR
	LC	A1,DWTOPT,A5
	ANK	A1,CLOOPT	CLOSE ALLOWED ?
	RF(Z)	CLOS15	YES 
	LDR	A6,A5	RELOAD A6
	LDK	A1,CLOFLG
	XRS	A1,CMNFLG,A12	RESET CLOSE BUSY IND.
	RF	CLOS55	COMPLETE REQUEST 
* 
	EJECT
* 
CLOS15	EQU	*
	LDK	A3,LOGE.RC	LOGICAL ERROR 
	LDK	A2,DISCON
	LDK	A7,0 
	LC	A7,DWTFNC,A6	GET FUNCTION CODE
	LDR	A1,A7
	IFT	STATI=1
	SUK	A7,STATIS	STATISTIC REQUEST ?
	RF(Z)	CLOS16	YES 
	ADK	A7,STATIS
	XIF
	SUK	A1,CLOSYS	CLOSE SYSTEM ? 
	RF(NZ)	CLOS18	NO 
CLOS16	EQU	*
	CW	A2,DWTSTE,A6	DWT DISCONNECTED ? 
	RF(E)	CLOS25	YES 
CLOS18	EQU	*
	SC	A2,DWTSTE,A6
	LD	A2,DWTST,A6	REQUEST PENDING ? 
	RF(N)	CLOS19	NO
	SUK	A7,CONPAS	CONNECT PASSIVE ?
	RF(Z)	CLOS20	YES 
CLOS19	EQU	*
	LC	A4,DWTLCN,A6
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	CM	LCDWT,A13	CLEAR RELATION LC-DWT 
CLOS20	EQU	*
	CF	A14,RELDWT	RELEASE DWT FROM CHAIN 
	ADK	A1,0	CLOSE SYSTEM ?
	RB(Z)	CLOS01	YES 
	CF	A14,CMPREQ	COMPLETE REQUEST 
	RB	CLOS01	TAKE NEXT
* 
	EJECT
* 
*	TEST IF MORE DWT'S IN CHAIN 
* 
CLOS25	EQU	*
	LD	A6,DWTCHN,A6
	RB(NZ)	CLOS05	YES
CLOS30	EQU	*
* 
*	ISSUE STOP REQUEST
* 
	LDK	A7,DISCN	ORDER CODE,CLOSE LINE 
	LDR	A1,A8	PARAMETER FOR ACTIVATION PART
	LKM
	DATA	-1
	DATA	CLOEND	ACTIVATION LABEL 
CLOS40	EQU	*
	LDK	A4,RTNOK	SET RETURN CODE 
	RTN	A14	BACK TO CALLER 
	EJECT
* 
*	ACTIVATION PART AFTER COMPLETED CLOSE REQUEST 
* 
CLOEND	EQU	*
	LDKL	A14,DCSTAK	SET CALL FUNCTION STACK POINTER
	LDR	A8,A1	SAVE ECB-ADDRESS 
	CF	A14,GTLBA	GET LINE BLOCK ADDRESS
	LDK	A1,STRTFL+CLOFLG	RESET FLAGS 
         ORK      A1,RSTFLG 
	C1R	A1,A1	.
	ANS	A1,CMNFLG,A12	.
	LD	A4,ECBBA,A8	ADDRESS USER BLOCK
	LDR*	A3,A4	NUMBER OF USER BUFFERS
CLOS50	EQU	*
	ADK	A4,2 
	LDR*	A2,A4	BUFFER ADDRESS
	CF	A14,RLBUF	RELEASE INPUT BUFFER
	SUK	A3,1	NEXT ONE ?
	RB(P)	CLOS50	YES 
	LD	A6,ECBCW1,A8	GET DWT ADDRESS
* 
*	TEST IF DWT ADDRESS IS VALID
* 
         RF(Z)    CLOS60
	LDK	A3,0 
CLOS55	EQU	*
	CF	A14,CMPREQ	COMPLETE REQUEST 
CLOS60	EQU	*
	ABL	EXITDC	CONTROL TO SCHEDULER
	EJECT
* 
*	PROCESSING OF A CONNECT ACTIVE REQUEST
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A12 = LINE CONTROL BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CALLR 
*		A RETURN IS MADE TO THE LABEL READY
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
*		A13 = LC-ADM ADDRESS 
* 
CALLR	EQU	* 
	IFF	SWITVC=0 
         LC       A1,DWTOPT,A6     PVC REQUESTED ?
         ANK      A1,PVC
         RF(NZ)   CALLPV           YES
* 
*	TEST IF REMOTE DTE IS SUPPORTED 
* 
	LD	A1,DWTRAD,A6
	LDKL	A3,SVCTYP	SET TYPE
	LDK	A4,NOLCAV
	INH		.	=1
	CF	A15,FNDDNT	FIND DTE 
	ENB		.	=1
	LDR	A1,A1	FOUND ?
	RF(N)	CALL40	NO
* 
	EJECT
* 
*	SEARCH FOR A READY LOGICAL CHANNEL
* 
	LC	A4,NRLC,A12	GET # OF LOGICAL CHANNELS 
	ANK	A4,/FF	. 
	SUK	A4,1	. 
CALL00	EQU	*
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	LC	A1,LCSTAT,A13	LC-STATUS 
	ANK	A1,/FF 
	RF(Z)	CALL10	READY 
	SUK	A4,1	TRY NEXT ENTRY
	RB(NN)	CALL00	YES
	EJECT
         IFT      PERMVC=0
CALLPV   EQU      * 
         XIF
	IFF	SWITVC=0 
	LDK	A4,NOLCAV	RETURN CODE := NO LOG. CHAN. AVAILABLE 
	RF	CALL40	BACK TO CALLER 
CALL10	EQU	*
	SC	A4,DWTLCN,A6	SAVE LC-NUM IN DWT 
* 
*	COMPLETE LC-ADM 
* 
	LDK	A1,LCAL.ST	LC-STAT := LOCAL-CALL 
	SC	A1,LCSTAT,A13	. 
	LDK	A1,0	ALL INPUT BUFFERS ARE USED
	SC	A1,NRNUBF,A13	. 
	ST	A6,LCDWT,A13	SAVE DWT-ADDRESS 
	XIF
	IFT	SWITVC=0 
	RF	CALLPV
* 
	EJECT
	XIF
* 
*	QUEUE CONNECT REQUEST FOR OUTPUT
* 
CALL20	EQU	*
	LDR	A2,A6	ELEMENT ADDRESS
	CF	A14,QUEO	QUEUE ELEMENT
* 
*	READY 
* 
CALL30	EQU	*
	LDK	A4,RTNOK	RETURN CODE := OK 
CALL40	EQU	*
	ABL	READY
	IFF	PERMVC=0 
	EJECT
* 
*	A CONNECT REQUEST FOR A PERMANENT VIRTUAL CIRCUIT 
* 
CALLPV	EQU	*
* 
*	SEARCH FOR A NOT USED LOGICAL CHANNEL 
* 
	LC	A4,NRLC,A12	GET # OF LOG. CHANNELS
	ANK	A4,/FF	. 
	SUK	A4,1	. 
	LDK	A1,NOREMO	REMOTE ADDRESS NOT SUPPORTED 
CALL60	EQU	*
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	LDK	A3,PVC	IS IT A PVC ? 
	CC	A3,VCTYP,A13	.
	RF(NE)	CALL70	NO 
         LD       A3,DWTRAD,A6     THE REQUESTED DESTINATION ?
         CW       A3,REMADR,A13 
	RF(NE)	CALL70	NO 
	LDK	A1,NOLCAV	NO LOGICAL CHANNEL AVAILABLE 
	LD	A3,LCDWT,A13	LC ALREADY IN USE ?
	RF(Z)	CALL80	NO
CALL70	EQU	*
	SUK	A4,1	TRY NEXT ENTRY
	RB(NN)	CALL60	.
	LDR	A4,A1	GET RETURN CODE
	RB	CALL40	BACK TO CALLER 
* 
CALL80	EQU	*
	SC	A4,DWTLCN,A6	SAVE LOG. CHAN. NR IN DWT
         ST       A6,LCDWT,A13     SAVE DWT ADDRESS 
         RB       CALL30           BACK TO CALLER 
	XIF
	IFF	SWITVC=0 
	EJECT
* 
* 
*	PROCESSING OF AN ACCEPT CALL REQUEST
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CALLCR
*		A RETURN IS MADE TO THE LABEL READY
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
* 
CALLCR	EQU	*
	LDK	A4,INVSTA	PRESET RETURN CODE := ILL. STATUS
	LDK	A1,RCAL.ST	LC-STATUS = REMOTE CALL ? 
	CC	A1,LCSTAT,A13	. 
	RB(NE)	CALL40	NO, ERROR
* 
*	UPDATE LC-ADM 
* 
	LDK	A1,DATA.ST	LC-STATUS := DATA TRANSFER
	ECR	A1,A1	.
	ST	A1,LCSTAT,A13	LC-SUBSTAT := FLOW CONTROL READY
	CF	A14,CLLCAD	CLEAR FIELDS IN LC-ADM 
* 
	EJECT
* 
*	IF ACCEPT REQUEST FROM USER THEN EMPTY INPUT QUEUE
* 
	LDK	A1,INCALR
	CC	A1,DWTSTE,A6
	RB(NE)	CALL20	NO USER REQUEST
         CF       A14,CLINPQ
* 
*	RESET DATA AVAILABLE INDICATION 
* 
	CM	DWTRCI,A6 
* 
*	QUEUE PACKET AND RETURN 
* 
	RB	CALL20
* 
	XIF
	EJECT
* 
* 
*	PROCESSING OF A DATA TRANSMISSION REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    DATA
*		A RETURN IS MADE TO THE LABEL READY
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
* 
DATA	EQU	*
	LDK	A4,INVSTA	PRESET RETURN CODE 
	LDK	A1,DATA.ST 
	CC	A1,LCSTAT,A13	LC-STATUS = DATA TRANSF. ?
	RB(NE)	CALL40	NO, ERROR
* 
*	QUEUE REQUEST AND RETURN
* 
DATA10	EQU	*
	RB	CALL20
	EJECT
* 
* 
*	PROCESSING OF A DISCONNECT REQUEST
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CLEAR 
*		A RETURN IS MADE TO THE LABEL READY
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
* 
CLEAR	EQU	* 
	IFF	SWITVC=0 
         LC       A1,VCTYP,A13     PVC CONCERNING ? 
         ANK      A1,PVC
	RF(Z)	CLEA00	NO! 
	XIF
	CF	A14,CLINPQ	CLEAR INPUT QUEUE
	CM	LCDWT,A13	RELEASE RELATION WITH DWT 
	RB	CALL30
* 
	IFF	SWITVC=0 
CLEA00	EQU	*
	LDK	A1,CLEA.ST	LC-STATUS = CLEAR ? 
	CC	A1,LCSTAT,A13	. 
         RF(NE)   CLEA10                 NO 
* 
	EJECT
* 
*	REFUSE REQUEST
* 
	LDK	A4,CLEBUS	SET RETURN CODE
	RB	CALL40
* 
*	START TIMER 
* 
CLEA10    EQU      *
	LDKL	A8,SYCLTM	TIME-OUT VALUE
	CF	A14,STTIM	START TIMER 
* 
*	UPDATE LC-ADM 
* 
	LDK	A1,CLEA.ST	NEW STATUS := CLEAR 
	SC	A1,LCSTAT,A13	. 
* 
*	EMPTY INPUT QUEUE 
* 
         CF       A14,CLINPQ
* 
*	QUEUE ELEMENT AND RETURN
* 
	RB	CALL20
* 
	XIF
	EJECT
* 
* 
*	PROCESSING OF THE ACCEPT DATA REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    RRR 
*		A RETURN IS MADE TO THE LABEL READY
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
* 
RRR	EQU	* 
	LDK	A4,INVSTA	PRESET RETURN CODE 
	LDK	A1,DATA.ST 
	CC	A1,LCSTAT,A13	LC-STATUS = DATA TRANSFER ? 
	RB(NE)	CALL40	NO, ERROR
* 
*	QUEUE ELEMENT AS FIRST FOR TRANSMISSION 
* 
         RF       INTR00
	EJECT
* 
* 
*	PROCESSING OF THE REFUSE DATA REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    RNRR
*		A RETURN IS MADE TO THE LABEL READY
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
* 
RNRR	EQU	*
	LDK	A4,INVSTA	PRESET RETURN CODE 
	LDK	A1,DATA.ST 
	CC	A1,LCSTAT,A13	LC-STATUS = DATA TRANSFER ? 
	RB(NE)	CALL40	NO, ERROR
* 
*	BLOCK INPUT QUEUE 
* 
	LDK	A1,NPRFLG
	ORS	A1,QUEINP,A13
* 
*	QUEUE ELEMENT FOR TRANSMISSION
* 
         RF       INTR00
	EJECT
* 
* 
*	PROCESSING OF THE WRITE INTERRUPT REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A6  = DWT-ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    INTR
* 
*	OUTPUT PARAMETERS:
*		A4 = RETURN CODE 
* 
INTR	EQU	*
	LDK	A4,INVSTA	PRESET RETURN CODE 
	LDK	A1,DATA.ST 
	CC	A1,LCSTAT,A13	LC-STATUS = DATA TRANSFER ? 
	RB(NE)	CALL40	NO, ERROR
	LDK	A4,SEQE.RC	SEQUENCE ERROR
	LDK	A1,INTPNG	INTERRUPT PENDING ?
	AN	A1,FLAGS,A13	.
	RB(NZ)	CALL40	YES !
         LDK      A1,INTPNG             SET INTERRUPT PENDING FLAG
         ORS      A1,FLAGS,A13
* 
	EJECT
* 
*	QUEUE ELEMENT FOR TRANSMISSION
* 
INTR00   EQU      * 
	LDR	A2,A6	ELEMENT ADDRESS
	LDR	A1,A13	QUEUE ANCHOR ADDRESS
	ADK	A1,QUEOUT	.
	CF	A14,QUEUEF	QUEUE AS FIRST ELEMENT 
	LDK	A2,NPRFLG	RESET NO PROCESSING FLAG 
	C1R	A2,A2	.
	ANRS	A2,A1	. 
	ABL	CALL30	BACK TO CALLER
	EJECT
* 
* 
*	THIS MODULE GETS CONTROL FROM THE SCHEDULER 
*	IN ORDER TO TRANSMIT A PACKET 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = QUEUE ANCHOR ADDRESS 
*		A12 = LINE BLOCK ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    OUTPCK
* 
OUTPCK	EQU	*
* 
*	GET AN OUTPUT ECB 
* 
	LDR	A3,A12	FIRST OUTPUT ECB
	ADK	A3,ECBOU1	.
OUTP00	EQU	*
	LD	A2,ECBBA,A3	IS ECB BUSY ? 
	RF(Z)	OUTP10	NO
	ADK	A3,ECBINL+SYSBFL	NEXT OUTPUT ECB 
	RB	OUTP00	.
* 
OUTP10	EQU	*
	LDR	A8,A3	ECB-ADDRESS
	ADK	A3,ECBINL
	ST	A3,ECBBA,A8	SYSTEM OUTPUT BUFFER
	CM	HDLC,A3	CLEAR HDLC-HEADER 
	LDK	A4,/10 
	SC	A4,GNFRM,A3	GENERAL FORMAT IDENTIFIER 
* 
	EJECT
* 
*	DEQUEUE AND CHECK ELEMENT 
* 
	CF	A14,DEQUE	GET ELEMENT 
	ST	A1,SAVE	SAVE QUEUE ANCHOR ADDRESS 
	LDKL	A1,DWTTYP 
	CW	A1,DWTCHP,A2	CHECK TYPE 
	ABL(NE)	OUT400	NO DWT
	LDR	A6,A2	SAVE DWT-ADDRESS 
	LD	A9,DWTECB,A6	GET ECB-ADDRESS
	ABL(Z)	EXITDC	ELEMENT ALREADY COMPLETED
	LC	A4,DWTLCN,A6
	SC	A4,LCIDNT,A3	LOGICAL CHANNEL NUMBER 
* 
*	SELECTION ON REQUEST TYPE 
* 
	LDR	A2,A3	SAVE BUFFER ADDRESS
	LC	A3,DWTFNC,A6	GET FUNCTION CODE
	ANK	A3,/FF	. 
	SUK	A3,CONACT
	ABI	OUTTAB,A3
* 
	EJECT
* 
*	REQUEST OUTPUT TABLE
* 
OUTTAB	EQU	*
	IFF	SWITVC=0 
	DATA	OUT100	CONNECT ACTIVE REQUEST 
	DATA	HLT	CONNECT PASSIVE REQUEST 
	DATA	OUT200	DISCONNECT REQUEST 
	DATA	OUT210	ACCEPT CALL
	XIF
	IFT	SWITVC=0 
	DATA	HLT	CONNECT ACTIVE REQUEST
	DATA	HLT	CONNECT PASSIVE REQUEST 
	DATA	HLT	DISCONNECT REQUEST
	DATA	HLT	ACCEPT CALL 
	XIF
	DATA	OUT300	ACCEPT DATA
	DATA	OUT310	REFUSE DATA REQUEST
	DATA	OUT000	WRITE REQUEST
	DATA	OUT220	WRITE INTERRUPT REQUEST
	DATA	OUT300	READ(ACCEPT DATA)
* 
HLT	HLT		ILLEGAL
* 
	EJECT
* 
*	A DATA PACKET HAS TO BE TRANSMITTED 
* 
OUT000	EQU	*
	LDK	A1,REMBUS
	AN	A1,FLAGS,A13	IS REMOTE STATION BUSY ? 
	RF(NZ)	OUT050	YES
* 
*	IS WINDOW FULL ?
* 
	LDK	A4,0 
	LDK	A5,0 
	LC	A4,PS,A13	PS TO BE TRANSMITTED
	LC	A5,SLWE,A13	SEND LOWER WINDOW EDGE
	SUR	A4,A5	PS - LWE 
	ANK	A4,/07	MODULO 8
	CC	A4,LCTRWN,A13	MUST BE WITHIN WINDOW SIZE
	RF(NL)	OUT050	WINDOW IS FULL 
* 
*	PREPARE DATA PACKET HEADER
* 
	LC	A1,DWTWRO,A6	WRITE OPTION 
	LDR	A3,A1	SAVE IT
	ANK	A1,QPOS
	ECR	A1,A1
	ORS	A1,GNFRM,A2	INCLUDE Q-BIT
	LC	A1,PS,A13	PS
	SLL	A1,1	PUT IT ON THE RIGHT POSITION
	ANK	A3,MPOS
	ORR	A1,A3	INCLUDE M-BIT
	LC	A3,PR,A13	PR
         SC       A3,RLWE,A13      SAVE IT AS LAST TRANSMITTED PR 
	SLL	A3,5	PUT IT ON THE RIGHT POSITION
	ORR	A1,A3	ALL TOGETHER 
* 
	EJECT
* 
*	INCREMENT SEND SEQUENCE NUMBER
* 
         LC       A5,PS,A13        GET OLD PS 
         ADK      A5,1             INCREMENT
         ANK      A5,/07           MODULO 8 
         SC       A5,PS,A13        SAVE NEW PS
	SC	A1,IDENT,A2	SAVE PS & PR IN OUTPUT BUFFER 
* 
*	COPY USER DATA TO OUTPUT BUFFER 
* 
	LD	A1,ECBBA,A9	USER BUFFER ADDRESS 
	ADK	A2,BEGDAT	WHERE TO MOVE
	LD	A3,ECBRL,A9 
	LDR	A4,A3
	ADK	A4,BEGDAT
	ST	A4,ECBRL,A8	OUTPUT BUFFER 
	LD	A5,DWTTAB,A6
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
* 
*	ISSUE OUTPUT REQUEST
* 
OUT040	EQU	*
	LDR	A1,A8	PARAMETER ADDRESS
	LDK	A7,TRANSM	ORDER CODE 
* 
	LKM
	DATA	-1
	DATA	ENDOUT	ACTIVATION LABEL AFTER COMPLETION
         IM       NRPNDT,A12       INCREMENT NUMBER OF PENDING OUTPUT 
	RF	OUT060	CONTROL BACK TO SCHEDULER
* 
	EJECT
* 
*	NO TRANSMISSION ALLOWED AT THIS MOMENT
* 
OUT050	EQU	*
         CM       ECBBA,A8
	LD	A1,SAVE	QUEUE ANCHOR ADDRESS
	LDR	A2,A6	ELEMENT ADDRESS
	CF	A14,QUEUEF	ELEMENT BACK TO QUEUE
	LDK	A2,NPRFLG	SET "NO PROCESSING" FLAG 
	ORRS	A2,A1	. 
OUT060	EQU	*
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	IFF	SWITVC=0 
* 
	EJECT
* 
*	PREPARE AND TRANSMIT CALL PACKET
* 
OUT100	EQU	*
	LDK	A1,CAL.P 
	SC	A1,IDENT,A2	PACKET TYPE 
* 
*	GET REMOTE DTE-ADDRESS
* 
	ADK	A2,BEGDAT+1
	LDR	A4,A2
	LD	A1,DWTRAD,A6
	LDKL	A3,SVCTYP	SET TYPE
	INH		.	=1
	CF	A15,GETDNT	GET REAL DTE-ADDRESS 
	ENB		.	=1
	LDR	A3,A1	SAVE LENGTH
	IFT	CALDTE=1 
* 
*	GET LOCAL DTE-ADDRESS 
* 
	LDR	A7,A2	SAVE ADDRESS 
	LD	A1,DWTLAD,A6
	INH		.	=1
	CF	A15,GETDNA	GET DTE NETWORK ADDRESS
	ENB		.	=1
	SLL	A1,4	PUT IT IN RIGTH POSITION
	ORR	A3,A1	CALLING AND CALLED DTE-ADDRESS 
* 
	EJECT
* 
*	TEST IF LOCAL DTE-ADDRESS HAS TO BE MOVED 
* 
	LDR	A5,A3	REMOTE DTE-ADDRESS LENGTH... 
	ANK	A5,/01	GIVES SEMI-OCTET BOUNDARY ? 
	RF(Z)	OUT145	NO
* 
*	MOVE LOCAL DTE-ADDRESS
* 
	SRL	A1,4	A1:=LENGTH IN SEMI-OCTETS 
	LDR	A5,A7	A7:=WHERE TO GET IT
	SUK	A5,/01	A5:=WHERE TO PUT IT 
OUT130	EQU	*
	LCR	A2,A5	GET STORED SECOND SEMI-OCTET 
	SLL	A2,4 
	LCR	A2,A7
	SRL	A2,4	PUT TWO SEMI-OCTETS TOGETHER
	SCR	A2,A5	AND STORE THEM 
	ADK	A5,1	INCREMENT 'TO'-POINTER
	SUK	A1,1	DECRESE LENGTH
	RF(Z)	OUT140	READY 
	LCR	A2,A7	GET NEXT TWO SEMI-OCTETS 
	SLL	A2,4 
	SCR	A2,A5	STORE SECOND SEMI-OCTET
	ADK	A7,1	INCREMENT 'FROM'-POINTER
	SUK	A1,1	READY ? 
	RB(P)	OUT130	NO
	ADK	A5,1 
OUT140	EQU	*
	LDR	A2,A5	NEXT FREE ADDRESS
OUT145	EQU	*
	XIF
* 
	EJECT
* 
	IFF	SWITVC=0 
	IFT	LOOP=1 
* 
*	EXCHANGE CALLING AND CALLED LENGTH
* 
	ECR	A3,A3
	SRL	A3,8 
	XIF
	IFF	SWITVC=0 
	SUK	A4,1 
	SCR	A3,A4	STORE CALLING AND CALLED LENGTH
* 
*	USER FACILITIES & USER DATA 
* 
	LD	A3,ECBRL,A9 
	RF(Z)	OUT180	NO DATA SPECIFIED 
	LD	A5,DWTTAB,A6
* 
*	TEST IF FACILITIES ONLY 
* 
	LD	A1,ECBBA,A9 
	LCR	A7,A1
	ANK	A7,/FF	FACILITY LENGTH 
         RF(Z)    OUT150           NO FACILITIES AT ALL 
         ADK      A7,1
         SUR      A7,A3 
         RF(Z)    OUT148           FACILITIES ONLY
         LDK      A7,0             A7:=INDICATION NOT ONLY FACILITIES 
         RF       OUT150
* 
OUT148   EQU      * 
         LDK      A7,/C0           A7:=INDICATION FACILITIES ONLY 
OUT150	EQU	*
	INH		.	=1
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
	ENB		.	=1
* 
	EJECT
* 
*	TEST IF ONLY FACILITIES 
* 
         LDR      A7,A7 
         RF(Z)    OUT190           NO 
         RF       OUT188
* 
*	NO USER DATA SPECIFIED
* 
OUT180	EQU	*
	LDK	A1,0 
	SCR	A1,A2	FACILITY LENGTH = ZERO 
	ADK	A2,1	UPDATE POINTER
OUT188   EQU      * 
	LDK	A1,/C0 
	SCR	A1,A2	SET PROTOCOL IDENTIFIER
	ADK	A2,1	UPDATE POINTER
* 
*	CALCULATE LENGTH OF CALL PACKET 
* 
OUT190	EQU	*
	SU	A2,ECBBA,A8 
	ST	A2,ECBRL,A8	LENGTH TO ECB 
* 
*	COMPLETE LC-ADM 
* 
	LD	A2,ECBBA,A8	ADDRESS CALL PACKET 
	CF	A14,GTWNDS	GET WINDOW SIZE & PACKET LENGTH
	CF	A14,TRTHR	TRANSLATE THRESHOLD PERCENTAGE
OUT195	EQU	*
	ABL	OUT040	ISSUE OUTPUT REQUEST
	EJECT
* 
*	TRANSMISSION OF CLEAR PACKET
* 
OUT200	EQU	*
	IFT	MMUPAG=1 
	LD	A1,ECBBA,A9	USER BUFFER 
	ADK	A2,DGNCOD	DIAGNOSTIC CODE DISPLACEMENT 
	LDK	A3,1	LENGTH
	LD	A5,DWTTAB,A6
	INH		.	=1
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
	ENB		.	=1
	SUK	A2,DGNCOD+1	RESTORE SYSTEM BUFFER ADDRESS
	XIF
	IFF	SWITVC=0 
	IFT	MMUPAG=0 
	LC*	A1,ECBBA,A9	DIAGNOSTIC CODE
	SC	A1,DGNCOD,A2
	LDK	A3,0 
	XIF
	IFF	SWITVC=0 
	SC	A3,CAUSE,A2	RESET CAUSE FIELD 
	LDK	A1,CLE.P	CLEAR PACKET TYPE 
	LDK	A4,CLE.L	PACKET LENGTH 
	RF	OUT260
* 
*	TRANSMISSION OF CALL CONFIRMATION PACKET
* 
OUT210	EQU	*
	LDK	A1,CAL.CP	CALL CONFIRMATION PACKET TYPE
	LDK	A4,CAL.CL	PACKET LENGTH
	RF	OUT260
* 
	XIF
* 
	EJECT
* 
*	TRANSMISSION OF INTERRUPT PACKET
* 
OUT220	EQU	*
	IFT	MMUPAG=1 
	LD	A1,ECBBA,A9	USER BUFFER 
	ADK	A2,CAUSE	INTERRUPT DATA DISPLACEMENT 
	LDK	A3,1	LENGTH
	LD	A5,DWTTAB,A6
	INH		.	=1
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
	ENB		.	=1
	SUK	A2,CAUSE+1	RESTORE SYSTEM BUFFER ADDRESS 
	XIF
	IFT	MMUPAG=0 
	LC*	A1,ECBBA,A9	INTERRUPT DATA 
	SC	A1,CAUSE,A2 
	XIF
	LDK	A1,INT.P	INTERRUPT PACKET TYPE 
	LDK	A4,INT.L	PACKET LENGTH 
OUT260	EQU	*
	SC	A1,IDENT,A2 
OUT270   EQU      * 
	ST	A4,ECBRL,A8	PACKET LENGTH 
	ABL	OUT040	ISSUE OUTPUT REQUEST
	EJECT
* 
*	TRANSMISSION OF RR- OR RNR PACKET 
* 
OUT300	EQU	*
	LDK	A1,RR.P	RR-PACKET TYPE 
	RF	OUT320
* 
OUT310	EQU	*
	LDK	A1,RNR.P	RNR-PACKET TYPE 
OUT320	EQU	*
	LC	A3,PR,A13	GET PR
         SC       A3,RLWE,A13      SAVE IT AS LAST TRANMITTED 
	SLL	A3,5 
	ORR	A3,A1	COMBINE WITH PACKET TYPE 
	SC	A3,IDENT,A2	TO OUTPUT BUFFER
	LDK	A4,RR.L	PACKET LENGTH
	RB	OUT270	ISSUE OUTPUT REQUEST 
* 
*	TRANSMISSION OF A PACKET
* 
OUT400	EQU	*
	ST	A2,ECBBA,A8	BUFFER ADDRESS TO ECB 
	LDK	A1,RSET.P
	CC	A1,IDENT,A2	IS IT A RESET PACKET ?
	RF(NE)	OUT410	NO 
	LDK	A1,NPRFLG	BLOCK OUTPUT QUEUE 
	ORS	A1,QUEOUT,A13	.
OUT410	EQU	*
	LD	A4,HDLC,A2	BUFFER LENGTH
	RB	OUT270	ISSUE OUTPUT REQUEST 
	EJECT
* 
* 
*	THIS ROUTINE HANDLES A COMPLETED OUTPUT REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ACTIVATION ON LABEL ENDOUT 
* 
ENDOUT	EQU	*
	LDK	A3,1	SET PROCESS INDICATION
	ST	A3,DCLEVL	. 
	LDKL	A14,DCSTAK	SET STACK POINTER
	LDR	A8,A1	SAVE ECB-ADDRESS 
	CF	A14,GTLBA	GET LINE BLOCK ADDRESS
	LD	A2,ECBBA,A8	BUFFER ADDRESS
	CM	ECBBA,A8	FREE ECB 
	CM	HDLC,A2	FREE DWT-BUFFER 
	LD	A5,ECBRC,A8	GET RETURN CODE 
	RF(Z)	ENDO30	CORRECT COMPLETED 
	CWK	A5,18	TRANSMITTER RESET ?
	RF(E)	ENDO30	YES 
* 
	EJECT
* 
*	THE OUTPUT REQUEST IS NOT CORRECT COMPLETED. WHEN THIS IS THE FIRST 
*	TIME A DISCONNECT REQUEST FOR THE DC-CONNECTION WILL BE GIVEN AND 
*	ALL NOT READY SVC'S WILL BE CLEARED LOCAL AND ALL RELATIONS 
*	DWT <--> PVC WILL BE RELEASED.
* 
	LD	A3,CMNFLG,A12	IS SUBSYS STARTED ? 
	ANK	A3,STRTFL	.
	RF(Z)	ENDO20	ALREADY DOWN
	LDK	A1,STRTFL	RESET START FLAG 
	C1R	A1,A1	.
	ANS	A1,CMNFLG,A12	.
	ST	A5,HRDSTA,A12	SAVE RETURN CODE
         LDK      A6,0                 NO DWT AVAILABLE 
	CF	A14,STOP	ISSUE DISCONNECT LINE REQUEST
	LDK	A1,LOCCLE	DIAGN. CODE = LOST CONNECTION
	CF	A14,CLAVCS	CLEAR ALL VC'S LOCAL 
ENDO20	EQU	*
	LDKL	A1,-1 
	ADS	A1,NRPNDT,A12	DECREASE # OF PENDING TRANSM. REQUE. 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
*	CORRECT COMPLETED OUTPUT REQUEST
* 
ENDO30	EQU	*
	LC	A4,LCIDNT,A2	LOGICAL CHANNEL NUMBER 
	ANK	A4,/FF	. 
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	LD	A6,LCDWT,A13	GET DWT-ADDRESS
	RF(Z)	ENDO56	NO DWT
	LD	A1,DWTST,A6	DWT-STATUS
	RF(N)	ENDO56 
* 
	EJECT
* 
*	TEST IF DATA PACKET 
* 
	LC	A3,IDENT,A2 
         LDR      A1,A3 
	ANK	A3,DATA.P
	RF(Z)	ENDO58	YES 
* 
*	TEST IF RNR PACKET
* 
         LC       A4,DWTFNC,A6
         ANK      A1,/1F
	SUK	A1,RNR.P 
	IFF	SWITVC=0 
	RF(NZ)	ENDO46	NO 
	XIF
	IFT	SWITVC=0 
	RF(NZ)	ENDO56	NO 
	XIF
         SUK      A4,REFDAT        REFUSE DATA REQUEST? 
	RF(NZ)	ENDO56	NO 
	RF	ENDO58	YES
	IFF	SWITVC=0 
* 
*	TEST IF CALL CONFIRMATION PACKET
* 
ENDO46   EQU      * 
	SUK	A1,CAL.CP-RNR.P
	RF(NZ)	ENDO48	NO 
	SUK	A4,ACCCAL	ACCEPT CALL REQUEST ?
	RF(Z)	ENDO58	YES 
	RF	ENDO56	NO 
* 
	EJECT
* 
*	TEST IF CLEAR PACKET
* 
ENDO48   EQU      * 
	SUK	A1,CLE.P-CAL.CP
	RF(NZ)	ENDO56	NO 
	SUK	A4,DISCAL	DISCONNECT REQUEST ? 
	RF(NZ)	ENDO56	NO 
ENDO50	EQU	*
	CF	A14,RELDWT	RELEASE DWT FROM CHAIN 
	CM	LCDWT,A13	RELEASE RELATION WITH THE DWT 
ENDO52	EQU	*
	LDK	A3,ACPT.RC	RETURN CODE 
	XIF
ENDO54	EQU	*
	CF	A14,CMPREQ	COMPLETE REQUEST 
ENDO56	EQU	*
	RB	ENDO20
ENDO58	EQU	*
	LD	A3,DWTRCI,A6
	LDR	A1,A3
	ANK	A1,MORE.RC	MORE INFO ? 
	RB(Z)	ENDO54	NO
	LDK	A1,TOLD.RC	INDICATE..
	XRS	A1,DWTRCI,A6	..TOLD TO USER
	RB	ENDO54	COMPLETE REQUEST 
	EJECT
* 
*	THIS MODULE IS ACTIVATED WHEN A CONFIRMATION TIMER OF 
*	THE DC-TASK EXPIRES.
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A1 = PARAMETER BLOCK ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ACTIVATION ON LABEL TIMOUT 
* 
TIMOUT	EQU	*
	LDK	A3,5	SET PROCESS INDICATOR 
	ST	A3,DCLEVL	. 
	LDKL	A14,DCSTAK	SET STACK POINTER
	LDR	A4,A1	ADDRESS PARAMETER BLOCK
	INH		.	=1
	CF	A15,FREBLK	GET PARAMETERS 
	ENB
	LDR	A12,A3	LINE BLOCK ADDRESS
	LDR	A13,A1	LC-ADM ADDRESS
	ANK	A2,1 
	ABL(NZ)	TIMEXP	TIME-OUT OF REQUEST HANDLER 
	LDR	A13,A13
	RF(NZ)	TIM10	NO RESTART CONF. TIMER
* 
*	A RESTART CONFIRMATION TIMER IS EXPIRED, SO CLEAR ALL NOT 
*	READY VC'S LOCAL. 
* 
	CM	RTMADR,A12	CLEAR TIMER ADDRESS
	LDK	A1,RSTFLG	IS A RESTART PROCEDURE ACTIVE ?
	AN	A1,CMNFLG,A12	. 
	RF(Z)	TIM40	NO 
	LDK	A1,LOCCLE	DIAGN. CODE
	CF	A14,CLAVCS	CLEAR ALL VC'S LOCAL 
	RF	TIM40 
	EJECT
* 
*	THE TIMER OF A RESET OR CLEAR PACKET IS EXPIRED 
* 
TIM10	EQU	* 
	CM	TIMADR,A13	CLEAR TIMER ADDRESS
	LDK	A1,CONTIM	IS CONFIRMATION TIMER STARTED ?
	AN	A1,FLAGS,A13	.
	RF(Z)	TIM40	NO 
	XRS	A1,FLAGS,A13	RESET TIMER FLAG
	IFF	SWITVC=0 
	LDK	A1,RSET.ST	IS LC-STATUS = RESET ?
	CC	A1,LCSBST,A13	. 
	RF(NE)	TIM30	NO, SO IT MUST BE A CLEAR 
	XIF
* 
*	A RESET TIMER IS EXPIRED, SO CLEAR CONCERNING VC
* 
	SUR	A1,A1	RESET SUB-STATUS 
	SC	A1,LCSBST,A13	. 
	LDK	A1,NPRFLG	RESET NO PROCESSING FLAG 
	C1R	A1,A1	.
	ANS	A1,QUEOUT,A13	.
	IFF	SWITVC=0 
	IFF	PERMVC=0 
	LDK	A1,PVC	IS IT A PVC ? 
	CC	A1,VCTYP,A13	.
	RF(E)	TIM20	YES
	XIF
	IFF	SWITVC=0 
	LDK	A1,LOCPER	DIAGN. CODE
	ABL	CLVC	CLEAR VC AND RETURN TO SCHEDULER
	XIF
* 
	EJECT
* 
*	COMPLETE EVENTS IN OUTPUT QUEUE 
* 
TIM20	EQU	* 
	LDKL	A3,RSET.RC	RC = RESET 
	CF	A14,CMEVNT
	IFF	SWITVC=0 
	RF	TIM40 
* 
*	A CLEAR TIMER IS EXPIRED
* 
TIM30	EQU	* 
	CM	LCSTAT,A13	NEW LC-STATUS := READY 
	XIF
TIM40	EQU	* 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	EJECT
* 
* 
*	PROCESSING OF A COMPLETED INPUT REQUEST 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ACTIVATION ON LABEL
* 
ENDIN	EQU	* 
	LDK	A3,3	SET PROCESS INDICATOR 
	ST	A3,DCLEVL	. 
	LDKL	A14,DCSTAK	SET RETURN STACK POINTER 
	LDR	A8,A1	SAVE ECB-ADDRESS 
	CF	A14,GTLBA	GET LINE BLOCK ADDRESS
	LD	A5,ECBRC,A8	GET RETURN CODE 
	RF(Z)	END20	CORRECT COMPLETED
	CWK	A5,17	RECEIVER RESET ? 
	RF(E)	END20	YES
	EJECT
* 
*	THE INPUT REQUEST IS NOT CORRECT COMPLETED. WHEN THIS IS THE FIRST
*	TIME A DISCONNECT REQUEST FOR THE DC-CONNECTION WILL BE GIVEN AND 
*	ALL NOT READY SVC'S WILL BE CLEARED LOCAL AND ALL RELATIONS 
*	DWT <--> PVC WILL BE RELEASED.
* 
	LD	A2,ECBBA,A8	BUFFER ADDRESS
	CM	ECBBA,A8	FREE ECB 
	CF	A14,RLBUF	INPUT BUFFER BACK TO POOL 
	LD	A3,CMNFLG,A12	IS SUBSYS STARTED ? 
	ANK	A3,STRTFL	.
	RF(Z)	END10	ALREADY DOWN 
	LDK	A1,STRTFL	RESET START FLAG 
	C1R	A1,A1	.
	ANS	A1,CMNFLG,A12	.
	ST	A5,HRDSTA,A12	SAVE RETURN CODE IN HARDWARE STA
         LDK      A6,0                 NO DWT AVAILABLE 
	CF	A14,STOP	ISSUE DISCONNECT LINE REQUEST
	LDK	A1,LOCCLE	DIAGN. CODE = LOST CONNECTION
	CF	A14,CLAVCS	CLEAR ALL VC'S LOCAL 
END10	EQU	* 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
*	THE INPUT REQUEST IS CORRECT COMPLETED
* 
END20	EQU	* 
	LD	A5,ECBBA,A8	BUFFER ADDRESS
	LD	A3,ECBEL,A8	EFFECTIVE BUFFER LENGTH 
	LDK	A4,0 
	LC	A4,LCIDNT,A5	LOGICAL CHANNEL NUMBER 
	IFT	LOOP=1 
* 
	EJECT
* 
*	ONLY FOR LOOP TEST
* 
	LC	A6,NRLC,A12 
	ANK	A6,/FF 
         SUK      A6,1
	IFF	PERMVC=0 
	LC	A2,NRPVC,A12
	ANK	A2,/FF 
	CWR	A2,A4
	RF(NG)	LOOP1	SVC 
	LDR	A6,A2
	SUK	A6,1 
	RF	LOOP2 
LOOP1	EQU	* 
	ADR	A6,A2	PVC
LOOP2	EQU	* 
	XIF
	IFT	LOOP=1 
	SUR	A6,A4
	LDR	A4,A6
	SC	A4,LCIDNT,A5
*	END OF ONLY LOOP-TEST!!!! 
	XIF
	CC	A4,NRLC,A12	LC-NUMBER WITHIN LIMITS?
	RF(L)	END30	YES
	EJECT
* 
*	IGNORE RECEIVED BUFFER AND ISSUE A NEW INPUT REQUEST
* 
	LDR	A1,A8	ECB-ADDRESS
	LDK	A7,RECEIV	FUNCTION CODE FOR RECEIVE
	LKM
	DATA	-1
	DATA	ENDIN	ACTIVATION ADDRESS
	RB	END10	CONTROL BACK TO SCHEDULER 
* 
*	LC-NUMBER IS CORRECT
* 
END30	EQU	* 
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	CF	A14,GTBUF	GET AN INPUT BUFFER 
	ST	A2,ECBBA,A8	TO ECB
	LDR	A1,A8	ECB-ADDRESS AS PARAMETER 
	LDK	A7,RECEIV	FUNCTION CODE FOR RECEIVE
	LKM		ISSUE A NEW RECEIVE REQUEST 
	DATA	-1
	DATA	ENDIN	ACTIVATION ADDRESS
* 
*	TEST IF A RESTART PROCEDURE IS ACTIVE 
* 
	LDR	A2,A5	BUFFER ADDRESS 
	LD	A4,CMNFLG,A12	IS RESTART FLAG SET ? 
	ANK	A4,RSTFLG	.
         LC       A4,IDENT,A2      GET PACKET TYPE
	RF(Z)	END40	NO RESTART PROCEDURE ACTIVE
	ANK	A4,/FF	. 
	CWK	A4,RSTR.P	IS IT A RESTART PACKET 
	RF(E)	END40	YES
	CWK	A4,RSTR.CP	IS IT A RESTART CONF. PACKET
	RF(E)	END40	YES
	CF	A14,RLBUF	RELEASE INPUT BUFFER
	RB	END10	CONTROL BACK TO SCHEDULER 
	EJECT
* 
*	SEARCH PACKET DEPENDENT ROUTINE 
* 
END40	EQU	* 
	LDK	A5,DATA.P
	TM	A4,A5	IS IT A DATA PACKET ? 
	ABL(Z)	DATIN	YES 
	ANK	A4,/1F 
	LDK	A5,RR.P
	CWR	A4,A5	IS IT A RR-PACKET ?
	ABL(E)	RRIN	YES
	LDK	A5,RNR.P 
	CWR	A4,A5	IS IT AN RNR-PACKET ?
	ABL(E)	RNRIN	YES 
	LDK	A5,TABLNG
END50	EQU	* 
         LC       A4,IDENT,A2 
	CC	A4,TABLE,A5	SEARCH IDENT IN TABLE 
	RF(E)	END70	FOUND
	SUK	A5,1 
	RB(NN)	END50	TRY NEXT ONE
* 
*	INVALID PACKET TYPE 
* 
END60	EQU	* 
	CF	A14,RLBUF	RELEASE INPUT BUFFER
	LDK	A1,LOCPER	DIAGNOSTIC CODE = PROCEDURE ERRO 
	ABL	CLVC	CLEAR VC AND RETURN TO SCHED. 
* 
	EJECT
* 
*	PACKET TYPE FOUND, BRANCH TO CONCERNING ROUTINE 
* 
END70	EQU	* 
	SLL	A5,1	PREPARE FOR INDEXING
	ABI	BRATAB,A5	BRANCH TO MODULE 
* 
*	PACKET TYPE TABLE 
* 
TABLE	EQU	* 
	BYTE	RSTR.P,RSTR.CP	RESTART(-CONF.) PACKET 
	BYTE	RSET.P,RSET.CP	RESET(-CONF.) PACKET 
	IFF	SWITVC=0 
	BYTE	CLE.P,CLE.CP	CLEAR(-CONF.) PACKET 
	BYTE	CAL.P,CAL.CP	CALL(-CONF.) PACKET
	XIF
	BYTE	INT.P,INT.CP	INTERRUPT(-CONF.) PACKET 
TABLNG	EQU	*-1-TABLE	TABLE LENGTH 
* 
*	BRANCH TABLE
* 
BRATAB	EQU	*
	DATA	RSTIN	RESTART 
	DATA	RSTCIN	RESTART CONFIRMATION 
	DATA	RESIN	RESET 
	DATA	RESCIN	RESET CONFIRMATION 
	IFF	SWITVC=0 
	DATA	CLRIN	CLEAR 
	DATA	CLRCIN	CLEAR CONFIRMATION 
	DATA	CALLIN	CALL 
	DATA	CALCIN	CALL CONFIRMATION
	XIF
	DATA	INTIN	INTERRUPT 
	DATA	INTCIN	INTERRUPT CONFIRMATION 
	EJECT
* 
*	PROCESSING OF RECEIVED DATA PACKET
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    DATIN 
* 
DATIN	EQU	* 
	CF	A14,TDARR	TEST PART OF PACKET CONTENTS
	LDR	A1,A1	O.K. ? 
	RF(NZ)	DAT00	NO
	LC	A1,IDENT,A2	GET RECEIVED PS 
	SRL	A1,1	. 
	ANK	A1,/07	. 
	CC	A1,RPS,A13	DOES IT MATCH WITH THE LC-ADM
	RF(NE)	DAT00	NO
* 
*	TEST IF RECEIVED P(S) IS IN WINDOW
* 
	LDK	A7,0	PRESET WINDOW NOT FULL INDIC. 
	LC	A5,RLWE,A13	GET NUMBER OF PACKETS IN WIND.
	SUR	A1,A5	.
	ANK	A1,/07	. 
	ADK	A1,1	. 
	CC	A1,LCREWN,A13	COMPARE WITH WINDOW SIZE
	RF(L)	DAT20	WINDOW IS NOT FULL 
	RF(G)	DAT00	OUT OF WINDOW, RESET LC
	LDK	A7,1	SET WINDOW FULL INDIC.
	RF	DAT20	. 
	EJECT
* 
*	PACKET RECEIVED OUT OF SEQUENCE, START RESET PROCEDURE
* 
DAT00	EQU	* 
	LDK	A1,RSET.ST	LC-SUBSTATUS := RESET 
	SC	A1,LCSBST,A13	. 
* 
*	PREPARE AND QUEUE RESET PACKET FOR RH 
* 
	LC	A1,LCNUM,A13	LOGICAL CHANNEL NUMBER 
	SC	A1,LCIDNT,A2	.
	LDK	A1,RSET.P	PACKET TYPE FOR RESET INDICATION 
	SC	A1,IDENT,A2 
	LDK	A1,RSET.L	LENGTH INTERN. RESET CONF NOT. 
	ST	A1,HDLC,A2	TO HDLC HEADER 
	LDK	A1,0 
	SC	A1,CAUSE,A2	CLEAR RESET CAUSE 
	LDK	A1,RESLCH
	SC	A1,DGNCOD,A2	SET DIAGNOSTIC CODE
         CF       A14,RSETVC
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
* 
*	PREPARE RESET PACKET AND QUEUE IT FOR OUTPUT
* 
DAT05	EQU	* 
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	DAT10	YES
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,DAT05	REACTIVATION ADDRESS 
	ABL	BUFWAT 
* 
	EJECT
* 
DAT10	EQU	* 
	LDK	A1,RSET.P
	SC	A1,IDENT,A2	PACKET TYPE 
	LDK	A1,0 
	SC	A1,CAUSE,A2	CLEAR RESET CAUSE 
	LDK	A1,RESLCH
	SC	A1,DGNCOD,A2	DIAGNOSTIC CODE
	LDK	A1,RSET.L	RESET PACKET LENGTH TO HDLC HEADER 
	ST	A1,HDLC,A2	.
	CF	A14,QUEO	PUT ELEMENT IN OUTPUT QUEUE
	LDKL	A8,SYRETM	RESET CONFIRMATION TIMER
	CF	A14,STTIM	START TIMER 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
*	TEST CURRENT M-BIT
* 
DAT20	EQU	* 
	LC	A1,MBIT,A2	GET CURRENT M-BIT
	ANK	A1,MPOS	.
	RF(Z)	DAT30	M-BIT NOT SET
* 
*	M-BIT IS SET, SO DATA LENGTH HAS TO BE MAXIMUM
* 
	LD	A1,TRBFSZ,A13	MAX.DATA LENGTH IN DATA PACKET
	ADK	A1,BEGDAT	ADD HEADERS
	CWR	A1,A3
	RF(E)	DAT30	OK, THEY ARE EQUAL 
* 
*	DATA LENGTH NOT MAXIMUM, SO CLEAR VC
* 
	RB	END60	CLEAR VC AND RETURN TO SCHEDULER
* 
	EJECT
* 
*	UPDATE PS TO BE RECEIVED NEXT 
* 
DAT30	EQU	* 
	LC	A1,RPS,A13	GET RPS
	ADK	A1,1	INCREMENT 
	ANK	A1,/07	MODULO 8
	SC	A1,RPS,A13	.
* 
*	GET RECEIVED PR 
* 
	LC	A1,IDENT,A2	GET PR FROM RECEIVED PACKET 
	SRL	A1,5	. 
	ANK	A1,/07	. 
* 
*	IF IT IS A SEND WINDOW UPDATING, RESET "NO PROCESSING" FLAG OF
*	OUTPUT QUEUE
* 
	CC	A1,SLWE,A13	COMPARE WITH SEND LOWER WINDOW E
	RF(E)	DAT50	NO UPDATING
	SC	A1,SLWE,A13	SAVE NEW VALUE
	LDK	A1,NPRFLG	RESET "NO PROCESSING" FLAG 
         C1R      A1,A1 
	ANS	A1,QUEOUT,A13	.
* 
*	QUEUE PACKET FOR REQUEST HANDLER
* 
DAT50	EQU	* 
	ST	A3,HDLC,A2	SAVE PACKET LENGTH IN HDLC-HEADE 
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
* 
	EJECT
* 
*	CAN RECEIVE WINDOW BE UPDATED 
* 
DAT60	EQU	* 
	LDK	A3,0	PRESET INDIC.: NO PR UPDATING 
	LC	A1,NRNUBF,A13	ARE ALL RESERVED BUFFERS USED ? 
	ANK	A1,/FF	. 
	RF(Z)	DAT70	YES
	LDK	A3,1	SET INDIC.: PR UPDATED
* 
*	UPDATE PR 
* 
	LC	A4,PR,A13	UPDATE PR TO BE SENT NEXT 
	ADR	A4,A1	ADD NUMBER OF NOT USED BUFFERS 
	ANK	A4,/07	MODULO 8
	SC	A4,PR,A13	. 
	SUR	A1,A1	ALL RES. BUFFERS ARE NOW USED
	SC	A1,NRNUBF,A13	. 
* 
*	DID THE RECEIVED PS PASSES THE THRESHOLD OF THE RECEIVE WINDOW
* 
DAT70	EQU	* 
	LDK	A2,0 
	LC	A1,RPS,A13	RECEIVED PS
	LC	A2,RLWE,A13	RECEIVER LOWER WINDOW EDGE
	SUR	A1,A2	RPS - RLWE 
	ANK	A1,/07	MODULO 8
	CC	A1,LCTHRE,A13	DID IT PASSED THE THRESHOLD ? 
	RF(NG)	DAT130	NO 
* 
	EJECT
* 
*	IF RECEIVE WINDOW IS NOT UPDATED, WAIT FOR IT 
* 
	LDR	A3,A3
	RF(NZ)	DAT90	IT IS UPDATED 
	LDR	A7,A7	IS WINDOW FULL ? 
	RF(Z)	DAT130	NO, DON'T WAIT FOR IT 
	LDR	A1,A13	PARAMETER FOR DELAY AND ACTIVATION
	LD	A7,TSKID
	LDKL	A8,BUFDEL	DELAY TIME
	LKM
	DATA	-6
	DATA	DAT80	ACTIVATION ADDRESS
	RF	DAT130	CONTROL BACK TO SCHEDULER
* 
DAT80	EQU	* 
	LDR	A13,A1	RESTORE LC-ADM ADDRESS
         LDK      A7,1             SET WINDOW FULL INDICATION 
	LDKL	A14,DCSTAK	RESET STACK POINTER
	RB	DAT60 
* 
*	THE RECEIVE WINDOW IS UPDATED, CAN NEW PR BE SENT IN A DATA PACKET ?
* 
DAT90	EQU	* 
	LD	A1,QUEOUT,A13	IS OUTPUT QUEUE EMPTY ? 
	RF(Z)	DAT100	YES 
* 
*	TEST IF ONLY NO-PROCESSING FLAG SET 
* 
         SUK      A1,1
         RF(Z)    DAT100           YES
* 
	EJECT
* 
*	REMOTE BUSY FLAG SET ?
* 
	LDK	A3,REMBUS
	AN	A3,FLAGS,A13
	RF(NZ)	DAT100
* 
*	IS SEND WINDOW FULL ? 
* 
	LC	A1,PS,A13 
	LC	A2,SLWE,A13 
	SUR	A1,A2
	ANK	A1,/7
	CC	A1,LCTRWN,A13 
	RF(L)	DAT130	NO
* 
*	SEND NEW PR IN RR-PACKET
* 
DAT100	EQU	*
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	DAT120	YES 
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,DAT100	REACTIVATION ADDRESS
	ABL	BUFWAT 
* 
	EJECT
* 
DAT120	EQU	*
         LC       A1,PR,A13        PR 
         SC       A1,RLWE,A13      SAVE IT AS LAST SENT PR
         SLL      A1,5             PR IN PACKET 
	ORK	A1,RR.P	.
	SC	A1,IDENT,A2	. 
	LDK	A1,RR.L	PACKET LENGTH TO HDLC-HEADER 
	ST	A1,HDLC,A2	.
* 
*	RESET NO PROCESSING FLAG AND QUEUE PACKET 
* 
	LDK	A1,NPRFLG	RESET "NO PROCESSING" FLAG 
         C1R      A1,A1 
	ANS	A1,QUEOUT,A13	.
	LDR	A1,A13	QUEUE ELEMENT AS FIRST
	ADK	A1,QUEOUT	.
	CF	A14,QUEUEF	.
DAT130	EQU	*
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	EJECT
* 
* 
*	PROCESSING OF RECEIVED RR-PACKET
* 
********************************************
* 
*	INPUT PARAMETER:
*		A2  = BUFFER ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL  RRIN
* 
RRIN	EQU	*
	CF	A14,TDARR	TEST RR-PACKET
	LDR	A1,A1	PR OUT OF SEQUENCE ? 
	ABL(NZ)	DAT00	YES RESET LC (MODULE DATIN)
* 
*	TEST IF REMOTE BUSY FLAG SET
* 
        LD       A1,FLAGS,A13 
         ANK      A1,REMBUS 
         RF(Z)    RNRI00           NO!
         C1R      A1,A1 
         ANS      A1,FLAGS,A13     RESET REMOTE BUSY FLAG 
         LDK      A1,NPRFLG 
         C1R      A1,A1 
         ANS      A1,QUEOUT,A13    RESET NO PROCESSING FLAG 
        RF       RNRI00 
	EJECT
* 
*	PROCESSING OF RECEIVED RNR-PACKET 
* 
********************************************
* 
*	INPUT PARAMETER:
*		A2  = BUFFER ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL RNRIN
* 
RNRIN	EQU	* 
	CF	A14,TDARR	TEST RR-PACKET
	LDR	A1,A1	PR OUT OF SEQUENCE ? 
	ABL(NZ)	DAT00	YES RESET LC (MODULE DATIN)
	LDK	A1,REMBUS	SET REMOTE BUSY FLAG 
	ORS	A1,FLAGS,A13	. 
* 
*	GET RECEIVED PR 
* 
RNRI00	EQU	*
	LC	A1,IDENT,A2	GET PR FROM RECEIVED PACKET 
	SRL	A1,5	. 
	ANK	A1,/07	. 
* 
	EJECT
* 
*	IF IT IS A SEND WINDOW UPDATING, RESET "NO PROCESSING" FLAG OF
*	OUTPUT QUEUE
* 
	CC	A1,SLWE,A13	COMPARE WITH SEND LOWER WINDOW E
	RF(E)	RNRI10	NO UPDATING 
	SC	A1,SLWE,A13	SAVE NEW VALUE
	LDK	A1,NPRFLG	RESET "NO PROCESSING" FLAG 
         C1R      A1,A1 
	ANS	A1,QUEOUT,A13	.
RNRI10	EQU	*
	CF	A14,RLBUF	BUFFER BACK TO POOL 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	IFF	SWITVC=0 
	EJECT
* 
* 
*	PROCESSING OF RECEIVED CALL-PACKET
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CALLIN
* 
CALLIN	EQU	*
	LDK	A1,READ.ST	IS LC-STATUS: READY ? 
	CC	A1,LCSTAT,A13	. 
	RF(E)	CALLI1	YES 
	CF	A14,RLBUF	RELEASE INPUT BUFFER
	LDK	A1,LCAL.ST	IS LC-STATUS: LOCAL-CALL ?
	CC	A1,LCSTAT,A13	. 
	RF(NE)	CALC00	NO, SO CLEAR VC
* 
*	A CALL COLLISION IS OCCURED, IGNORE RECEIVED CALL 
* 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
*	THE LC-STATUS IS VALID IN COMBINATION WITH THE CALL PACKET
* 
CALLI1	EQU	*
	ST	A3,HDLC,A2	SAVE BUFFER LENGTH IN BUFFER 
	LDK	A1,RCAL.ST	LC-STAT := REMOTE CALL
	SC	A1,LCSTAT,A13	. 
	LDK	A1,0	ALL RESERVED BUFFERS ARE USED 
	SC	A1,NRNUBF,A13	. 
	EJECT
* 
*	GET WINDOW SIZES AND PACKET LENGTH
* 
	CF	A14,GTWNDS
* 
*	CHANGE TRANSMIT AND RECEIVE WINDOW SIZES
* 
	LC	A1,LCTRWN,A13 
	ECR	A1,A1
	LC	A1,LCREWN,A13 
	SC	A1,LCTRWN,A13 
	ECR	A1,A1
	SC	A1,LCREWN,A13 
* 
*	CHANGE TRANSMIT AND RECEIVE PACKET LENGTH 
* 
	LD	A1,TRBFSZ,A13 
	LD	A3,REBFSZ,A13 
	ST	A3,TRBFSZ,A13 
	ST	A1,REBFSZ,A13 
* 
*	TRANSLATE THRESHOLD PERCENTAGE INTO A NUMBER OF PACKETS 
* 
	CF	A14,TRTHR 
* 
*	QUEUE PACKET FOR THE REQUEST HANDLER
* 
	RF	CALC20
	EJECT
* 
* 
*	PROCESSING OF RECEIVED CALL CONFIRMATION PACKET 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CALCIN
* 
CALCIN	EQU	*
	LDK	A1,LCAL.ST	IS LC-STATUS: LOCAL-CALL STATE
	CC	A1,LCSTAT,A13	. 
	RF(E)	CALC10	YES 
* 
*	ILLEGAL STATE, SO CLEAR VC
* 
	CF	A14,RLBUF	BUFFER BACK TO POOL 
CALC00	EQU	*
	LDK	A1,LOCPER	DIAGNOSTIC CODE = PROCEDURE ERRO 
	ABL	CLVC	CLEAR VC AND RETURN TO SCHED. 
* 
	EJECT
* 
*	STATUS WILL BE DATA TRANSFER, UPDATE LC-ADM 
* 
CALC10	EQU	*
	LDK	A1,DATA.ST	LC-STATUS := DATA TRANSFER
	ECR	A1,A1	.
	ST	A1,LCSTAT,A13	SUBSTATUS := FLOW CONTROL READY 
	CF	A14,CLLCAD	CLEAR LC-ADM FIELDS
* 
*	UPDATE CALL CONFIRMATION PACKET 
* 
	ST	A3,HDLC,A2	PACKET LENGTH TO HDLC-HEADER 
* 
*	QUEUE PACKET AND RETURN 
* 
CALC20	EQU	*
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	EJECT
* 
* 
*	PROCESSING OF RECEIVED CLEAR PACKET 
* 
********************************************
* 
*	INPUT PARAMETER:
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CLRIN 
* 
CLRIN	EQU	* 
	IFF	PERMVC=0 
	LC	A1,VCTYP,A13	GET TYPE OF LOGICAL CHANNEL
	ANK	A1,/FF	. 
	CWK	A1,SVC	IS IT A SWITCH VIRTUAL CIRCUIT ?
	RF(E)	CLR00	YES
	LDK	A1,LOCPER	DIAGN. CODE : PROCEDURE ERROR
	ABL	CLVC	RESET PVC 
* 
CLR00	EQU	* 
	XIF
	IFF	SWITVC=0 
	LDK	A1,CLEA.ST	IS LC-STATUS = CLEAR ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	CLRCIN	YES, CO CLEAR COLLISION 
* 
	EJECT
* 
*	HAS THE REQUEST HANDLER TO BE NOTIFIED ?
* 
	LD	A6,LCDWT,A13	DOES THE RH KNOWS THIS VC ?
	RF(Z)	CLR10	NO 
         LDK      A1,VCREL
         SC       A1,DWTSTE,A6
	LDK	A1,NPRFLG	UNBLOCK INPUT QUEUE
	C1R	A1,A1	.
	ANS	A1,QUEINP,A13	.
	ST	A3,HDLC,A2	PACKET LENGTH TO HDLC-HEADER 
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
	RF	CLR15 
* 
CLR10	EQU	* 
	CF	A14,RLBUF	BUFFER BACK TO POOL 
* 
	EJECT
* 
*	LC-STATUS WAS "NOT CLEAR", SO SEND CLEAR CONFIRMATION TO REMOTE STATIO
* 
CLR15	EQU	* 
* 
*	EMPTY OUTPUT QUEUE
* 
	LDKL	A3,CLEA.RC	RETURN CODE FOR USER 
	CF	A14,CMEVNT
CLR20	EQU	* 
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	CLR30	YES
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,CLR20	REACTIVATION ADDRESS 
	ABL	BUFWAT 
* 
CLR30	EQU	* 
	LDK	A1,CLE.CP	PACKET IDENTIFICATION
	SC	A1,IDENT,A2	. 
	LDK	A1,CLE.CL	PACKET LENGTH TO HDLC-HEADER 
	ST	A1,HDLC,A2	.
         CM       LCSTAT,A13       NEW STATUS:=READY
* 
*	QUEUE PACKET
* 
CLR40	EQU	* 
	CF	A14,QUEO	PUT ELEMENT IN OUTPUT QUEUE
CLR50	EQU	* 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	EJECT
* 
* 
*	PROCESSING OF RECEIVED CLEAR CONFIRMATION PACKET
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
CLRCIN	EQU	*
	CF	A14,RLBUF	BUFFER BACK TO POOL 
* 
*	RESET CONFIRMATION TIMER AND FLAG 
* 
	LD	A1,TIMADR,A13	GET ADDRESS TIMER BLOCK 
	CF	A14,CANTIM	CANCEL TIMER 
	CM	TIMADR,A13	CLEAR TIMER ADDRESS
	LDK	A1,CONTIM	RESET TIMER STARTED FLAG 
	C1R	A1,A1	.
	ANS	A1,FLAGS,A13	. 
	LDK	A1,CLEA.ST	IS LC-STATUS = CLEAR ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	CLRC00	YES 
	LDK	A1,READ.ST	IS LC-STATUS = READY ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	CLRC10	YES 
* 
	EJECT
* 
*	STATUS IS NOT READY OR CLEAR, SO PROCEDURE ERROR
* 
	RB	CALC00	CLEAR VC 
* 
CLRC00	EQU	*
	CM	LCSTAT,A13	SET STATUS := READY
CLRC10	EQU	*
	RB	CLR50	CONTROL BACK TO SCHEDULER 
* 
	XIF
* 
	EJECT
* 
* 
*	PROCESSING OF RECEIVED RESET PACKET 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    RESIN 
* 
RESIN	EQU	* 
	LDK	A1,CLEA.ST	IF LC-STATUS = CLEAR ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	RESC00	YES, IGNORE PACKET
* 
*	TEST IF A RESET COLLISION HAS OCCURED 
* 
	LDK	A1,RSET.ST	IS LC-STATUS = RESET ?
	CC	A1,LCSBST,A13	. 
	RF(E)	RESCIN	YES 
* 
*	TEST IF CURRENT STATUS MATCH WITH RECEIVED PACKET 
* 
	LDK	A1,DATA.ST	IS LC-STATUS = DATA TRANSFER ?
	CC	A1,LCSTAT,A13	. 
	RF(NE)	RESC10	NO, SO PROCEDURE ERROR 
* 
	EJECT
* 
*	LC-STATUS IS DATA TRANSFER, SO RESET LC-ADM 
* 
	ST	A3,HDLC,A2	PACKET LENGTH TO HDLC-HEADER 
	CF	A14,RSETVC	RESET VIRTUAL CIRCUIT
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
* 
*	PREPARE AND TRANSMIT RESET CONFIRMATION PACKET
* 
RES40	EQU	* 
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	RES60	YES
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,RES40	REACTIVATION ADDRESS 
	ABL	BUFWAT 
* 
RES60	EQU	* 
	LDK	A1,RSET.CP	RESET CONF. PACKET TYPE 
	SC	A1,IDENT,A2	. 
	LDK	A1,RSET.CL	PACKET LENGTH TO HDLC-HEADER
	ST	A1,HDLC,A2	.
* 
*	QUEUE ELEMENT 
* 
	CF	A14,QUEO
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	EJECT
* 
* 
*	PROCESSING OF A RECEIVED RESET CONFIRMATION PACKET
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    RESCIN
* 
RESCIN	EQU	*
	LD	A1,TIMADR,A13	TIMER BLOCK ADDRESS 
	CF	A14,CANTIM	CANCEL TIMER 
	CM	TIMADR,A13
	LDK	A3,CONTIM
	C1R	A3,A3
	ANS	A3,FLAGS,A13	. 
	LDK	A1,RSET.ST	IS LC-STATUS = DATA-TRANSF/RESET
	CC	A1,LCSBST,A13	. 
	RF(NE)	RESC10	NO 
	LDK	A1,FLCN.ST	SUB-STATUS := FLOW CNTRL READY
	SC	A1,LCSBST,A13	. 
	LDK	A1,NPRFLG	RESET NO PROCESSING FLAG 
	C1R	A1,A1	.
	ANS	A1,QUEOUT,A13	.
RESC00	EQU	*
	CF	A14,RLBUF	BUFFER BACK TO POOL 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
	EJECT
* 
*	ILLEGAL STATE, SO CLEAR VC
* 
RESC10	EQU	*
	CF	A14,RLBUF	BUFFER BACK TO POOL 
	LDK	A1,LOCPER	DIAGN. CODE = PROCEDURE ERROR
	ABL	CLVC	CLEAR VC AND RETURN TO SCHED. 
	EJECT
* 
* 
*	PROCESSING OF A RECEIVED RESTART PACKET 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A12=LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    RSTIN 
* 
RSTIN	EQU	* 
	LDK	A1,RSTFLG	ALREADY RESTART BUSY ? 
	AN	A1,CMNFLG,A12	. 
	RF(NZ)	RSTCIN	YES, RESTART COLLISION 
	CF	A14,RLBUF	BUFFER BACK TO POOL 
* 
*	CLEAR ALL NOT READY VC'S LOCAL
* 
	LDK	A1,RSTRED	DIAGN. CODE = RESTART RECEIVED 
	CF	A14,CLAVCS	CLEAR ALL VC'S LOCAL 
* 
*	PREPARE AND TRANSMIT RESTART CONFIRMATION PACKET
* 
RST00	EQU	* 
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	RST20	YES
* 
	EJECT
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,RST00	REACTIVATION ADDRESS 
	ABL	BUFWAT 
* 
RST20	EQU	* 
	LDK	A1,RSTR.CP	RESTART CONF. PACKET TYPE 
	SC	A1,IDENT,A2	. 
	LDK	A1,RSTR.CL	PACKET LENGTH 
	ST	A1,HDLC,A2	.
* 
*	STORE ELEMENT IN RESTART QUEUE
* 
	LDR	A1,A12	QUEUE ANCHOR ADDRESS
	ADK	A1,RSTQUE	.
	CF	A14,QUEUE	QUEUE ELEMENT 
	RF	RSTC20	CONTROL BACK TO SCHEDULER
	EJECT
* 
* 
*	PROCESSING OF A RECEIVED RESTART CONFIRMATION PACKET
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A12 = LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    RSTCIN
* 
RSTCIN	EQU	*
* 
*	RESET TIMER 
* 
	CF	A14,RLBUF	BUFFER BACK TO POOL 
	LD	A1,RTMADR,A12	TIMER ACTIVE ?
	CF	A14,CANTIM	CANCEL TIMER 
	CM	RTMADR,A12
	LDK	A1,RSTFLG	RESTART PROCEDURE BUSY ? 
	AN	A1,CMNFLG,A12	. 
	RF(Z)	RSTC20	NO, IGNORE PACKET 
	XRS	A1,CMNFLG,A12	RESET RESTART PROC. BUSY FLAG
RSTC20	EQU	*
	ABL	EXITDC 
	EJECT
* 
* 
*	PROCESSING OF RECEIVED INTERRUPT PACKET 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    INTIN 
* 
INTIN	EQU	* 
	LDK	A4,0	INDICATE ENTRY FOR INTERRUPT PACKET 
* 
*	THE NEXT PART OF CODING IS COMMON FOR THE PROCESSING OF 
*	AN INTERRUPT- AND AN INTERRUPT CONFIRMATION PACKET. 
* 
INT00	EQU	* 
	LDK	A1,DATA.ST	IS LC-STATUS = DATA TRANSFER ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	INT20	YES
* 
*	LC-STATUS IS NOT DATA TRANSFER, IF CLEAR: IGNORE PACKET, ELSE 
*	PROCEDURE ERROR.
* 
	LDK	A1,CLEA.ST	IS LC-STATUS = CLEAR ?
	CC	A1,LCSTAT,A13	. 
	RB(NE)	RESC10	NO, SO PROCEDURE ERROR 
	RB	RESC00	IGNORE PACKET
* 
	EJECT
* 
*	STATE = DATA TRANSFER, IF SUB-STATE = RESET: IGNORE PACKET
* 
INT20	EQU	* 
	LC	A1,LCSBST,A13	IS LC-SUBSTATUS = RESET 
	ANK	A1,RSET.STA	.
	RB(NZ)	RESC00	IGNORE PACKET
* 
*	QUEUE PACKET FOR REQUEST HANDLER
* 
INT30	EQU	* 
	ST	A3,HDLC,A2	SAVE PACKET LENGTH IN BUFFER 
         LDR      A1,A13                INPUT QUEUE ANCHOR ADDRESS
         ADK      A1,QUEINP 
         CF       A14,QUEUEF            QUEUE ELEMENT AS FIRST
         LDK      A2,NPRFLG             RESET NO PROCESSING FLAG
         C1R      A2,A2 
         ANRS     A2,A1 
	LDR	A4,A4
	RF(NZ)	INTC10	CONTINUE WITH SPECIFIC PROCESSING
			OF INTERRUPT CONF. PACKET
	RB	RSTC20	CONTROL BLOCK BACK TO SCHEDULER
	EJECT
* 
* 
*	PROCESSING OF RECEIVED INTERRUPT CONFIRMATION PACKET
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A3  = BUFFER LENGTH
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    INTCIN
INTCIN	EQU	*
	LDK	A4,1	INDICATION FOR INTERR. CONF. PACKET ENTRY 
* 
*	STATUS CKECKING ETC. IS DONE IN COMMON PART OF CODING WITH
*	THE PROCESSING OF A INTERRUPT PACKET. 
* 
	RB	INT00 
* 
*	RESET INTERRUPT PENDING FLAG
* 
INTC10	EQU	*
	LDK	A1,INTPNG	RESET INTERRUPT PENDING FLAG 
	C1R	A1,A1	.
	ANS	A1,FLAGS,A13	. 
	RB	RSTC20	CONTROL BLOCK BACK TO SCHEDULER
	EJECT
* 
* 
*	THIS MODULE PERFORMS THE CLEARING RESP. THE 
*	RESETTING OF A SVC RESP. PVC. 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = DIAGNOSTIC CODE
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		ABL    CLVC
* 
CLVC	EQU	*
	LDR	A5,A1	SAVE DIAGNOSTIC CODE 
	IFF	SWITVC=0 
	IFF	PERMVC=0 
* 
*	SELECT ON VC-TYPE 
* 
	LDK	A1,PVC	GET VC-TYPE 
	CC	A1,VCTYP,A13	.
	RF(E)	CLV100	TYPE IS PERMANENT 
* 
*	SWITCHED VIRTUAL CIRCUIT
* 
	XIF
	IFF	SWITVC=0 
	LDK	A1,CLEA.ST	IS LC-STATUS = CLEAR ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	CLVC60	YES, NO ACTION
         SC       A1,LCSTAT,A13    LC-STATUS:=CLEAR 
* 
	EJECT
* 
*	EMPTY INPUT QUEUE 
* 
         CF       A14,CLINPQ
* 
*	COMPLETE EVENTS IN OUTPUT QUEUE 
* 
	LDKL	A3,CLEA.RC
	CF	A14,CMEVNT
* 
*	SEND NOTIFICATION TO RH, IF APPLICABLE
* 
	LD	A6,LCDWT,A13	DOES THE RH KNOWS THIS LC ?
	RF(Z)	CLVC20	NO
         LDK      A1,VCREL
         SC       A1,DWTSTE,A6
	CF	A14,GTBUF	GET AN INPUT BUFFER 
	LC	A1,LCNUM,A13	LOGICAL CHANNEL NUMBER 
	SC	A1,LCIDNT,A2	.
	LDK	A1,CLE.P	INTERNAL PACKET TYPE
	SC	A1,IDENT,A2	. 
	SC	A5,DGNCOD,A2	.
	LDK	A1,CLE.L	PACKET LENGTH 
	ST	A1,HDLC,A2	.
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
	LD	A1,TIMADR,A13	GET TIMER BLOCK ADDRESS 
	CF	A14,CANTIM	CANCEL TIMER 
         CM       TIMADR,A13
* 
	EJECT
* 
*	PREPARE CLEAR PACKET AND TRANSMIT IT TO THE REMOTE STATION
* 
CLVC20	EQU	*
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	CLVC40	YES 
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,CLVC20	REACTIVATION ADDRESS
	ABL	BUFWAT 
* 
CLVC40	EQU	*
	LDK	A1,CLE.P	CLEAR PACKET TYPE 
	SC	A1,IDENT,A2	. 
	SC	A5,DGNCOD,A2	DIAGNOSTIC CODE
	LDK	A1,0 
	SC	A1,CAUSE,A2	CLEAR CLEARING CAUSE
	LDK	A1,CLE.L	CLEAR PACKET LENGTH 
	ST	A1,HDLC,A2	.
	CF	A14,QUEO	PUT ELEMENT IN OUTPUT QUEUE
* 
*	START CONFIRMATION TIMER
* 
	LDKL	A8,SYCLTM	CLEAR CONFIRMATION TIMER
	CF	A14,STTIM	START TIMER 
CLVC60	EQU	*
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
	XIF
	IFF	PERMVC=0 
	EJECT
* 
*	PERMANENT VIRTUAL CIRCUITS
* 
CLV100	EQU	*
	LDK	A1,RSET.ST	IS SUB-STATUS = RESET ? 
	CC	A1,LCSBST,A13	. 
	RF(E)	CLV160	YES, NO ACTION
	SC	A1,LCSBST,A13	SUBSTATUS := RESET
* 
*	RESET VIRTUAL CIRCUIT 
* 
	CF	A14,RSETVC
* 
*	SEND NOTIFICATION TO RH, IF APPLICABLE
* 
	LD	A1,LCDWT,A13	DOES THE RH KNOWS THIS LC ?
	RF(Z)	CLV130	NO
	CF	A14,GTBUF	GET AN INPUT BUFFER 
	LC	A1,LCNUM,A13	LOGICAL CHANNEL NUMBER 
	SC	A1,LCIDNT,A2	.
	LDK	A1,RSET.P	PACKET TYPE
	SC	A1,IDENT,A2	. 
	SC	A5,DGNCOD,A2	.
	LDK	A1,RSET.L	PACKET LENGTH
	ST	A1,HDLC,A2	.
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
	LD	A1,TIMADR,A13	GET TIMER BLOCK ADDRESS 
	CF	A14,CANTIM	CANCEL TIMER 
	CM	TIMADR,A13
* 
	EJECT
* 
*	PREPARE RESET PACKET AND TRANSMIT IT TO THE REMOTE STATION
* 
CLV130	EQU	*
	LDR	A2,A13	GET AN OUTPUT BUFFER
	ADK	A2,SYSBUF	.
	LDR*	A1,A2	IS IT FREE ?
	RF(Z)	CLV150	YES 
* 
*	WAIT FOR RELEASING OF OUTPUT BUFFER 
* 
	LDKL	A1,CLV130	REACTIVATION ADDRESS
	ABL	BUFWAT 
* 
CLV150	EQU	*
	LDK	A1,RSET.P	RESET PACKET TYPE
	SC	A1,IDENT,A2	. 
	SC	A5,DGNCOD,A2	DIAGNOSTIC CODE
	LDK	A1,0 
	SC	A1,CAUSE,A2	CLEAR RESET CAUSE 
	LDK	A1,RSET.L	RESET PACKET LENGTH
	ST	A1,HDLC,A2	.
	CF	A14,QUEO	PUT ELEMENT IN OUTPUT QUEUE
* 
*	START CONFIRMATION TIMER
* 
	LDKL	A8,SYRETM	RESET CONFIRMATION TIMER
	CF	A14,STTIM	START TIMER 
CLV160	EQU	*
	ABL	EXITDC 
	XIF
	EJECT
* 
* 
*	THIS MODULE RELEASE ALL RELATION BETWEEN THE
*	DWT AND THE LOGICAL CHANNELS. THE LC IS PLACED
*	IN THE INITIAL STATE. 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = DIAGNOSTIC CODE FOR THE RH 
*		A12 = LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,CLAVCS 
* 
*	OUTPUT PARAMETERS:
*		NO REGISTERS ARE CHANGED 
* 
CLAVCS	EQU	*
         CF       A14,SAVE8             SAVE REGISTERS
	LDR	A7,A13	SAVE A13
* 
*	RELEASE ALL LOGICAL CHANNELS
* 
	LC	A4,NRLC,A12	GET # OF LOGICAL CHANNELS 
	ANK	A4,/FF	. 
	SUK	A4,1	. 
CLAV00	EQU	*
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
* 
	EJECT
* 
	CF	A14,CLINPQ	CLEAR INPUT QUEUE
	IFF	SWITVC=0 
	LDK	A2,0 
	IFF	PERMVC=0 
	LC	A1,VCTYP,A13	VC-TYPE
	ANK	A1,/FF	. 
	RF(Z)	CLAV10	SWITCHED VIRTUAL CIRCUIT
	XIF
	IFF	PERMVC=0 
	LDK	A2,DATA.ST	PRESET LC-STATUS
	ECR	A2,A2	.
	XIF
CLAV10	EQU	*
	ST	A2,LCSTAT,A13	SET STATUS TO INITIALE VALUE
	LD	A6,LCDWT,A13	IS THERE RELATION WITH A DWT 
	RF(Z)	CLAV30	NO
	IFF	SWITVC=0 
	IFF	PERMVC=0 
	ADK	A1,0	PVC ? 
	RF(NZ)	CLAV15	YES
	XIF
	IFF	SWITVC=0 
         LDK      A1,VCREL
         SC       A1,DWTSTE,A6
CLAV15	EQU	*
	XIF
* 
*	RESET TIMER FLAGS 
*	CANCEL TIMER
* 
	LD	A1,TIMADR,A13 
	CF	A14,CANTIM
	CM	TIMADR,A13
	LDK	A1,CONTIM	MASK VALUE 
	C1R	A1,A1	.
	ANS	A1,FLAGS,A13	RESET FLAG
* 
*	COMPLETE PENDING OUTPUT REQUESTS
	LDKL	A3,CLEA.RC	RETURN CODE
* 
	CF	A14,CMEVNT
* 
	EJECT
* 
*	PREPARE CLEAR OR RESET NOTIFICATION FOR RH
* 
	CF	A14,GTBUF	GET AN INPUT BUFFER 
	LC	A1,LCNUM,A13	LOGICAL CHANNEL NUMBER 
	SC	A1,LCIDNT,A2	.
	IFF	SWITVC=0 
	LDK	A3,CLEA.RC	RETURN CODE 
	LDK	A1,CLE.P	PRESET PACKET TYPE = CLEAR
	IFF	PERMVC=0 
	LC	A3,VCTYP,A13	VC-TYPE
	ANK	A3,/FF	. 
	RF(Z)	CLAV20	SWITCHED VIRTUAL CIRCUIT
	XIF
	IFF	PERMVC=0 
	LDK	A3,RSET.RC	RETURN CODE 
	LDK	A1,RSET.P	PACKET TYPE = RESET
CLAV20	EQU	*
	XIF
	SC	A1,IDENT,A2	SAVE PACKET TYPE
	LD	A1,SAVE	GET INPUT PARAMETER 
	SC	A1,DGNCOD,A2	DIAGNOSTIC CODE
	LDK	A1,CLE.L	PACKET LENGTH 
	ST	A1,HDLC,A2	.
	CF	A14,QUEI	PUT ELEMENT IN INPUT QUEUE 
CLAV30	EQU	*
	SUK	A4,1	NEXT ENTRY IN LC:TAB
	RB(NN)	CLAV00	.
* 
*	READY 
* 
         LDR      A13,A7           RELOAD SAVED A13 
         CF       A14,RELOA8
	RTN	A14	BACK TO CALLER 
	EJECT
* 
* 
*	WAIT FOR RELEASING OF SYSTEM BUFFER 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = RESTART ADDRESS
*                 A12 = LINE BLOCK ADDRESS
*		A13 = LC-ADM ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL    BUFWAT
* 
*	OUTPUT PARAMETERS:
*		AFTER A CERTAIN TIME THE CALLER IS ACTIVATED 
*		ON THE RESTART LABEL 
*		A13 AND A14 REMAIN UNCHANGED.
* 
BUFWAT	EQU	*
	LDR	A2,A13	SAVE REGISTERS
	LDR	A3,A12	. 
	INH		.	=1
	CF	A15,GETBLK	GET A MONITOR BLOCK
	LDR	A1,A4	BLOCK ADDRESS AS PARAMETER 
	CF	A15,SETIME	SET TIMER
	DATA	BUFW00	ACTIVATION ADDRESS 
	DATA	BUFDEL	DELAY TIMER
	ENB
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
	EJECT
* 
*	ACTIVATION
* 
BUFW00	EQU	*
	LDR	A4,A1	GET MONITOR BLOCK ADDRESS
	INH		.	=1
	CF	A15,FREBLK	RELEASE BLOCK
	ENB
	LDR	A12,A3	RESTORE REGISTERS 
	LDR	A13,A2	. 
         LDKL     A14,DCSTAK       A14:=CF STACK POINTER
	ABR	A1	BACK TO CALLER
	EJECT
* 
* 
*	TRANSLATE THRESHOLD PERCENTAGE INTO A NUMBER OF PACKETS 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,TRTHR
* 
*	OUTPUT PARAMETERS:
*		THE NUMBER OF PACKETS IS STORED IN THE LC-ADM. 
*		A1 IS CHANGED
* 
TRTHR	EQU	* 
	STR	A4,A14	SAVE REGISTER 
	LDK	A1,0 
	LC	A1,LCREWN,A13	RECEIVE WINDOW SIZE = W 
	SUK	A1,1 
         LDK      A4,0
TRTHR1	EQU	*
	AD	A4,THRESH 
	SUK	A1,1	GET P*W 
	RB(NN)	TRTHR1
	LDKL	A1,-1 
TRTHR2	EQU	*
	ADK	A1,1 
	SUK	A4,100	P*W/100 
	RB(NN)	TRTHR2
	SC	A1,LCTHRE,A13	THRESHOLD VALUE IN PACKETS
	LDR*	A4,A14	RESTORE REGISTER 
	RTN	A14
	EJECT
	IFF	SWITVC=0 
* 
* 
*	CALCULATION OF THE WINDOW SIZES AND PACKET LENGTH 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A12 = LINE BLOCK ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,GTWNDS 
* 
*	OUTPUT PARAMETERS:
*		REGISTERS A1 AND A3 ARE CHANGED
* 
GTWNDS	EQU	*
	ST	A2,SAVE+6	SAVE REGISTER 
	LD	A1,WNDSIZ,A12	PRESET ON MAXIMUM VALUES
	SC	A1,LCTRWN,A13	. 
	SC	A1,LCREWN,A13	. 
	LD	A1,PACKLN,A12	. 
	ST	A1,TRBFSZ,A13	. 
	ST	A1,REBFSZ,A13	. 
	ADK	A2,BEGDAT	POINTER
	LCR	A1,A2	GET LENGTH VALUE 
	ANK	A1,/F0	LENGTH CALLING DTE
	SRL	A1,4	. 
	LCR	A3,A2	LENGTH CALLED DTE
	ANK	A3,/0F 
	ADR	A1,A3	ADD BOTH LENGTH
* 
	EJECT
* 
	ADK	A1,1	ROUNDED UPWARDS 
	SRL	A1,1	MAKE IT BYTES 
	ADR	A2,A1	PASS DTE FIELDS
	ADK	A2,1	POINTS TO FACILITY
	LCR	A1,A2	FACILITY SPECIFIED ? 
	ANK	A1,/3F 
	RF(Z)	GTWND6	NO
	ADK	A2,1	POINTS TO FIRST FACILITY
GTWND1	EQU	*
	LCR	A3,A2	GET FACILITY CODE
	CWK	A3,/02	FLOW CONTROL ?
	RF(E)	GTWND2	YES 
	ADK	A2,2	TRY NEXT ONE
	SUK	A1,2	UPDATE LENGTH 
	RF(NP)	GTWND6	EXHAUSTED
	RB	GTWND1	NEXT ONE 
* 
*	FACILITY FOR FLOW CONTROL SELECTION SPECIFIED 
* 
GTWND2	EQU	*
* 
*	GET TRANSMITTER DATA
* 
	ADK	A2,1	POINTS TO FACILITY PARAMETER
	LCR	A3,A2	GET PARAMETER
	ANK	A3,/0F	TRANSMITTER PARAMETERS
	SLL	A3,1	PREPARE FOR INDEXING
	RF(Z)	GTWND4	NOT SPECIFIED 
	LD	A3,CLAS1-2,A3	GET VALUES
	CC	A3,TRBFSZ+1,A13	PACKET SIZE TOO LARGE ? 
	RF(NL)	GTWND3	YES
	SC	A3,TRBFSZ+1,A13	SAVE TRANSMITTER BUFFER SIZE
* 
	EJECT
* 
GTWND3	EQU	*
	ECR	A3,A3
	CC	A3,LCTRWN,A13	WINDOW SIZE TOO LARGE ? 
	RF(NL)	GTWND4	YES
	SC	A3,LCTRWN,A13	SAVE WINDOW SIZE
* 
*	GET RECIEVER DATA 
* 
GTWND4	EQU	*
	LCR	A3,A2	GET PARAMETER AGAIN
	ANK	A3,/F0	RECEIVER PARAMETER
	SRL	A3,3	PREPARE FOR INDEXING
	RF(Z)	GTWND6	NOT SPECIFIED 
	LD	A3,CLAS1-2,A3	GET VALUES
	CC	A3,REBFSZ+1,A13	PACKET SIZE TOO LARGE ? 
	RF(NL)	GTWND5	YES
	SC	A3,REBFSZ+1,A13	SAVE RECEIVER BUFFER SIZE 
GTWND5	EQU	*
	ECR	A3,A3
	CC	A3,LCREWN,A13	WINDOW SIZE TOO LARGE ? 
	RF(NL)	GTWND6	YES
	SC	A3,LCREWN,A13	SAVE WINDOW SIZE
GTWND6	EQU	*
	LD	A2,SAVE+6	RELOAD SAVED A2 
	RTN	A14
	EJECT
	XIF
* 
* 
*	COMPLETE AN OUTPUT EVENT, DUE TO AN ERROR SITUATION 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A3  = RETURN CODE
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,CMEVNT 
* 
*	OUTPUT PARAMETERS:
*		A1 ,A2 AND A6 ARE CHANGED
* 
CMEVNT	EQU	*
	LDR	A1,A13	QUEUE ANCHOR ADDRESS
	ADK	A1,QUEOUT	.
	LDK	A2,NPRFLG	SET MASK VALUE 
	C1R	A2,A2	.
	ANRS	A2,A1	IS QUEUE EMPTY ?
	RF(Z)	CMEV20	YES 
	CF	A14,DEQUE	GET ELEMENT FROM QUEUE
	LDKL	A1,DWTTYP 
	CW	A1,DWTCHP,A2	IS IT A DWT ?
	RF(NE)	CMEV10	NO 
	LDR	A6,A2	A6 = DWT-ADDRESS 
	CF	A14,CMPREQ	COMPLETE REQUEST 
	RB	CMEVNT
* 
	EJECT
* 
*	THE ELEMENT IS A SYSTEM BUFFER
* 
CMEV10	EQU	*
	CMR	A2	RELEASE SYSTEM BUFFER 
	RB	CMEVNT
* 
CMEV20	EQU	*
	RTN	A14
	EJECT
* 
* 
*	THIS MODULE PERFORMS SOME TESTS ON A RECIEIVED
*	DATA-, RR- OR RNR PACKET. 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,TDARR
* 
*	OUTPUT PARAMETERS:
*		A1 = 0 NO ERRORS FOUND 
*		     1 P(R) ERROR FOUND
*		WHEN A PROCEDURE ERROR IS DETECTED, THE VC WILL BE CLEARED 
*		OR RESET AND THE MODULE RETURNS TO THE SCHEDULER.
* 
TDARR	EQU	* 
	LDK	A1,DATA.ST	IS LC-STATUS = DATA TRANSFER ?
	CC	A1,LCSTAT,A13	. 
	RF(E)	TDA10	YES
* 
*	LC-STATUS IS NOT DATA TRANSFER, IF CLEAR: IGNORE PACKET, ELSE 
*	PROCEDURE ERROR 
* 
	LDK	A1,CLEA.ST	IS LC-STATUS = CLEAR ?
	CC	A1,LCSTAT,A13	. 
	RF(NE)	TDA00	YES 
	CF	A14,RLBUF	IGNORE PACKET 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
	EJECT
* 
*	ILLEGAL STATE, SO PROCEDURE ERROR 
* 
TDA00	EQU	* 
	CF	A14,RLBUF	BUFFER BACK TO POOL 
	LDK	A1,LOCPER	DIAG. CODE = PROCEDURE ERROR 
	ABL	CLVC	CLEAR VC AND RETURN TO SCHEDULER
* 
*	STATE = DATA TRANSFER, IF SUB-STATE = RESET: IGNORE PACKET
* 
TDA10	EQU	* 
	LDK	A1,RSET.ST	IS LC-STATUS = RESET
	CC	A1,LCSBST,A13	. 
	RF(NE)	TDA20	NO
	CF	A14,RLBUF	BUFFER BACK TO POOL 
	ABL	EXITDC	CONTROL BACK TO SCHEDULER 
* 
*	TEST IF RECEIVED P(R) IS IN WINDOW: SLWE <= P(R) <= PS
*	OR P(R) - SLWE <= PS - SLWE 
* 
TDA20	EQU	* 
	LC	A1,IDENT,A2	GET RECEIVED P(R) 
	SRL	A1,5	. 
	ANK	A1,/07	. 
	LC	A4,SLWE,A13	SEND LWE = OLD P(R) 
	ANK	A4,/FF	. 
	SUR	A1,A4	GET P(R) - SLWE
	ANK	A1,/07	MODULO 8
	STR	A1,A14	SAVE IT 
	LC	A1,PS,A13	GET PS - SLWE 
	SUR	A1,A4	.
	ANK	A1,/07	MODULO 8
	CWR*	A1,A14	>= 
	RF(NL)	TDA30	YES 
	EJECT
* 
*	P(R) IS NOT IN WINDOW, RETURN CODE := 1 
* 
	LDK	A1,1	SET RETURN CODE 
	RF	TDA40 
* 
*	PACKET CORRECT
* 
TDA30	EQU	* 
	LDK	A1,0	SET RETURN CODE 
TDA40	EQU	* 
	RTN	A14
	EJECT
* 
* 
*	CALCULATE QUEUE ANCHOR ADDRESS AND QUEUE ELEMENT
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A2  = ELEMENT ADDRESS
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,QUEI/QUEO
* 
*	OUTPUT PARAMETERS:
*		NONE 
*		A1 IS CHANGED
* 
QUEI	EQU	*
	LDK	A1,QUEINP
	RF	QUEO00
* 
QUEO	EQU	*
	LDK	A1,QUEOUT
QUEO00	EQU	*
	ADR	A1,A13	GET QUEUE ANCHOR ADDRESS
	CF	A14,QUEUE	QUEUE ELEMENT 
	RTN	A14
	EJECT
* 
* 
*	QUEUE ROUTINE (FIFO)
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = ADDRESS QUEUE ANCHOR 
*		A2  = ELEMENT ADDRESS
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,QUEUE
* 
*	OUTPUT PARAMETERS:
*		NO REGISTERS ARE CHANGED 
* 
QUEUE	EQU	* 
	IFT	CPU852=1 
	ST	A1,QUESAV	SAVE REGISTERS A1-A3
	ST	A2,QUESAV-2 
	ST	A3,QUESAV-4 
	XIF
	IFT	CPU852=0 
	MS	3,QUESAV-4	SAVE REGISTERSA1-A3
	XIF
	LDR*	A3,A1 
	ANKL	A3,/FFFE	QUEUE FILLED?
	RF(Z)	QUE10	NO 
* 
	EJECT
* 
QUE05	EQU	* 
	LDR	A1,A3	GET NEXT ELEMENT 
	LD	A3,BFCHPT,A1	CHAIN FILLED?
	RB(NZ)	QUE05	YES 
	ST	A2,BFCHPT,A1	STORE NEW ELEMENT
	RF	QUE15 
QUE10	EQU	* 
	ORRS	A2,A1	STORE ELEMENT IN ANCHOR 
QUE15	EQU	* 
	CM	BFCHPT,A2	SET ZERO IN CHAINPOINTER
	IFT	CPU852=1 
	LD	A1,QUESAV	RESTORE REGISTERS A1-A3 
	LD	A2,QUESAV-2 
	LD	A3,QUESAV-4 
	XIF
	IFT	CPU852=0 
	ML	3,QUESAV-4	RESTORE REGISTERS A1-A3
	XIF
	RTN	A14
	EJECT
* 
* 
*	QUEUE ROUTINE (LIFO)
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = ADDRESS QUEUE ANCHOR 
*		A2  = ELEMENT ADDRESS
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,QUEUEF 
* 
*	OUTPUT PARAMETERS:
*		NO REGISTERS ARE CHANGED 
* 
QUEUEF	EQU	*
	ST	A3,QUESAV	SAVE REGISTERS A3,A4
	ST	A4,QUESAV-2 
         CM       BFCHPT,A2 
	LDR*	A4,A1	GET ADDRESS FROM QUEUE ANCHOR 
	ANK	A4,/01	SAVE BIT 15 
	LDKL	A3,/FFFE
	ANRS	A3,A1	CLEAR BIT 15 OF ANCHOR
	LDR*	A3,A1	ADDRESS FROM QUEUE ANCHOR 
	RF(Z)	QUEF10 
	ST	A3,BFCHPT,A2	STORE OLD POINTER IN NEW ELEMENT 
QUEF10	EQU	*
	STR	A2,A1	STORE NEW ELEMENT IN ANCHOR
	ORRS	A4,A1	STORE OLD BIT 15 IN ANCHOR
	LD	A3,QUESAV	RESTORE REGISTERS A3,A4 
	LD	A4,QUESAV-2 
	RTN	A14
	EJECT
* 
* 
*	DEQUEUE ROUTINE 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = ADDRESS QUEUE ANCHOR 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,DEQUE
* 
*	OUTPUT PARAMETERS:
*		A2 = ELEMENT ADDRESS 
*		NO REGISTERS ARE CHANGED 
* 
DEQUE	EQU	* 
	ST	A3,QUESAV	SAVE REGISTER A3
	LDR*	A2,A1	GET ELEMENT FROM ANCHOR 
	LD	A3,BFCHPT,A2	GET ADDRESS NEXT ELEMENT 
	STR	A3,A1	STORE IN ANCHOR
	CM	BFCHPT,A2	ZERO IN CHAINPOINTER
	LDR	A3,A2
	ANK	A3,1	. 
	XRR	A2,A3	RESET BIT 15 IN ELEMENT ADDR.
	LD	A3,QUESAV	RESTORE REGISTER A3 
	RTN	A14
	EJECT
* 
* 
*	START TIMER ROUTINE 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A4  = ACTIVATION ADDRESS 
*		A8  = TIME-OUT VALUE 
*		A12 = 1TH PARAMETER
*		A13 = 2ND PARAMETER
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,STRTIM 
* 
*	OUTPUT PARAMETERS:
*		A4 = ADDRESS TIMER 
*		NO OTHER REGISTERS ARE CHANGED 
* 
STRTIM	EQU	*
	IFT	CPU852=1 
	ST	A1,TIMSAV	SAVE REGISTERS
	ST	A2,TIMSAV-2 
	ST	A3,TIMSAV-4 
	XIF
	IFT	CPU852=0 
	MS	3,TIMSAV-4	SAVE REGISTERS 
	XIF
	ST	A8,STRPAR+2	SET TIME
	LDR	A1,A13	LC-ADM ADDRESS
	LDR	A2,A4	DISPATCH ADDRESS 
	LDR	A3,A12	1TH PARAMETER 
* 
	EJECT
* 
	INH		.	=1
	CF	A15,GETBLK	GET MONITOR BLOCK
	LDR	A1,A4	ADDRESS BLOCK
	CF	A15,SETIME	SET TIMER
STRPAR	DATA	TIMACT	TIMER ENTRY AFTER TIME OUT 
	DATA	0	TIMER VALUE IN 0,1 SEC
	ENB
	IFT	CPU852=1 
	LD	A1,TIMSAV	RESTORE REGISTERS 
	LD	A2,TIMSAV-2 
	LD	A3,TIMSAV-4 
	XIF
	IFT	CPU852=0 
	ML	3,TIMSAV-4	RESTORE REGISTERS
	XIF
	RTN	A14
* 
*        RETURN AFTER TIME OUT
* 
TIMACT	EQU	*
	LDKL	A5,TTBX25	TTAB-ADDRESS
	LD	A2,2,A1	GET DISPATCH ADDRESS
	LDK	A3,0 
	CF	A15,ACTOT	ACTIVATE TASK 
	ABL	TDISP
	EJECT
* 
* 
*	CANCEL TIMER ROUTINE
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A1  = ADDRESS TIMER
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,CANTIM 
* 
*	OUTPUT PARAMETERS:
*		A1 = REMAINING TIME
*		NO OTHER REGISTERS ARE CHANGED 
* 
CANTIM	EQU	*
	ST	A2,TIMSAV	SAVE REGISTERS
	ST	A3,TIMSAV-2 
	ST	A4,TIMSAV-4 
	LDR	A2,A1	ADDRESS TIMER VALUE
         INH
	RF(Z)	CANTEN	NO TIMER SPECIFIED
	LDR*	A1,A2	GET TIMER VALUE 
	RF(Z)	CANTEN	TIMER = 0 
	C1R	A1,A1	GET REMAINING TIME 
         CMR      A2               SET TIMER VALUE 0
	LD	A3,-2,A2	ADDRESS TIMOUTBLOCK
	LD	A4,4,A3	ADDRESS ACTIVATIONBLOCK 
	ST	A1,4,A4	SAVE A1 
	INH		.	=1
	CF	A15,FREBLK	RELEASE ACTIVATIONBLOCK
* 
	EJECT
* 
CANTEN	EQU	*
         ENB
	LD	A2,TIMSAV	RESTORE REGISTERS 
	LD	A3,TIMSAV-2 
	LD	A4,TIMSAV-4 
	RTN	A14
* 
	RES	3	SAVE AREA
TIMSAV	EQU	*-2
QUESAV	EQU	*-2
         EJECT
* 
* 
*	MODULE TO CONTROL THE PROCESSES IN THE DC-TASK
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		NONE 
* 
*	CALLING SEQUENCE: 
*		ABL    EXITDC
* 
*	OUTPUT PARAMETERS:
*		AT ENTRY OF AN ACTIVATED PROCESS:
*		A1  = QUEUE ANCHOR ADDRESS 
*		A12 = LINE BLOCK ADDRESS 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
EXITDC	EQU	*
	LDK	A5,NPRFLG	NO PROCESSING MASK 
	C1R	A6,A5	.
* 
*	GET SAVED LAST SCAN PARAMETERS
* 
	LD	A4,SCHEDC	LOGICAL CHANNEL INDEX 
	LD	A7,SCHEDL	LINE INDEX
	LDKL	A14,DCSTAK	SET STACK POINTER
	LDKL	A10,-2	SCAN LOOP-COUNTER
* 
	EJECT
* 
EXIT00	EQU	*
	LDKL	A12,LINTAB	GET LINE BLOCK ADDRESS 
	IFF	SYNRLN=1 
	ADR	A12,A7	. 
	ADR	A12,A7	. 
	XIF
	LDR*	A12,A12	. 
* 
*	TEST IF LINE CONNECTED
* 
         LD       A13,CMNFLG,A12
	RF(Z)	EXIT04	NO! CONTINUE WITH NEXT LINE (IF ANY)
* 
*	TEST IF ONLY STATISTIC FLAG IS SET
* 
	SUKL	A13,STATFL
	RF(Z)	EXIT04	YES 
	ADK	A4,1	TAKE NEXT LOGICAL CHANNEL 
	CC	A4,NRLC,A12	IS THERE A NEXT ONE ? 
	RF(L)	EXIT10	YES 
EXIT04	EQU	*
	LDKL	A4,-1	PRESET FOR NEW LG.CH. OF NEXT LINE
	IFF	SYNRLN=1 
	ADK	A7,1	UPDATE LINE INDEX 
	CWK	A7,SYNRLN	IS THERE A NEXT LINE ? 
         RF(L)    EXIT30               YES
	LDK	A7,0	START AGAIN WITH FIRST LINE 
	XIF
	ADKL	A10,1 
	RF(Z)	EXIT32	END OF SCANNING 
         RF       EXIT30               .
* 
	EJECT
* 
EXIT10	EQU	*
	CF	A14,GTLCAD	GET LC-ADM ADDRESS 
	LDKL	A8,OUTPCK	PRESET ACTIVATION ADDRESS 
	LDKL	A9,1	PRESET PROCESS INDICATION
	LD	A3,NRPNDT,A12	CHECK NR. OF OUTPUT REQUESTS
	CWK	A3,SYNRTR	.
	RF(NL)	EXIT20	MAXIMUM, SO NO OUTPUT
	LDR	A1,A12	CHECK RESTART OUTPUT QUEUE
	ADK	A1,RSTQUE	.
	LDR*	A2,A1	. 
	RF(NZ)	EXIT35	NOT EMPTY
	LDR	A1,A13	CHECK OUTPUT QUEUE
	ADK	A1,QUEOUT	.
	LDR*	A2,A1	. 
	RF(Z)	EXIT20	QUEUE IS EMPTY
	TM	A2,A6 
	RF(Z)	EXIT20	ONLY NO PROCESSING FLAG IS SET
	TM	A2,A5	TEST IF QUEUE IS BLOCKED
	RF(Z)	EXIT40	NO, SO PROCESS THIS QUEUE 
EXIT20	EQU	*
	LDKL	A8,RHIP	PRESET ACTIVATION ADDRESS 
	LDKL	A9,4	PRESET PROCESS INDICATION
	LDR	A1,A13	CHECK INPUT QUEUE 
	ADK	A1,QUEINP	.
	LDR*	A2,A1	. 
	RF(Z)	EXIT30	QUEUE IS EMPTY
	TM	A2,A6 
	RF(Z)	EXIT30	ONLY NO PROCESSING FLAG IS SET
	TM	A2,A5	TEST IF QUEUE IS BLOCKED
	RF(Z)	EXIT40	NO, SO PROCESS THIS QUEUE 
* 
	EJECT
* 
*	CHECK IF A COMPLETED SCAN CYCLE IS DONE 
* 
EXIT30	EQU	*
	CW	A4,SCHEDC 
	RB(NE)	EXIT00	CONTINUE WITH SCANNING 
         CW       A7,SCHEDL 
	RB(NE)	EXIT00	CONTINUE WITH SCANNING 
	CM	DCLEVL	SET PROCESS INDICATION 
EXIT32   EQU      * 
	LKM		EXIT DC-TASK
	DATA	3 
* 
*	A NOT EMPTY QUEUE IS FOUND, ACTIVATE THE CONCERNING PROCESS 
* 
EXIT35	EQU	*
	LD*	A13,LC:TAB,A12	USE LOGICAL CHANNEL 0 FOR RESTART 
EXIT40	EQU	*
	ST	A4,SCHEDC	SAVE SCAN PARAMETERS
	ST	A7,SCHEDL	. 
	ST	A9,DCLEVL	SET PROCESS INDICATION
	ABR	A8	BRANCH TO THE ROUTINE 
* 
SCHEDC   DATA     0                     LOGICAL CHANNEL INDEX 
SCHEDL	DATA	0	LINE INDEX
	EJECT
* 
* 
*	ROUTINE TO RESET A VIRTUAL CIRCUIT
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,RSETVC 
* 
*	OUTPUT PARAMETERS:
*		NONE 
* 
RSETVC	EQU	*
         CF       A14,SAVE8 
	CF	A14,CLLCAD	CLEAR LC-ADM FIELDS
* 
*	EMPTY INPUT QUEUE 
* 
         CF       A14,CLINPQ
* 
*	COMPLETE EVENTS IN OUTPUT QUEUE 
* 
	LD	A1,LCDWT,A13	IS THERE A RELATION WITH AN USER 
	RF(Z)	RSET20	NO
	LDKL	A3,RSET.RC	RETURN CODE
	CF	A14,CMEVNT
RSET20	EQU	*
         CF       A14,RELOA8
	RTN	A14
* 
	EJECT
* 
* 
*	ROUTINE TO EMPTY THE INPUT QUEUE
* 
****************************************************
* 
*	INPUT PARAMETERS: 
*		A13 = LC-ADM ADDRESS 
*		A14 = CF STACK POINTER 
* 
*	OUTPUT PARAMETERS:
*		NONE 
* 
CLINPQ   EQU      * 
	LDR	A1,A13	QUEUE ANCHOR ADDRESS
	ADK	A1,QUEINP	.
	LDK	A2,NPRFLG	SET MASK VALUE 
	C1R	A2,A2	.
	ANRS	A2,A1	IS QUEUE EMPTY ?
         RF(Z)    CLINP1           YES
	CF	A14,DEQUE	GET ELEMENT FROM QUEUE
	CF	A14,RLBUF	RELEASE BUFFER
         RB       CLINPQ
* 
CLINP1   EQU      * 
         RTN      A14 
	EJECT
* 
* 
*	ROUTINE TO CLEAR LC-ADM FIELDS
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A13 = LC-ADM FIELDS
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF     A14,CLLCAD
* 
*	OUTPUT PARAMETERS:
*		NONE 
*		A1 IS CHANGED
* 
CLLCAD	EQU	*
	LDK	A1,0 
	ST	A1,FLAGS,A13	CLEAR FIELDS IN LC-ADM 
         ST       A1,SYSBUF-2,A13 
	SC	A1,PS,A13	. 
	SC	A1,PR,A13	. 
	SC	A1,RPS,A13	.
	SC	A1,SLWE,A13	. 
         SC       A1,RLWE,A13 
	SC	A1,NRNUBF,A13 
	RTN	A14
	EJECT
* 
* 
*	THIS ROUTINE CALCULATES FROM THE FILE CODE OF THE 
*	LINE ECB THE LINE BLOCK ADDRESS 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A8  = LINE ECB ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,GTLBA
* 
*	OUTPUT PARAMETERS:
*		A12 = LINE BLOCK ADDRESS 
* 
GTLBA	EQU	* 
	IFT	SYNRLN=1 
	LD	A12,LINTAB	LINE BLOCK ADDRESS 
	XIF
	IFF	SYNRLN=1 
	STR	A1,A14	SAVE REGISTER 
	LDKL	A1,LINTAB	TABLE WITH LINE BLOCK ADDRESS 
GTLB00	EQU	*
	LDR*	A12,A1	LINE BLOCK ADDRESS 
	LD	A2,FILCOD,A12	CHECK FILE CODE 
	CC	A2,ECBFC,A8	. 
	RF(E)	GTLB10	CORRECT ONE 
	ADK	A1,2 
	RB	GTLB00	TRY NEXT LINE BLOCK
* 
GTLB10	EQU	*
	LDR*	A1,A14	RESTORE REGISTER 
	XIF
	RTN	A14	RETURN 
	EJECT
* 
* 
*	ROUTINE TO GET LC-ADM ADDRESS 
* 
********************************************
* 
*	INPUT PARAMETERS: 
*		A4  = LOGICAL CHANNEL NUMBER 
*		A12 = LINE BLOCK ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,GTLCAD 
* 
*	OUTPUT PARAMETERS:
*		A13 = LC-ADM ADDRESS 
* 
GTLCAD	EQU	*
	LDR	A13,A4	PREPARE FOR INDEXING
	ADR	A13,A13	.
	AD	A13,LC:TAB,A12	LC-ADM ADDRESS 
	LDR*	A13,A13	GET LC-ADM ADDRESS
	RTN	A14
	EJECT
* 
* 
*	MODULE TO ACTIVATE A CONFIRMATION TIMER 
* 
********************************************
* 
*	INPUT PARAMTERS:
*		A8  = TIME-OUT VALUE 
*		A13 = LC-ADM ADDRESS 
*		A14 = CALL FUNCTION STACK POINTER
* 
*	CALLING SEQUENCE: 
*		CF    A14,STTIM
* 
*	OUTPUT PARAMETERS:
*                 A1 AND A4 CHANGED 
* 
STTIM	EQU	* 
	LDKL	A4,TIMOUT	ACTIVATION LABEL
	CF	A14,STRTIM	START TIMER
	ST	A4,TIMADR,A13	SAVE TIMER ADDRESS
	LDK	A1,CONTIM	SET TIMER STARTED FLAG 
	ORS	A1,FLAGS,A13	. 
	RTN	A14
	EJECT
* 
* 
* 
*	GET BUFFER ROUTINE
* 
****************************************************
* 
*	INPUT PARAMETERS: 
*		A14 = CF STACK POINTER 
* 
*	OUTPUT PARAMETERS:
*		A2  = BUFFER ADDRESS 
*		NO OTHER REGISTERS ARE CHANGED 
* 
GTBUF	EQU	* 
	STR	A1,A14	SAVE A1 
	LD	A2,BUFANC	BUFFER CHAIN ANCHOR 
	RF(Z)	GTBU10	NO BUFFER AVAILABLE 
	LDR*	A1,A2	GET BUFFER FROM CHAIN 
	ST	A1,BUFANC	. 
	ADK	A2,2	START OF BUFFER 
	LDR*	A1,A14	RELOAD A1
	RTN	A14
GTBU10	EQU	*
	HLT		ERROR 
* 
	EJECT
* 
* 
*	RELEASE BUFFER ROUTINE
* 
***************************************************** 
* 
*	INPUT PARAMETERS: 
*		A2  = BUFFER ADDRESS 
*		A14 = CF STACK POINTER 
* 
*	OUTPUT PARAMETERS:
*		NONE 
* 
RLBUF	EQU	* 
	STR	A1,A14	SAVE A1 
	LD	A1,BUFANC	BUFFER POOL ANCHOR
	SUK	A2,2 
	STR	A1,A2	PUT BUFFER.. 
	ST	A2,BUFANC	FIRST IN QUEUE
	LDR*	A1,A14	RELOAD A1
	RTN	A14
* 
	END

Full view