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

⟦891a05526⟧

    Length: 94100 (0x16f94)
    Notes: pts_type(SC)
    Names: »DRDC07.SC«

Derivation

└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
    └─⟦this⟧ »TOSSWORK/DRDC07.SC« 
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
    └─⟦this⟧ »TOSSWORK/DRDC07.SC« 

PTS(SC)

	IDENT	DRDC07	REL 11.0 81-06-02 870105041100

			=1,RETURN CODE 
			REL 11.0 81-01-26
			=2,MESPAS
			REL 11.0 81-04-14

********************************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
* 
*   DRDC07: DRIVER DATA COMMUNICATION 
*           UNBALANCED PROCEDURE WITH OPTION 2 (UNR 2) - REJ
*                    (FOR SECONDARY STATION)
* 
*		REFERENCES:
*		  ECMA STANDARD-40 HDLC FRAME STRUCTURE
*		  ECMA STANDARD-49 HDLC ELEMENTS OF PROCEDURE
*		  ECMA STANDARD-60 HDLC UNBALANCED CLASS OF PROCEDURES 
* 
********************************************* 
	EJECT
* 
* 
*	ENTRY POINTS
* 
* 
	ENTRY	DC07AD	ADDRESS BLOCK TERMINAL REQUESTS 
	ENTRY	IH0701	INPUT INTERRUPT 
	ENTRY	IH0702	OUTPUT INTERRUPT
	ENTRY	DC07ON	POWER ON ROUTINE
* 
* 
*	EXTERNAL REFERENCES 
* 
* 
	EXTRN	TDISP	DISPATCHER ENTRY 
	EXTRN	SAVE8	SAVE A1-A8 ON A15 STACK
	EXTRN	TENDIO	COMPLETE I/O EVENT
	EXTRN	SETIME	SET TIMER 
	EXTRN	DWTCHP	TERMINAL ADDRESS
	EXTRN	DWTST	DWT STATUS 
	EXTRN	DWTOR	DWT ORDER
	EXTRN	DWTECB	DWT ECB 
	EXTRN	DWTTAB	TTAB ADDRESS
	EXTRN	DWTDTE	SYMBOLIC DTE ADDRESS
	EXTRN	PFPOST	WAIT FOR POWER UP IF SET
	EXTRN	MOVUS	MOVE FROM USER TO SYSTEM BFR 
	EXTRN	MOVSU	MOVE FROM SYSTEM TO USER BFR 
	EXTRN	DCSRED	READ STATISTICS ENTRY POINT 
	EXTRN	DCSRLL	RESET ALL STATISTICS BUFFERS ENTRY POINT
	EXTRN	DCSUPR	UPDATE STATISTICS ENTRY POINT IN DCSTAT 
	EXTRN	GETDNA	CONVERT DTE SYMB TO PHYS
	EXTRN	GETSNA	CONVERT STA SYMB TO PHYS
	EXTRN	GETSSA	CONVERT STA PHYS TO SYMB
	EJECT		
**********************************************************************
* 
*	REGISTER USAGE:	
* 
*	A1	WORK (RETURN CODE) 
*	A2	WORK 
*	A3	WORK (BUFFER LENGTH) 
*	A4	WORK (BUFFER POINTER)
*	A5	DRIVER STACK POINTER 
*	A6	DWT ADDRESS
*	A7	WORK, ORDER CODE 
*	A8	ECB ADDRESS
* 
************************************************************************
	EJECT
************************************************************************* 
* 
*	CONDITIONAL ASSEMBLY
* 
************************************************************************* 
* 
*	INTERNAL: 
* 
* 
*	A PROGRAM VERSION USING TOSS PAGING IS
*	OBTAINED BY SETTING MMUPAG EQU 1
* 
MMUPAG	EQU	0
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0 
* 
CPU852	EQU	1
* 
CUTIME	EQU	5	CONTROL UNIT READY TIMEOUT = 500MS 
* 
*	EXTERNAL: 
* 
* 
X:A	EQU	3 
RBUFNR	EQU	X:A	NIMBER OF RECEIVE BUFFERS

X:B	EQU	130 
RBUFL	EQU	X:B	RECEIVE BUFFER LENGTH 

X:C	EQU	0 
MUX	EQU	X:C	MUX IF ::= 1. ELSE PC 

X:D	EQU	4 
WIRES	EQU	X:D	4-WIRE IF ::= 4. 2-WIRE IF ::=2 

X:E	EQU	0 
SUB	EQU	X:E	SUBTERMINAL ADDRESSING IF ::= 1 

X:F	EQU	0 
UNR2	EQU	X:F	REJ-FRAME SUPPORT IF ::= 1 

X:G	EQU	0 
MESPAS	EQU	X:G	MESSAGE PASSING IF ::= 1 

X:H	EQU	0 
STAT	EQU	X:H	STATISTIC SUPPORT IF ::= 1 

X:I	EQU	0 
LOGG	EQU	X:I	LOGG FUNCTION IF ::= 1 

X:J	EQU	0 
P6805	EQU	X:J	6805 COMPUTER IF ::= 1

X:K	EQU	2 
	IFF	P6805=1
CHLCIN	EQU	X:K	INPUT DEVICE ADDRESS 
	XIF
	IFT	P6805=1
CHLCIN	EQU	X'0A'	INPUT DEVICE ADDRESS 
	XIF

X:L	EQU	130 
TBUFL	EQU	X:L	MMU AND/OR MUX BUFFER 
	EJECT
**********************************************************************
* 
*	GENERATED PARAMETERS
* 
**********************************************************************
	IFT	MUX=1		
CHLCUT	EQU	CHLCIN+/1	OUTPUT DEVICE ADDRESS
	XIF			 
	IFT	MUX=0		
	IFF	P6805=1
CHLCUT	EQU	CHLCIN+/10	OUTPUT DEVICE ADDRESS 
	XIF
	IFT	MUX=0		
	IFT	P6805=1
CHLCUT	EQU	CHLCIN+1 
	XIF
* 
*	BUFFER HEADER EQUATES 
*	
RCVHDR	EQU	6	RECEIVE BUFFER HEADER LENGTH IN BYTES
RCHDRW	EQU	3	RCVHDR IN WORDS
RCVEL	EQU	2	EL POS. IN RCV BFR HEADER 
RCVTCA	EQU	4	DISPLACEMENT FOR A+C 
BUFLEN	EQU	TBUFL+TBUFL	BFR LENGTH IN CHARS. 
	EJECT
**************************************
* 
*	DCDEFS  COMMON DEFS FOR DC DRIVERS/PACKAGES 
*	
**************************************
**********************************************************************
* 
*	ECB 
* 
**********************************************************************
* 
ECBFC	EQU	0	FILE CODE WORD
ECBBA	EQU	2	BUFFER ADDRESS
ECBRL	EQU	4	REQUESTED LENGTH IN BYTES 
ECBEL	EQU	6	EFFECTIVE LENGTH IN BYTES 
ECBRC	EQU	8	RETURN CODE 
ECBCW	EQU	10	CONTROL WORD 
ECBCW1	EQU	ECBCW	CONTROL WORD 1 
ECBCW2	EQU	12	CONTROL WORD 2
	EJECT
**********************************************************************
* 
*	DWT LAYOUT
* 
**********************************************************************
* 
*	    ................... 
*	  0 .  DWTCHP         . 
*	    ................... 
*	  2 .  DWTST          . 
*	    ................... 
*	  4 .  DWTECB         . 
*	    ................... 
*	  6 . DWTOPT . DWTOR  . 
*	    ................... 
*	  8 .  DWTADR         . 
*	    ................... 
*	 10 .  DWTTAB         . 
*	    ................... 
*	 12 .  DWTWAT         . 
*	    ................... 
*	 14 .  DWTTQ          . 
*	    ................... 
*	(16).  DWTUEC         .   IF   MMUPAG=1 
*	    ................... 
*	(18).  DWTMEC         .   IF   MMUPAG=1 
*	    ................... 
* DWTDRD	 +2 .  DWTSTB         .
*            ...................
*	 +4 .  DWTCHD         . 
*	    ................... 
*	 +6 .  DWTCHN         . 
*	    ................... 
*	 +8 .  DWTLAD         . 
*	    ................... 
*	+10 .  DWTRAD         . 
*	    ................... 
*	+12 .  DWTDR1/SUB     . 
*	    ................... 
*	+14 .  DWTRCL         . 
*	    ................... 
*	+16 .  DWTRTV         . 
*	    ................... 
*	+18 .  DWTRTP         . 
*	    ................... 
*	+20 .  DWTOPE         . 
*	    ................... 
*	+22 .  DWTOPN         . 
*	    ................... 
*	+24 .  DWTIPC         . 
*	    ................... 
*	+26 .  DWTIPT         . 
*	    ................... 
*	+28 .                 . 
*	    /  DRIVER DEPEND  / 
*	    /                 / 
*	    /                 / 
*	    ................... 
*	    .  STATISTIC      .   IF STAT=1 AND DWTSTB /=0
*	    /  BUFFER         / 
*	    ................... 
* 
DWTTQ	EQU	14
DWTUEC	EQU	DWTTQ+2
DWTMEC	EQU	DWTUEC+2 

	IFT	MMUPAG=0 
DWTDRD	EQU	DWTTQ+2	START OF DC DEPENDENT AREA 
	XIF
	IFT	MMUPAG=1 
DWTDRD	EQU	DWTMEC+2	START OF DC DEPENDENT AREA
	XIF
DWTSTB	EQU	DWTDRD	OFFSET REL START DWT TO STATISTIC BUFF IF ANY 
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 
DWTDR1	EQU	DWTDRD+10	DRIVER DEP WORD 1
DWTSUB	EQU	DWTDR1	SYMBOLIC SUBADDRESS 
DWTRCL	EQU	DWTDRD+12	REQUEST CONTROL WORD 
DWTRTV	EQU	DWTDRD+14	REQUEST TIMER VALUE
DWTRTP	EQU	DWTDRD+16	REQUEST TIMER POINTER
DWTOPE	EQU	DWTDRD+18	O/P DATA Q EXPEDITED/STATUS LINK NXT DWT 
DWTOPN	EQU	DWTDRD+20	O/P DATA Q NORMAL LINK NXT DWT 
DWTIPC	EQU	DWTDRD+22	I/P DATA Q LINK TO BUFFER
DWTIPT	EQU	DWTDRD+24	I/P DATA TIMER POINTER 
	EJECT			 
********************************************************************* 
* 
*	BUFFER LAYOUTS: 
* 
**********************************************************************
* 
*	TRANSMIT BUFFERS	 
* 
*	1. APPLICATION
*	
*	*******/ /********************* 
*	*      / /                    * 
*	*  T E / /   X T              * 
*	*      / /                    * 
*	*******/ /********************* 
*	<----       ECBRL          ---> 
* 
* 
*	2. MMU AND/OR IOP INTERNAL DRIVER BUFFER
* 
*	**********************************************
*	*     *     *     *         / /              *
*	*  A  *  C  * STA *         / / T E X T      *
*	*     *     *     *         / /              *
*	**********************************************
*	                  / 
*	                  --- 1ST APPLICATION CHARACTER 
*	  A = TCA (A FIELD), STARTS ON WORD BOUNDARY
*	  C = CONTROL FIELD 
*	  STA = SUBTERMINAL ADDRESS (FROM DWT) IF GENERATED 
	EJECT		
* 
*	RECEIVE BUFFERS 
* 
*	PROGRAMMED CHANNEL: 
*	****************************************************/ /****** 
*	*                             *                     / /     * 
*	*           RCVHDR            *                     / /     * 
*	*                             *                     / /     * 
*	****************************************************/ /****** 
*	*     *     *                 *                     / /     * 
*	*  A  *  B  * TCA    *  STA   *     TEXT            / /     * 
*	*     *     *        *        *                     / /     * 
*	****************************************************/ /****** 
*	                               <---      ECBEL          --->
*	                               /
*	                               '-- ECBBA
*	MMU AND/OR IOP: 
*	**************************************************/ /****** 
*	*                             *                   / /     * 
*	*           RCVHDR            *                   / /     * 
*	*                             *                   / /     * 
*	**************************************************/ /****** 
*	*     *     *         *       *                   / /     * 
*	*  A  *  B  *    C    *  STA  *      TEXT         / /     * 
*	*     *     *         *       *                   / /     * 
*	**************************************************/ /****** 
*	                               <---    ECBEL           ---> 
*	                               /
*	                               '---  ECBBA
*	A = LINKAGE TO NEXT RECEIVE BUFFER (1 WORD) 
*	B = EFFECTIVE LENGTH EXCL. STA (1 WORD) 
*	C = ADDRESS + CONTROL FIELDS OF FRAME (1+1 BYTE) (IF IOP) 
*	STA = FIRST DATA BYTE FROM LINE, ASSUMED = SUBTERMINAL ADDRESS (1 BYTE) 
*	      IF GENERATED
*	TCA = TERMINAL ADDRESS FROM A-FIELD OF FRAME (1 BYTE) 
*********************************************************************** 
	EJECT
**********************************************************************
* 
*	TOSS INTERFACE AREAS AND CONSTANTS
* 
**********************************************************************
* 
DEVIND	EQU	0	DEVICE INDEX DATA COMMUNICATION
* 
*	DRIVER ADDRESS BLOCK
* 
	DATA	BUFLEN	MMU BUFFER SIZE
	DATA	DEVIND	DEVICE INDEX 
DC07AD	DATA	DCACT	ADDRESS BLOCK 
	DATA	ABORT	ABORT ROUTINE ADDRESS 
* 
*	REGISTER USAGE: 
* 
*	ENTRY:	A6 = DWT ADDRESS 
*		A7 = ORDER CODE
*		A8 = ECB ADDRESS 
*	EXIT:	A1 = RETURN CODE
	EJECT
* 
* 
*	REQUEST HANDLING
* 
* 
*	ORDER CODE (A7) 
* 
OPEN	EQU	/21	OPEN 
CLOSE	EQU	/22	CLOSE 
CONPAS	EQU	/27	CONNECT PASSIVE
DISCO	EQU	/2F	DISCONNECT
READO	EQU	2	READ
WRITEO	EQU	6	WRITE
RSTAT	EQU	/00	READ STATUS 
STATIS	EQU	/2D	READ/RESET STATISTICS
STIMOT	EQU	/39	SET TIMEOUT VALUE
* 
*	OPTIONS:
* 
TYPRR	EQU	/43	RESET STATISTICS AFTER READ 
* 
*	RETURN CODE EQUATES (A1)
* 
RCREQ	EQU	/8000	REQUEST ERROR 
RCABRT	EQU	/4000	REQUEST ABORTED
RCDATA	EQU	/0100	DATA UNIT QUEUED & AVAILABLE 
RCSTAT	EQU	/0080	STATUS INFORMATION AVAILABLE 
RCTIME	EQU	/0040	TIMEOUT
RCSEQ	EQU	/0010	SEQUENCE ERROR
RCLGTH	EQU	/0008	ILLEGAL LENGTH 
RCLOGC	EQU	/0002	LOGICAL CONNECTION ERROR 
RCPHYC	EQU	/0001	PHYSICAL CONNECTION ERROR
	EJECT
**********************************************************************
* 
*	HARDWARE INTERFACE CONSTANTS AND EQUATES
* 
**********************************************************************
* 
*     CIO START-IN COMMANDS 
* 
CICMO	EQU	/2	CONNECT MODEM
CIDISC	EQU	/1	DISCONNECT MODEM
CIWAIC	EQU	/3	WAIT FOR CALLL
CIREPC	EQU	/5	RECEIVE ON PROG.CHANNEL 
CIAREP	EQU	/4	RECEIVE ON PROG.CHANNEL (2-WIRE)
CIREMX	EQU	/B	RECEIVE ON MUX CHANNEL
CIR4MX	EQU	/D	RECEIVE ON 4-WIRE MUX 
	IFT	WIRES=2
CIRPC	EQU	CIAREP	RECEIVE P.C. 
CIRMX	EQU	CIREMX	RECEIVE IOP
	XIF
	IFT	WIRES=4
CIRPC	EQU	CIREPC	RECEIVE P.C. 
CIRMX	EQU	CIR4MX	RECEIC 
	XIF
CIAREM	EQU	/E	RECEIVE ALARM ON MUX CHANNEL
	EJECT
* 
*     CIO START-OUT COMMANDS
* 
CINRTS	EQU	1	NO REQUEST TO SEND 
CIT4WP	EQU	2	4-WIRE PROG.CHANNEL
CIT2WP	EQU	3	2-WIRE PROG.CHANNEL
CIT4WM	EQU	/A	4-WIRE MUX.CHANNEL
CIT2WM	EQU	/B	2-WIRE MUX.CHANNEL
	IFT	WIRES=2
CIXPC	EQU	CIT2WP	TRANSMIT P.C.
CIXMX	EQU	CIT2WM	TRANSMIT IOP 
	XIF	 
	IFT	WIRES=4
CIXPC	EQU	CIT4WP	TRANSMIT P.C.
CIXMX	EQU	CIT4WM	TRANSMIT IOP 
	XIF
CIIDLE	EQU	4	TRANSMIT IDLE 1
*			
*	MUX DEVICE ADDRESSES ETC.	
*			
IOPIN	EQU	CHLCIN+CHLCIN	INPUT DEVICE ADDRESS
IOPOUT	EQU	CHLCUT+CHLCUT	OUTPUT DEVICE ADDRESS
WDXFER	EQU	/8000	WORD TRANSFER DCMODE 
WRCMD	EQU	/4000	IOP WRITE COMMAND 
* 
* DWT STATUS
* 
DWT:C	EQU	1	CONNECTED	=1
	EJECT
**********************************************************************
* 
*	PROTOCOL CONSTANTS/WORK AREAS/EQUATES 
* 
**********************************************************************
* 
* PROCEDURE WORK AREAS
* 
FRMRMD	DATA	0	FRMR CONTROL MODE 
AIGFIL	DATA	0	MODE SWITCH 
BUFADD	DATA	0	SAVE BUFFER ADDRESS 
SAVPAM	DATA	0	SAVE ACTION PARAMETER 
SAHDLC	DATA	0	SAVE STATUS 
DCTPGP	DATA	0	SAVE TIMER POINTER
TIMPOL	EQU	500	POLL TIME OUT
STATUS	DATA	0	(=1):N(S)FAIL,(=2):N(R) FAIL
BUFNUL	DATA	0	BUFFER OVERFLOW INDICATOR 
SWITCH	DATA	0	OUTPUT BUFFER FLAG
	IFT	MESPAS=1 
DTEDDT	DATA	0	DISCARD DWT	=2
	XIF
TRMACT	DATA	0	OUTPUT ACTIVE FLAG
	IFF	MMUPAG+MUX=0		 
SWMMU	DATA	0	FLAG TO INDIC.USER BUFFER MVD/NOT MVD
	XIF
TESTCF	DATA	0	INPUT BUFFER FLAG 
FIELD1	DATA	0	ADDRESS + C-FIELD RECEPTION 
WRDWT	DATA	0	WRITING DWT
	RES	15	STACK FOR INPUT PROCESS 
STBIN	RES	1	INPUT STACK POINTER 
	RES	15	STACK FOR OUTPUT PROCESS
STBUT	RES	1	OUTPUT STACK POINTER
* 
* 
*     PROCEDURE COUNTERS
* 
* 
CPCNT	DATA	0	CHECK POINT
VSCNT	DATA	0	SEND STATE VARIABLE
VRCNT	DATA	0	RECEIVE STATE VARIABLE 
NSCNT	DATA	0	SEND COUNTER 
NRCNT	DATA	0	RECEIVE COUNTER
LNRCNT	DATA	0	LAST ACCEPTED N(R)
	EJECT
* 
* 
*    PROCEDURE EQUATES
* 
* 
*   COMMANDS
* 
SNRM	EQU	/93	SET NORMAL RESPONSE DCMODE 
DISC	EQU	/53	SET DISCONNECT DCMODE
* 
*   MASKS ON RECEIVED FRAMES
* 
RRMSK	EQU	1	RECEIVE READY 
RNRMSK	EQU	5	RECEIVE NOT READY
REJMSK	EQU	9	REJECT COMMAND 
* 
*	RESPONSES 
* 
RNR	EQU	/15	RECEIVE NOT READY 
UA	EQU	/73	NON SEQUENCED ACK
DM	EQU	/1F	DISCONNECT DCMODE
RR	EQU	/11	READY TO RECEIVE 
FRMR	EQU	/97	FRAME REJECT 
REJ	EQU	/19	FRAME REJECTION 
	EJECT
* 
*	HDLC FRAME FORMAT:
* 
* 
*	*************************//*********************************
*	*   *   *   *                         *       *       *    *
*	* F * A * C *            I            * FCS-1 * FCS-2 * F  *
*	*   *   *   *                         *       *       *    *
*	*************************//*********************************
* 
*	F = OPENING AND CLOSING FLAGS (01111110)
* 
*	A = ADDRESS FIELD, 8 BITS, APPLICATION DEPENDENT
* 
*	C = CONTROL FIELD:
*		BIT       1   2   3   4    5    6   7   8
*		        I   I   I   I   I     I   I   I   I
*		I-FRAME I 0 I  N(S)     I P/F I   N(R)    I
*		S-FRAME I 1 I 0 I S I S I P/F I   N(R)    I
*		U-FRAME I 1 I 1 I M I M I P/F I M I M I M I
* 
*		I-FRAME = INFORMATION FRAME
* 
*		I = INFORMATION FRAME
*		S = SUPERVISORY FRAME
*		U = UNNUMBERED FRAME 
*		N(S) = SEND SEQUENCE NUMBER
*		N(R) = RECEIVE SEQUENCE NUMBER 
*		P/F = POLL/FINAL BIT 
* 
*		S = SUPERVISORY BITS:
*		   BIT 3 4 
*		       0 0 = RR = RECEIVE READY
*		       0 1 = REJ = REJECT
*		       1 0 = RNR = RECEIVE NOT READY 
* 
*		M = MODIFIER BITS:   (C - COMMAND, R = RESPONSE) 
*		   BIT 3 4 - 6 7 8 
*		       0 0   0 0 1 = SNRM = SET NORMAL RESPONSE DCMODE (C) 
*		       1 1   0 0 0 = DM = DISCONNECT DCMODE (R)
*		       0 0   0 1 0 = DISC = DISCONNECT (C) 
*		       0 0   1 1 0 = UA = UNNUMBERED ACKNOWLEDGE (R) 
*		       1 0   0 0 1 = FRMR = FRAME REJECT (R) ) 
* 
*		BITS GIVEN IN ORDER OF TRANSMISSION; IN MEMORY BIT 8 IS FIRST
* 
*	FCS = FRAME CHECK SEQUENCE (CCITT CRC-16) 
* 
	EJECT
**********************************************************************
* 
*	DTE CONTROL TABLE - DCT 
*		SUBSTITUTES DRIVER DWT FOR SINGLE-LINE DRIVER
* 
**********************************************************************
* 
DTE	EQU	* 
DTESTB	EQU	DTE+DWTSTB	REQUIRED STATISTICS BUFFER OFFSET ADDRESS 
DCREQS	DATA	0	REQUEST STATE:
*			   0 = INACTIVE (CLOSED)
*			   1 = ACTIVE (OPEN)
*			   2 = CONNECTED
DCHDLS	DATA	0	HDLC PROCEDURE STATE: 
*			   0 = OFF
*			   1 = NDM
*			   2 = NRM
DCCUS	DATA	0	CONTROL UNIT STATE:
*			   0 = DISCONNECTED 
*			   1 = CONNECTED
DCMODE	DATA	OFF	DCMODE - CONTAINS BRANCH ADDRESS
* 
	RORG	DTESTB	REQUIRED POSITION; MAKE DAMN SURE
*			 THERE'S NO OVERLAY!!!
DCSTB	DATA	STWSID-DTE	RELATIVE OFFSET TO STATISTICS BUFFER
DCDWH	DATA	0	DUMMY BACKWARD LINK TO HEAD 'DWT'
DCDWA	DATA	0	DWT CHAIN ANCHOR 
DCDTE	DATA	0	SYMBOLIC DTE ADDRESS 
DCCON	DATA	0	CONNECTION-IN-PROGRESS INDICATOR 
	EJECT
DCWRQ	DATA	0	WRITE REQUEST QUEUE
DCIPA	DATA	RBUFP	RCV BFR QUEUE ANCHOR 
DCIPC	DATA	0	QUEUED RECEIVED I-FRAMES WHEN NO SUBADDRESSING 
DCTCA	DATA	0	LINE ADDRESS 
DCSTA	DATA	0	ACTIVE SUBTERMINAL ADDRESS 
DCLCNT	DATA	0	LOOP COUNTER
* 
*	STATISTICS BUFFER 
* 
STWSID	DATA	0	RESERVED FOR SYMBOLIC ID
STWCST	DATA	0	COUNTER STATUS INDEX
STWMIX	DATA	/20	COUNTER STATUS INDEX
STWCTA	RES	/20	BUFFER 
	EJECT
* 
*	COUNTER INDECES - PARAMETER-1 EQUATES 
* 
*	REQUEST LEVEL COUNTERS: 
*                 01 TO /0D ARE NOT USED IN RELEASE 11
* 
CSRCON	EQU	/01	CONNECTIONS ESTABLISHED
CSRCBY	EQU	/02	CONNECTION NOT ESTABLISHED - BUSY
CSRMSR	EQU	/03	MESSAGES RECEIVED
CSRCHR	EQU	/C5	CHARACTERS RECEIVED
CSRMST	EQU	/06	MESSAGES TRANSMITTED 
CSRCHT	EQU	/C8	CHARACTERS TRANSMITTED 
CSRTOP	EQU	/09	TIMEOUT
CSRABT	EQU	/0A	ABORTED
CSRERR	EQU	/0B	ERROR
CSRTRE	EQU	/0C	TRANSMISSION ERROR 
CSRXC1	EQU	/0D	PROTOCOL DEPENDENT 
* 
*	LINK LEVEL COUNTERS 
	 
CSBRIF	EQU	/10	BITOR I-FRAMES RECEIVED
CSBRBY	EQU	/11	  "   I-FRAMES REJECTED BUFFER BUSY
CSBRBO	EQU	/12	  "   I-FRAMES REJECTED BUFFER OVERFLOW
CSBRAB	EQU	/13	  "   I-FRAMES REJECTED ABORTED
CSBRPE	EQU	/14	  "   I-FRAMES REJECTED FCS ERROR
CSBTIF	EQU	/15	  "   I-FRAMES TRANSMITTED 
CSBTRT	EQU	/16	  "   I-FRAMES RETRANSMITTED 
CSBRSM	EQU	/17	  "   SNRM/SARM/SABM RECEIVED
CSBRDI	EQU	/18	  "   DISC RECEIVED
CSBRDM	EQU	/19	  "   DM RECEIVED
CSBRFR	EQU	/1A	  "   FRMR RECEIVED
CSBRUA	EQU	/1B	  "   UA RECEIVED
CSBRRJ	EQU	/1C	  "   REJ RECEIVED 
CSBRNR	EQU	/1D	  "   RNR RECEIVED 
CSBTSM	EQU	/1E	  "   SNRM/SARM/SABM TRANSMITTED 
CSBTDI	EQU	/1F	  "   DISC TRANSMITTED 
CSBTDM	EQU	/20	  "   DM TRANSMITTED 
CSBTFR	EQU	/21	  "   FRMR TRANSMITTED 
CSBTUA	EQU	/22	  "   UA TRANSMITTED 
CSBTRJ	EQU	/07	  "   REJ TRANSMITTED
CSBTNR	EQU	/24	  "   RNR TRANSMITTED
CSBXC1	EQU	/25	  "   PROTOCOL DEPENDENT 
CSBXC2	EQU	/26	  "       "        " 
CSBXC3	EQU	/27	  "       "        " 
	 
	 
*	DTE/DCE LEVEL COUNTERS
	 
CSCDTE	EQU	/28	DTE NOT OPERABLE 
CSCDIT	EQU	/29	I/P THROUGHPUT ERROR 
CSCDOT	EQU	/2A	O/P THROUGHPUT ERROR 
CSCDCE	EQU	/2B	DCE NOT OPERABLE 
CSCXC1	EQU	/2C	CONTROL UNIT DEPENDENT 
CSCXC2	EQU	/2D	    "
CSCXC3	EQU	/2E	    "
* 
*	EXTENDED STATUS BUFFER
* 
DCXSTB	RES	0
DCXSTL	EQU	0	LENGTH IN BYTES OF EXTENDED STATUS BUFFER
	EJECT
**********************************************************************
**********************************************************************
* 
* 
*	REQUEST HANDLER/APPLICATION INTERFACE 
* 
* 
**********************************************************************
**********************************************************************
* 
*	ACTIVATION FROM TERMINAL TASKS
* 
DCACT	EQU	* 
	LDKL	A5,STBIN	INPUT STACK BASE 
	LDR	A2,A7	ORDER CODE AS PARAMETER
	ANK	A2,/FF	STRIP OFF OPTION BITS 
	CF	A15,LOOKUP	BRANCH ON CODES, TABLE ADDRESS TO STACK
	DATA	TREQX,RQERR	LAST ENTRY; ERROR ADDRESS 
	DATA	READO,RQRD	READ REQUEST 
	DATA	WRITEO,RQWR	WRITE REQUEST 
	DATA	OPEN,RQOPEN	OPEN REQUEST
	DATA	CLOSE,RQCLOS	CLOSE REQUEST
	DATA	CONPAS,RQCON	CONNECT PASSIVE REQUEST
	DATA	DISCO,RQDIS	DISCONNECT REQUEST
	DATA	RSTAT,RQRSTS	READ STATUS REQUEST
	DATA	STIMOT,RQTIME	SET REQUEST TIMEOUT 
TREQX	DATA	STATIS,RQSTAT	READ/RESET STATISTICS REQUEST
	EJECT

************************************************************
* 
*    ABORT ROUTINE
* 
************************

ABORT	LD	A1,DWTRTP,A6	TIMER POINTER 
	RF(Z)	AB:10	NO TIMER RUNNING 
	CM*	DWTRTP,A6	KILL TIMER 
	CM	DWTRTP,A6 

AB:10	LD	A2,DWTOR,A6	ORDER CODE 
	CF	A15,LOOKUP	BRANCH ON ACTIVE ORDER CODE
	DATA	ABEND,AB:RTN
ABEND	DATA	WRITEO,AB:20	ACT ON WRITE ONLY 
AB:20	EQU	* 

	CF	A15,REMOVW	REMOVE DWT FROM WRITE QUEUE
	LD	A2,WRDWT	WRITING DWT ADDRESS
	CWR	A2,A6
	RF(NE)	AB:RTN	NOT THIS DWT 
	CM	WRDWT	RESET WRITING DWT 

	EJECT
AB:RTN	EQU	*
	LDKL	A1,RCABRT	LOAD RETURN CODE
	CF	A15,TENDIO
	ABL	TDISP
	EJECT
* 
* 
*	OPEN REQUEST
* 
*	ACTIVATION PARAMETERS:
*		SYMBOLIC DTE-ADDRESS (ECBCW2, LEFT BYTE, ASCII)
* 
*	FUNCTIONS:
*		1. CHECK IF ALREADY OPEN & IF SO SAME DTE-ADDRESS
*		2. CONVERT & VERIFY DTE ADDRESS
*		3. CONNECT MODEM 
*		4. CHANGE PROTOCOL TO NDM STATE
* 
*	COMPLETION PARAMETERS:
*		RETURN CODE (A1) 
* 
RQOPEN	EQU	*
	LDK	A1,0	PRESET RC 
	LD	A2,DCREQS	GET REQUEST STATE 
	RF(Z)	RQOP20	DTE INACTIVE
RQOP10	EQU	*
	LD	A2,ECBCW2,A8	GET SYMBOLIC DTE-ADDRESS 
	CW	A2,DCDTE	SAME AS THE ONE WHO OPENED ? 
	ABL(E)	RQRTN5	YES OK 
	LDKL	A1,RCSEQ	RC: SEQUENCE ERROR 
	ABL	RQRTN5	COMPLETE
* 
RQOP20	EQU	*
	LDKL	A2,DCTCA	LOAD POINTER FOR SNA 
	LD	A1,ECBCW2,A8	GET SYMBOLIC DTE ADDRESS 
	CF	A15,GETDNA	GET LINK ADDRESS 
	LDR	A1,A1	SET CONDITION REGISTER 
	RF(NN)	RQOP21	OK 
	LDKL	A1,RCREQ	RC:REQUEST ERROR 
	ABL	RQRTN5	EXIT
RQOP21	EQU	*
	LD	A1,ECBCW2,A8	GET SYMB ADDR
	ST	A1,DCDTE	SAVE IT
	ST	A6,WRDWT	SAVE OPEN DWT	=2 
	CF	A5,CUOPEN	CONNECT MODEM 
	CM	WRDWT	RESTORE	=2
	RF(Z)	RQOP81	DCE DOWN
	RF(N)	RQOP81	DTE DOWN
	EJECT
* 
RQOP80	EQU	*
	LDK	A1,1 
	ORS	A1,DCREQS	SET ACTIVE STATE 
	LDKL	A2,TONDMX	INITIATE NDM W/O SENDING UA 
	ST	A2,DCMODE	* 
	LDK	A1,0 
	CF	A15,CKMES	PENDING MESSAGES ?
	CF	A15,TENDIO	COMPLETE REQUEST 
	CF	A15,SPTIM	START POLL-TIMER
	ABI	DCMODE	ENTER RECEIVE MODE
RQOP81	EQU	*
	LDKL	A1,RCPHYC	RC:PHYSICAL CONNECTION ERROR
	ABL	RQRTN5 
	EJECT
* 
*	CLOSE REQUEST 
* 
*	ACTIVATION PARAMETERS:
*		OPTION (LEFT BYTE OF A7) /80 = UNCONDITIONAL 
*		                         /00 = CONDITIONAL CLOSE 
*	FUNCTIONS:
*		1. IF CONDITIONAL, CHECK IF ANY LOGICAL CONNECTIONS (DWTS) ARE ACTIVE
*		   ACTIVE. 
*		2. DISCONNECT MODEM
*		3. CHANGE PROTOCOL TO OFF STATE
* 
*	COMPLETION PARAMETERS:
*		RETURN CODE (A1) 
* 
RQCLOS	EQU	*
	LDK	A1,0	PRESET RC 
	LD	A2,ECBCW2,A8	GET DTE
	CW	A2,DCDTE	SAME AS THE ONE WHO OPENED ? 
	RF(NE)	RQCL20	NO,ERROR 
	LD	A2,DCREQS	GET CURRENT REQUEST STATE 
	ABL(Z)	RQRTN5	ALREADY CLOSED 
* 
	LDR	A7,A7	CHECK OPTION 
	RF(N)	RQCL30	SKIP OVER IF UNCONDITIONAL
	LD	A2,DCDWA	CONDITIONAL - GET ANCHOR OF CONNECTED DWT'S
	RF(NZ)	RQCL20	IMPOSSIBLE,DWT'S STILL ACTIVE	=2 
	IFT	MESPAS=1 
	LD	A2,DTEDDT	DISCARD DWT CONNECTED ?	=2
	XIF
	RF(Z)	RQCL51	NONE CONNECTED
* 
RQCL20	EQU	*
	ORKL	A1,RCSEQ	RC: SEQUENCE ERROR 
	ABL	RQRTN5	COMPLETE
* 
RQCL30	EQU	*
	ST	A6,DCDTE	SAVE THAT DWT
DEB	EQU	* 
	LD	A6,DCDWA	GET QUEUE ANCHOR 
	RF(NZ)	DEB1	.SOME IN QUEUE	=2
	IFT	MESPAS=1 
	LD	A6,DTEDDT	DISCARD DWT /	=2
	RF(Z)	RQCL50	NO	=2 
	CM	DTEDDT	YES,DISCARD IT	=2
	XIF
DEB1	EQU	*
	CM	DWTSUB,A6	CLEAR SUB ADDRESS 
	LD	A1,DWTIPC,A6	GET BUFFER QUEUE 
	RF(Z)	OKSLUT	NO BUFFERS IN QUEUE 
	CF	A15,RELBFX	RELEASE BUFFERS
	CM	DWTIPC,A6	CLEAR BUFFER'S QUEUE
OKSLUT	LDK	A1,0	PRESET RETURN CODE
	LD	A2,DWTST,A6	GET DWT STATUS
	RF(N)	OKSL1	NO ORDERS
	LD	A2,DWTOR,A6	GET ORDER 
	CWK	A2,CLOSE 
	RF(E)	OKSL2	OK CLOSE 
	LDK	A1,RCSEQ	ANY ORDERS
OKSL2	CF	A15,TENDIO	COMPLETE REQUEST
	CF	A15,CTIME	RESET TIMER 
	CF	A15,REMOVW	REMOVE FROM WRITE QUEUE
OKSL1	CF	A15,DCREMV	RELEASE FROM CONNECT QUEUE
	RB	DEB	OTHERS DWT
RELBFX	EQU	*
	LD	A2,DCIPA	GET QUEUE ANCHOR 
	RF(NZ)	RELBXX	NOT FIRST IN QUEUE 
	ST	A1,DCIPA	ATTACH BUFFER IN QUEUE 
	RF	RELBZZ	EXIT 
RELBXX	EQU	*
	LDR*	A3,A2	GET NEXT
	RF(Z)	RELBYY	LAST
	LDR*	A2,A2	NOT LAST,GO ON
	RB	RELBXX
RELBYY	STR	A1,A2	ATTACH IN CHAIN
RELBZZ	RTN	A15	RETURN 
	EJECT
RQCL50	EQU	*
	LD	A6,DCDTE
RQCL51	EQU	*
	CM	DCDTE	CLEAR ACTIVE DTE
	LD	A1,DCIPC	GET DTE QUEUE ANCHOR 
	RF(Z)	RQCL52	NO BUFFERS
	CF	A15,RELBFX	RELEASE BUFFERS
	CM	DCIPC	CLEAR QUEUE 
RQCL52	EQU	*
	ST	A6,WRDWT	SAVE CLOSE DWT	=2
	CF	A5,CUCLOS	DISCONNECT MODEM
	CM	WRDWT	RESTORE	=2
	LDKL	A2,OFF	*  CHANGE PROCEDURE STATE TO OFF 
	ST	A2,DCMODE	* 
* 
	CM	DCREQS	REQUEST STATE = INACTIVE/CLOSED
	CM	DCHDLS	HDLC STATE = OFF 
	LD	A2,DCTPGP	POLL TIMER POINTER
	RF(Z)	RQCL53	NO TIMER
	CM*	DCTPGP	CLEAR TIMER 
	CM	DCTPGP	CLEAR TIMER POINTER
RQCL53	EQU	*
	LDK	A1,0	PRESET RETURN CODE
	ABL	RQRTN5	COMPLETE
	EJECT
* 
*	CONNECT PASSIVE REQUEST 
* 
*	ACTIVATION PARAMETERS:
*		- SYMBOLIC SUBADDRESS (LEFTMOST BYTE IN ECBBA-BFR) 
*		- LENGTH OF BUFFER (ECBRL) 
*		- SYMBOLIC DTE-ADDRESS (ECBCW2)
* 
*	FUNCTIONS:
*		1. CHECK IF LINK IS ACTIVE 
*		2. VERIFY DTE-ADDRESS AS PER OPEN REQUEST
*		3. VERIFY & CONVERT SUBTERMINAL ADDRESS
*		4. LINK CALLING DWT TO QUEUE 
*		5. CHANGE HDLC STATE TO NDM & WAIT FOR NRM 
* 
*	COMPLETION PARAMETERS:
*		RETURN CODE (A1) 
* 
RQCON	EQU	* 
	LD	A1,DCDTE	GET DTE OF OPEN REQUEST
	CW	A1,ECBCW2,A8	COMPARE W/ DTE OF CONNECT REQUEST
	RF(E)	RQCN20	YES 
* 
RQCN15	EQU	*
	LDKL	A1,RCREQ	RC: REQUEST ERROR
	ABL	RQRTN5	COMPLETE
	EJECT
RQCN20	EQU	*
	LD	A2,DCCUS	GET CONTROL UNIT STATE 
	RF(NZ)	RQCN30	OK 
	LDKL	A1,RCPHYC	RC: PHYSICAL CONNECTION ERROR 
	ABL	RQRTN5	COMPLETE
* 
RQCN30	EQU	*
	IFT	SUB=0
	LDKL	A2,/FFFF	AS CONNECTED 
	RF	RQCN31	SKIP ADDRESSING
	XIF
	IFT	MESPAS=1 
	LD	A2,DWTOR,A6	.	=2
	ANKL	A2,/FF00	ISOLATE OPTION	=2
	CWK	A2,/4000	DISCARD DWT ?	=2
	RF(NZ)	RQCNXX	NO	=2
	ST	A6,DTEDDT	YES,SAVE IT	=2
	RF	RQCNYY	.	=2 
RQCNXX	EQU	*	.	=2 
	XIF
	IFF	MMUPAG=0 
	LD	A1,ECBBA,A8	USER BUFFER ADDRESS 
	LDKL	A2,DCSTA	MOVE DESTINATION 
	LDK	A3,2	NUMBER OF CHARS. TO MOVE
	LD	A5,DWTTAB,A6	TTAB ADDRESS OF USER TASK
	CF	A15,MOVUS	GET FIRST 2 BYTES OF USER BUFFER
	SUR	A1,A1	RE-CLEAR 
	LD	A2,DCSTA	GET SUBTERMINAL ADDRESS FROM SYSTEM 'BUFFER' 
	XIF
	IFT	MMUPAG=0 
	LD	A2,ECBBA,A8	GET SUBTERMINAL ADDRESS	=2
	LC	A2,1,A2	TAKE CARE ODD,EVEN	=2 
	ANK	A2,/FF	SIGNIFICANT BITS
	XIF
	LD	A1,DCDTE	RESTORE SYMBOLIC DTE 
	CF	A15,GETSNA	GET PHYS SUB ADDRESS 
	LDR	A1,A1	SET RETURN CODE
	RB(N)	RQCN15	INVALID SUBTERMINAL ADDRESS 
RQCN31	EQU	*
	ST	A2,DWTSUB,A6	SAVE SYMB ADDRESS
	CF	A15,DCLINK	LINK DWT TO CHAIN	=2 
RQCNYY	EQU	*
	LDK	A2,2	* 
	ORS	A2,DCREQS	REQUEORS ORSATE = CONNECTED
	LDK	A1,DWT:C	.	=1
	ORS	A1,DWTST,A6	SET CONNECTED DWT	=1 
	LDK	A1,0	PRESET RETURN CODE
	ABL	RQRTN5 
	EJECT
* 
*	DISCONNECT REQUEST
* 
*	ACTIVATION PARAMETERS:
*		DWT-ADDRESS (A6) 
* 
*	FUNCTIONS:
*		1. CHECK IF IN CONNECTED STATE 
*		2. TEST IF DWT IS IN CONFIGURATION CHAIN 
*		3. DROP DWT-ADDRESS FROM CONFIGURATION CHAIN 
*		4. SET REQUEST STATE TO ACTIVE (NOT CONNECTED) 
*		   IF NO DWTS LEFT IN CHAIN. 
*		5. CHECK PHYSICAL CONNECTION STATE 
* 
*	COMPLETION PARAMETERS:
*		RETURN CODE (A1) 
* 
RQDIS	EQU	* 
	LD	A2,DCREQS	GET REQUEST STATE 
	CWK	A2,3	IS IT CONNECTED ? 
	RF(E)	RQDS20	YES 
* 
RQDS10	EQU	*
	LDKL	A1,RCSEQ	RC: SEQUENCE ERROR 
	ABL	RQRTN5	COMPLETE
RQDS20	EQU	*
	LD	A2,DWTST,A6	GET DWT STATUS	=1 
	ANK	A2,DWT:C	CONNECTED ?	=1
	RB(Z)	RQDS10	NO	=1 
	LDK	A2,DWT:C	.	=1
	XRS	A2,DWTST,A6	RESET CONNECT	=1 
	IFT	MESPAS=1 
	LD	A2,DTEDDT	DISCARD DWT ?	=2
	RF(Z)	RQDS21	NO	=2 
	CWR	A2,A6	YES,THAT ONE?	=2 
	RF(NE)	RQDS21	NO	=2
	CM	DTEDDT	YES,DISCARD ROOT	=2
	LD	A2,DCDWA	MORE IN QUEUE ?	=2 
	RF(NZ)	RQDS30	YES	=2 
	RF	RQDS22	NO,INIT DM MODE	=2 
RQDS21	EQU	*	.	=2 
	XIF
	CF	A15,DCREMV	REMOVE ACTIVE DWT FROM CONFIG. CHAIN 
	RB(N)	RQDS10	DWT DID NOT EXIST IN CHAIN
	RF(NZ)	RQDS30	CHAIN NOT EMPTY
	IFT	MESPAS=1 
	LD	A2,DTEDDT	DISCARD DWT ?	=2
	RF(NZ)	RQDS30	YES CHAIN NOT EMPTY	=2 
	XIF
RQDS22	EQU	*
	LDK	A2,1	* CHANGE REQUEST STATE TO ACTIVE/OPEN,
	ST	A2,DCREQS	* I.E. NONE CONNECTED.
	LDKL	A1,TONDMX 
	ST	A1,DCMODE	INIT DM 
	CM	FRMRMD	RESET FRMR INDICATOR 
	IM	AIGFIL	SET RETURN SWITCH
RQDS30	EQU	*
	CF	A15,CTIME	RESET RUNNING TIMER 
	CF	A15,REMOVW	RESET WRITE FROM QUEUE 
	LD	A1,DWTIPC,A6	GET BUFFER QUEUE 
	CF	A15,RELBFX	RELEASE IT 
	CM	DWTIPC,A6	CLEAR QUEUE ANCHOR
	CM	DWTSUB,A6	SAVE SYMB ADDRESS 
	LDK	A1,0	PRESET RETURN CODE
	CF	A15,TENDIO	COMPLETE DISCONNECT REQUEST
	LD	A1,AIGFIL	OTHER DWT STILL ACTIVE ?
	ABL(Z)	TDISP	YE
	CM	AIGFIL	CLEAR SWITCH 
	CIO	A1,0,CHLCIN	SET HW INACTIVE
	ABL(NA)	RQDS40	HW PROBLEMS 
	CF	A5,READ	GET INTERRUPT 
	ABI	DCMODE	NO,ENTER DISCONNECT MODE
RQDS40	EQU	*
	CM	DCCUS	HW OUT OF SERVICE 
	ABL	TDISP
	EJECT
* 
*	READ STATUS REQUEST 
* 
* 
*	ACTIVATION PARAMETERS:
*		EXTENDED STATUS BUFFER ADDRESS (ECBBA) 
*		LENGTH OF EXTENDED STAUS BUFFER (ECBRL)
* 
*	FUNCTIONS:
*		1. TRANSFER LOGICAL CONNECTION STATUS TO APPLICATION 
*		2. TRANSFER EXTENDED STATUS IF IMPLEMENTED 
* 
*	COMPLETION PARAMETERS:
*		LOGICAL CONNECTION STATUS (ECBCW1) 
*		LENGTH OF EXTENDED STATUS RETURNED (ECBEL) 
*		RETURN CODE (A1) 
* 
*      0......34......78......1112......15
*      . DWT   .  DTE  . REQ ST .  CU    .
*      . STATE . STATE .        . STATE  .
*      . 00XX  . 00XX  . 000X   . 000X   .
*      ...................................
* 
RQRSTS	EQU	*
	LD	A2,DCHDLS	HDLC STATE
	ANK	A2,2	PICK OUT NRM
	SLL	A2,3	BITS 8 TO 11,X=1 WHEN NRM 
	LD	A3,DCREQS	REQUEST STATE 
	ANK	A3,1	VALID BITS
	SLL	A3,9	BITS 4 T0 7,XX=10 WHEN DTE OPEN 
	ORR	A2,A3	MERGE W/ HDLC STATE
	LD	A3,DCCUS	GET CONTROL UNIT STATE 
	ANK	A3,1	VALID BIT 15,X=1 WHEN HW OK 
	ORR	A2,A3	MERGE W/ THE REST
	LD	A1,DWTST,A6	GET STATUS	=2 
	ANK	A1,DWT:C	DWT CONNECTED ?	=2
	RF(Z)	RQRST1	NO
	LDKL	A1,/2000	YES BITS 0 TO 3,XX=10 WHEN DWT CONNECTED 
	ORR	A2,A1	MERGE WITH STATUS
RQRST1	EQU	*
	ST	A2,ECBCW1,A8	TO ECB 
	LD	A2,ECBBA,A8	GET EXTENDED STATUS BUFFER ADDRESS
	RF(Z)	RQRS80	NO BUFFER = NO STATUS 
	LDKL	A1,DCXSTB	DRIVER STATUS BUFFER
	LDKL	A3,DCXSTL	BUFFER LENGTH 
	LD	A4,DWTTAB,A6	TTAB 
	CF	A15,MOVSU	MOVE TO USER AREA 
	LDK	A1,0	RESET RC
* 
RQRS80	EQU	*
	ABL	RQRTN	COMPLETE 
	EJECT
* 
*	READ/RESET STATISTICS REQUEST 
* 
*	ACTIVATION PARAMETERS:
*		TYPE = BITS 0-7 OF ECBCW1
*		ECB-ADDRESS (A8) 
*		DWT-ADDRESS OF LOW-LEVEL DWT (A6)
* 
*	FUNCTIONS:
*		1. READ STATISTICS TO USER AREA
*		2. RESET ALL STATISTICS BUFFERS
* 
*	COMPLETION PARAMETERS:
*		NUMBER OF BYTES TRANSFERRED (ECBEL)
*		RETURN CODE (A1) 
* 
RQSTAT	EQU	*
	IFT	STAT=0 
	LDK	A1,0	RESET R.C 
	ORKL	A1,RCREQ	RC: REQUEST ERROR, NO STATISTICS INCLUDED
	ABL	RQRTN5	COMPLETE
	XIF
	IFF	STAT=0 
	LD	A1,ECBCW1,A8	GET TYPE 
	SRL	A1,8	TYPE FIELD TO LEFT BYTE 
	CWK	A1,TYPRR	CORRECT TYPE? 
	RF(NE)	RQST20	NOPE 
	CF	A15,DCSRED	READ STATISTICS
	LDR	A1,A1	OK?
	RF(Z)	RQST30	YES 
* 
RQST20	EQU	*
	LDKL	A1,RCREQ	RC: REQUEST ERROR
	ABL	RQRTN5	COMPLETE
* 
RQST30	EQU	*
	CF	A15,DCSRLL	RESET ALL STATISTICS BUFFERS 
	LDR	A1,A1	LUCKY AGAIN? 
	RB(NZ)	RQST20	NO 
	ABL	RQRTN5	COMPLETE
	XIF
	EJECT
* 
*	SET REQUEST TIMEOUT 
* 
*	ACTIVATION PARAMETERS:
*		ECBCW1 >= 0 : ACTIVATE TIMING CONTROL
*		              TIMEOUT VALUE IN MULTIPLES OF 100 MS;
*		              0 = IMMEDIATE TIMEOUT. 
*		       < 0:   DE-ACTIVATE TIMING CONTROL 
* 
*	FUNCTIONS:
*		STORE VALUE DIRECTLY IN CALLER'S DWT 
* 
*	COMPLETION PARAMETERS:
*		DWTRTV = TIMEOUT VALUE = ECBCW1
*		RETURN CODE (A1) 
* 
RQTIME	EQU	*
	LD	A2,ECBCW1,A8	GET TIMEOUT VALUE FROM ECB 
	ST	A2,DWTRTV,A6	STORE IN DWT 
	LDK	A1,0	PRESET RETURN CODE
	ABL	RQRTN5	COMPLETE - NEED A REST AFTER THIS 
	EJECT
* 
*	WRITE REQUEST 
* 
*	ACTIVATION PARAMETERS:
*		BUFFER ADDRESS (ECBBA) 
*		BUFFER LENGTH (ECBRL)
*		SUBTERMINAL ADDRESS (DWT)
* 
*	FUNCTIONS:
*		1. VERIFY THAT LOGICAL & PHYSICAL CONNECTIONS EXIST. 
*		2. VERIFY BUFFER SIZE IF MMU AND/OR IOP. 
*		3. QUEUE REQUESTING DWT FOR HDLC PROCEDURE.
*		4. COMPLETE WHEN ACK'D OR TIMEOUT. 
* 
*	COMPLETION PARAMETERS:
*		RETURN CODE (A1) 
* 
RQWR	EQU	*
	IFF	MMUPAG+MUX=0	
	LD	A2,ECBRL,A8	REQUESTED LENGTH
	CWK	A2,BUFLEN	WILL IT FIT IN MMU-BUFFER? 
	RF(NG)	RQWR10	YES - OK 
	LDKL	A1,RCLGTH	RC: ILLEGAL LENGTH
	ABL	RQRTN	COMPLETE 
* 
RQWR10	EQU	*
	XIF
	LD	A1,DCCUS	CONTROL UNIT STATE 
	RF(NZ)	RQWR20	CONNECTED
	LDKL	A1,RCPHYC	RC:PHYSICAL CONNECTION ERROR
	ABL	RQRTN
* 
RQWR20	EQU	*
	LD	A2,DCREQS	IN REQUEST STATE = CONNECTED? 
	CWK	A2,3	* 
	RF(E)	RQWR30	YES - OK
RQWR21	EQU	*
	LDKL	A1,RCLOGC	RC: LOGICAL CONNECTION ERROR
	ABL	RQRTN	COMPLETE 
* 
RQWR30	EQU	*
	LD	A2,DWTST,A6	GET DWT STATUS	=1 
	ANK	A2,DWT:C	CONNECTED ?	=1
	RB(Z)	RQWR21	NO	=1 
	IFT	MESPAS=1 
	CW	A6,DTEDDT	DISCARD DWT ?	=2
	RB(E)	RQWR21	YES NO WRITE ALLOWED	=2 
	XIF
	IFT	SUB=1
	LD	A2,DWTSUB,A6	GET SYMB ADDRESS 
	ABL(Z)	RQDS10	NOT PRESENT
	XIF
	CF	A15,TIMEWR	SET TIMER
	CF	A15,INSWQ 	QUEUE REQUEST
	ABL	TDISP	WAIT 
	EJECT
* 
*	READ REQUEST
* 
*	ACTIVATION PARAMETERS:
*		BUFFER ADDRESS (ECBBA) 
*		REQUESTED BUFFER LENGTH IN CHARS. (ECBRL)
*		SUBTERMINAL ADDRESS (DWT)
* 
*	FUNCTIONS:
*		1. VERIFY THAT LOGICAL & PHYSICAL CONNECTIONS EXIST. 
*		2. TRANSFER TO THE APPLICATION ANY MESSAGE QUEUED FOR THE DWT, 
*		   INCLUDING THE MASTER DWT. 
*		3. COMPLETE WHEN TRANSFER PERFORMED OR NO MESSAGE RECEIVED 
*		   WITHIN TIMEOUT PERIOD.
* 
*	COMPLETION PARAMETERS:
*		ACTUAL LENGTH OF RECEIVED MESSAGE (ECBEL)
*		RETURN CODE (A1) 
* 
RQRD	EQU	*
	LD	A1,DCCUS	CONTROL UNIT STATE 
	RF(NZ)	RQRD10	CONNECTED
	LDKL	A1,RCPHYC	RC: PHYSICAL CONNECTION ERROR 
	ABL	RQRTN	COMPLETE 
* 
RQRD10	EQU	*
	IFT	SUB=1
	LD	A1,DWTIPC,A6	GET BUFFER QUEUE 
	XIF
	IFT	SUB=0
	LD	A1,DCIPC	GET BUFFER QUEUE 
	XIF
	RF(NZ)	RQRD20	NOT EMPTY
	LD	A1,DCREQS	CONNECTED ? 
	CWK	A1,3 
	ABL(NE)	RQWR21	NO
	LD	A1,DWTST,A6	GET DWT STATUS	=1 
	ANK	A1,DWT:C	CONNECTED ?	=1
	RB(Z)	RQWR21	NO
	IFT	MESPAS=1 
	CW	A6,DTEDDT	DISCARD DWT ?	=2
	RF(E)	RQRD11	YES,NO ADDRESSING	=2
	XIF
	IFT	SUB=1
	LD	A2,DWTSUB,A6	GET SYMB ADDRESS 
	ABL(Z)	RQDS10	NOT PRESENT
	XIF
RQRD11	EQU	*
	CF	A15,TIMERE	START TIMER
	ABL	TDISP	WAIT 
* 
*	BUFFER WAITING IN QUEUE 
* 
RQRD20	EQU	*
	LDR*	A2,A1	GET NEXT ONE
	IFT	SUB=1
	ST	A2,DWTIPC,A6	STORE AS FIRST IN QUEUE
	XIF
	IFT	SUB=0
	ST	A2,DCIPC	STORE AS FIRST IN QUEUE
	XIF
	LDR	A4,A1	SAVE BUFFER ADDRESS
	LD	A2,RCVEL,A1	GET LENGTH
	IFT	SUB=1
	SUK	A2,1	UPDATE LENGTH FOR STA 
	XIF
	ST	A2,ECBEL,A8	STORE IN ECB
	IFT	SUB=0
	ADK	A1,RCVHDR	ADJUST ADDRESS 
	XIF
	IFT	SUB=1
	ADK	A1,RCVHDR+1	ADJUST ADDRESS - DON'T TRANSFER STA
	XIF
	LD	A2,DCIPA	FREE CHAIN ANCHOR
	RF(NZ)	RQRD30	STILL BUFFERS FREE 
	ST	A4,DCIPA	THIS IS THE FIRST
	RF	RQRD40	HOP OVER 
	EJECT
RQRD30	EQU	*
	LDR*	A3,A2	GET NEXT BUFFER 
	RF(Z)	RQRD35	END OF CHAIN
	LDR*	A2,A2	GET NEXT
	RB	RQRD30	TEST IF END
* 
RQRD35	EQU	*
	STR	A4,A2	NEW LINK 
* 
RQRD40	EQU	*
	CMR	A4	LAST IN CHAIN 
	LD	A2,ECBBA,A8	USER BUFFER ADDRESS 
	LD	A3,ECBEL,A8	LENGTH
	LD	A4,DWTTAB,A6	TTAB ADDRESS 
	CF	A15,MOVSU	MOVE BUFFER TO USER 
	LD	A1,DWTRTP,A6	TIMER RUNNING? 
	RF(Z)	RQRD41	EQU	*	NO
	CM*	DWTRTP,A6	* STOP THE TIMER 
	CM	DWTRTP,A6	* 
RQRD41	EQU	*
	LDK	A1,0	PRESET RETURN CODE
	ABL	RQRTN	COMPLETE 
	EJECT
CKMES	EQU	* 
	IFT	SUB=1
	LD	A2,DWTIPC,A6	CHECK RECEIVE BFR CHAIN FOR THIS DWT 
	XIF
	IFT	SUB=0
	LD	A2,DCIPC	GET RECEIVE BUFFER CHAIN 
	XIF
	RF(Z)	CKMES1	NO BUFFERS WAITING
	ORKL	A1,RCDATA	RC: DATA AVAILABLE
CKMES1	EQU	*
	ADKL	A15,4 
	ABR*	A15	RETURN
RQRTN	EQU	* 
	CF	A15,CKMES 
* 
RQRTN5	EQU	*
	CF	A15,TENDIO	COMPLETE REQUEST 
	ABL	TDISP	GOTO DISPATCHER
* 
RQERR	EQU	*      REQUEST ERROR
	LDKL	A1,RCREQ	RC: REQUEST ERROR
	RB	RQRTN	COMPLETE
	EJECT
* 
*	REQUEST TIMER HANDLING PART 
* 
*	READ REQUEST TIMER
* 
TIMERE	EQU	*
	LDR	A1,A6
	LD	A2,DWTRTV,A6	GET TIMEOUT VALUE
	RF(N)	TIME10	NO TIMING 
	RF(Z)	TOUTXX	TIMER = 0 => IMMEDIATE TIMEOUT
	ST	A2,TIMERR 
	CF	A15,SETIME
	DATA	TOUTRE
TIMERR	DATA	0 
	ST	A4,DWTRTP,A6	STORE TIMER POINTER
	RF	TIME10
* 
*	TIMEOUT READ TIMER
* 
TOUTRE	EQU	*
	LDR	A6,A1	FETCH DWT
	CM	DWTRTP,A6 
* 
TOUTR1	EQU	*
	LDKL	A1,RCTIME 
	LD	A2,DCCUS	HW OK ?
	RF(NZ)	HWOK	YES
	ORK	A1,1	INDICATE HW FAIL
HWOK	EQU	*
	LD	A2,DCHDLS	LINK OK ? 
	ANK	A2,2 
	RF(NZ)	SWOK	YES
	ORK	A1,2	INDICATE SW FAIL UNDER LINK LEVEL 
SWOK	EQU	*
	ABL	RQRTN	INVESTIGATE FURTHER INFORMATION BEFORE RETURN
TOUTXX	EQU	*
	ADKL	A15,4	UPDATE STACK
	RB	TOUTR1	EXIT 
	EJECT
* 
*	WRITE REQUEST TIMER 
* 
TIMEWR	LDR	A1,A6
	LD	A2,DWTRTV,A6	GET TIMEOUT VALUE
	RF(N)	TIME10	NO TIMING 
	RB(Z)	TOUTXX	TIMER VALUE VALUE=0=>IMMEDIATE TIME OUT 
	ST	A2,TIMWR
	CF	A15,SETIME
	DATA	TOUTWR
TIMWR	DATA	0
	ST	A4,DWTRTP,A6
TIME10	EQU	*
	IFT	CPU852=1 
	ADKL	A15,4 
	ABR*	A15 
	XIF
	IFT	CPU852=0 
	RTN	A15
	XIF
	EJECT
* 
*	TIMEOUT WRITE TIMER 
* 
TOUTWR	EQU	*
	LDR	A6,A1	FETCH DWT
	CM	DWTRTP,A6 
 	LD	A2,DWTECB,A6 
	LD	A4,ECBBA,A2	FETCH BUFFER
	CF	A15,REMOVW	REMOVE FROM WRITE QUEUE
	ABL	TOUTR1	SET PROPER RETURN CODES 
	EJECT
* 
* 
*	STOP REQUEST TIMING 
* 
*	REMAINING TIME IS RETURNED IN A2
* 
* 
CTIME	EQU	* 
	LD	A2,DWTRTP,A6	GET TIMER POINTER
	RF(Z)	CTIM10	NOT RUNNING 
	LDR*	A2,A2 
	NGR	A2,A2	GET REMAINING TIME 
	CM*	DWTRTP,A6	STOP TIMER 
	CM	DWTRTP,A6 
CTIM10	EQU	*
	RTN	A15
	EJECT
RETURN	EQU	*
	IFT	CPU852=1 
	ADKL	A15,4 
	ABR*	A15 
	XIF
	IFT	CPU852=0 
	RTN	A15
	XIF
* 
	EJECT
* 
* 
*	INSERT DWT IN WRITE REQUEST QUEUE 
* 
*	A2,A3,A4 DESTROYED
*	A6=DWT
* 
INSWQ	LDKL	A2,DCWRQ	GET QUEUE ANCHOR
	LDK	A4,DWTOPN
INSWQ2	LDR*	A3,A2 
	RF(Z)	INSWQ3	END OF QUEUE FOUND
	LDR	A2,A3
	RB	INSWQ2
INSWQ3	ADR	A4,A6
	STR	A4,A2	INSERT IN QUEUE
	CMR	A4	INDICATE END OF QUEUE 
	RB	RETURN	RETURN 
* 
* 
*	REMOVE DWT FROM WRITE REQUEST QUEUE 
* 
*	A2,A3,A4 DESTROYED
*	A6=DWT
* 
REMOVW	LDKL	A2,DCWRQ	GET QUEUE ANCHOR 
	LDK	A4,DWTOPN	GET DC-LINK TO BE REMOVED
	ADR	A4,A6
REM10	LDR*	A3,A2
	RB(Z)	RETURN	NOT ON QUEUE: RETURN
	CWR	A3,A4
	RF(E)	REM15
	LDR	A2,A3	GET NEXT 
	RB	REM10 
REM15	LDR*	A3,A4	REMOVE 
	STR	A3,A2
	RB	RETURN	RETURN 
	EJECT
* 
* 
*	CHECK IF THERE IS A WRITE REQUEST TO BE COMPLETED 
* 
*	A1 CONTAINS RETURN CODE 
* 
* 
CWRITE	EQU	*
	LD	A8,DWTECB,A6	GET ECBADDRESS 
	LD	A2,DWTST,A6 
	RF(N)	CWR200	NO REQUEST
	LD	A2,DWTOR,A6	GET ORDER 
	CWK	A2,WRITEO	WRITE ORDER? 
	RF(NE)	CWR200	NO 
	CF	A15,CTIME	STOP REQUEST TIMING 
	CM	ECBCW,A8	CLEAR ?????????????????????????
	CF	A15,TENDIO	COMPLETE REQUEST 
CWR200	EQU	*
	CF	A15,REMOVW	REMOVE FROM WRITE QUEUE
	RTN	A5 
	EJECT
**********************************************************************
**********************************************************************
* 
* 
*	HDLC PROTOCOL PROCESSOR 
* 
* 
**********************************************************************
**********************************************************************
* 
*	OFF MODE (SYSTEM DEFINED STATE) 
* 
*	ACCEPT NO LINE ACTIVITY 
*	WAIT FOR OPEN REQUEST TO INITIATE DISCONNECTED MODE 
*	    ('TODISC' --> DCMODE) 
* 
**********************************************************************
* 
OFF	EQU	* 
	ABL	TDISP	*
* 
	EJECT
**********************************************************************
* 
*	CHANGE MODES
* 
**********************************************************************
* 
* 
*	CHANGE TO NORMAL RESPONSE DCMODE (NRM)
* 
TONRM	EQU	* 
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBRSM	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
	LDKL	A1,NRM	*
	ST	A1,DCMODE	* BRANCH ADDRESS FOR NRM STATE
	LDK	A1,2	* STATE = NRM 
	ST	A1,DCHDLS	* 
	CF	A15,RESCON	RESET PROCEDURE COUNTERS 
	CF	A15,RSRSPQ	RESET RESPONSE QUEUE 
	LDK	A1,UA	* SEND UA RESPONSE 
	CF	A15,QMTRM	* 
	ABI	DCMODE	GO TO NRM 
* 
*	CHANGE TO DISCONNECTED DCMODE (DM)
* 
TONDM	EQU	*    ENTRY W/ UA
	LDK	A1,UA	* SEND UA RESPONSE 
	CF	A15,QMTRM	* 
* 
TONDMX	EQU	*   ENTRY W/O SENDING UA 
	CF	A15,RESCON	REST PROCEDURE CUNTERS 
	CF	A15,RSRSPQ	RESET RESPONSE QUEUE 
	LDKL	A1,NDM	*
	ST	A1,DCMODE	SET DM BRANCH ADDRESS 
	LDK	A1,1 
	ST	A1,DCHDLS	SET DISCONNECT MODE 
	ABI	DCMODE	GO TO DM
	EJECT
**********************************************************************
* 
*	NORMAL DISCONNECTED MODE (NDM)
* 
*	ENTERED FROM OFF MODE WITH OPEN REQUEST OR FROM 
*	    NRM WITH DISC COMMAND 
* 
*	COMMANDS ACCEPTED: SNRM 
* 
**********************************************************************
* 
NDM	EQU	* 
	LDKL	A5,STBIN	RESET STACK BASE - INPUT 
	CF	A5,RDFRAM	GET A FRAME 
	ABL(N)	TDISP	INVALID DTE 
	ABI(NZ)	DCMODE	NO GOOD 
	LDK	A2,1	RESTORE DISC MODE 
	ST	A2,DCHDLS 
	LDR	A2,A1	COMMAND FIELD = PARAMETER
	CF	A15,LOOKUP	BRANCH ON TABLE
	DATA	DMEND,DM100	ILLEGAL COMMAND IN DM STATE 
DMEND	DATA	SNRM,CMDNRM	SNRM 
* 
DM100	EQU	* 
	LDK	A1,DM	SET DM DCMODE
	CF	A15,QMTRM	QUEUE FOR TRANSMISSION
	ABI	DCMODE	UNACCEPTED COMMAND
* 
*	SNRM-COMMAND TO BE ACCEPTED?
* 
CMDNRM	EQU	*
	LD	A2,DCREQS	GET CURRENT REQUEST STATE 
	CWK	A2,3	CONNECTED ALREADY?
	ABL(E)	TONRM	YES - ACCEPT NRM
	RB	DM100	NO - CAN'T ACCEPT IT
	EJECT
**********************************************************************
* 
*	NORMAL RESPONSE MODE - NRM
* 
**********************************************************************
* 
NRM	EQU	* 
	LDKL	A5,STBIN	RESET STACK BASE - INPUT 
	CF	A5,RDFRAM	READ A FRAME
	ABL(N)	TDISP	INVALID DTE 
	ABI(NZ)	DCMODE	NO GOOD 
	LDK	A2,2	RESTORE NRM MODE
	ST	A2,DCHDLS 
	LD	A2,FRMRMD	FRMR MODE ? 
	RF(Z)	NRM01	NO NRM MODE
	LDR	A2,A1	YES,ONLY ACCEPT SNRM 
	CWK	A2,SNRM
	ABL(NE)	NRM160	NO SNRM,RESEND FRMR 
	CM	FRMRMD	SNRM DETECTED,CLEAR FRMR MODE
NRM01	EQU	*	NRM,ACCEPT CONVENIENT FRAME 
	LDR	A2,A1	GET COMMAND FIELD
	ANK	A2,3	ISOLATE FRAME TYPE BITS 
	ST	A1,SAVPAM	SAVE PARAMETER
	ST	A4,BUFADD	SAVE BUFFER ADDRESS 
	CF	A15,LOOKUP	BRANCH ON FRAME TYPE 
	DATA	NRMEND,IFRM	I-FRAME 
	DATA	1,SFRM	S-FRAME
NRMEND	DATA	3,UFRM	U-FRAME
	EJECT
* 
*	U-FRAME RECEIVED
* 
*	COMMANDS ACCEPTED: DISC, SNRM 
* 
* 
UFRM	EQU	*
	LD	A2,SAVPAM 
	CF	A15,LOOKUP	BRANCH ON COMMAND
	DATA	UFRMTE,XFRMR	INVALID COMMAND
	DATA	DISC,TONDM	DISC 
UFRMTE	DATA	SNRM,TONRM	SNRM 
	EJECT
* 
* 
*	S-FRAME RECEIVED, DECODE
* 
*	  ACCEPTED COMMANDS: RR, RNR, REJ(IF UN2 OPTION INCLUDED) 
* 
SFRM	EQU	*
	LD	A1,SAVPAM	RESTORE PARAMETER 
	ANK	A1,/F	IGNORE COUNTERS
	LDR	A2,A1	GET C-FIELD
	CF	A15,LOOKUP	BRANCH ON S-FRAME TYPE 
	DATA	SFREND,XFRMR	INVALID (SREJ) 
	DATA	RNRMSK,SFRNR	RNR
	DATA	RRMSK,SFRR	RR 
SFREND	DATA	REJMSK,SFREJ	REJ
* 
*	RNR RECEIVED
* 
* 
SFRNR	EQU	* 
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBRNR	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
	CF	A5,UPDCON	UPDATE COUNTERS AND CHECK OUTPUT QUEUE
	CF	A5,TSTNR	CMDR ? 
	LC	A1,FIELD1+1	GET C-FIELD 
	ANK	A1,/10	CHECK POLL-BIT
	ABI(Z)	DCMODE	P-BIT OFF
	LDK	A1,RR	LOAD 'RR'
	LD	A2,DCIPA
	RF(NZ)	NRMTRA	OK READY TO RECEIVE
	LDK	A1,RNR	LOAD RNR
	RF	NRMTRA
	EJECT
* 
*	RR OR REJ RECEIVED
* 
SFRR	EQU	*
SFREJ	EQU	* 
	CF	A5,UPDCON	UPDATE COUNTERS AND CHECK OUTPUT QUEUE
	CF	A5,TSTNR	FRMR ? 
NRM145	EQU	*
	LC	A1,FIELD1+1	GET C-FIELD 
	ANK	A1,/10	CHECK POLL-BIT
	ABI(Z)	DCMODE	P-BIT OFF
	LDK	A1,0	INDICATE POLL-BIT RECEIVED
	RF	NRMTRA
	EJECT
* 
*	INVALID COMMAND - SEND FRMR 
* 
* 
XFRMR	EQU	* 
	LDK	A2,0	PRESENT CONTERS 
	LDK	A3,/80	FAIL CODE (FRMR DCMODE SETTING) 
	CF	A5,PRFRMR	INIT FRMR 
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBTFR	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
NRM160	EQU	*
	LDK	A1,1 
	ST	A1,FRMRMD	INIT FRMR MODE
	LDK	A1,FRMR	LOAD 'FRMR'



* 
*	QUEUE FOR TRANSMISSION
* 
NRMTRA	EQU	*
	CF	A15,QMTRM	QUEUE FOR TRANSMISSION
	ABI	DCMODE 
	EJECT
* 
* 
*	I-FRAME RECEIVED
* 
* 
IFRM	EQU	*
	LD	A4,BUFADD	RESTORE BUFFER ADDRESS
	LD	A1,BUFNUL 
	ABL(NZ)	BSYMDE	BUSY
	CF	A5,UPDCON	UPDATE COUNTERS 
	LD	A1,STATUS	CHECK UNEXPECTED N(S) 
	ANK	A1,1	N(S) OK?
	RF(NZ)	NRM400	NO 
	CF	A5,TSTNR	CHECK UNEXPECTED N(R)
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBRIF	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
	LC	A1,FIELD1+1 
	ANK	A1,/10	CHECK POLL BIT
	RF(Z)	NRM180	P-BIT OFF 
	LDK	A1,0	INDICATE POLL-BIT W/ I-FRAME
	CF	A15,QMTRM	QUEUE FOR TRANSMISSION
	EJECT
* 
*	I - FRAME O.K.
*	   LINK TO PROPER DWT IF PRESENT, ELSE DROP BUFFER
*	   A4 = A(BUFFER) 
* 
NRM180	EQU	*
	IFT	SUB=0
	RF	NRM186	.	=2 
	XIF
	IFT	SUB=1
	LD	A3,DCDWA	GET DWT ANCHOR 
	RF(Z)	TSMSP
	LC	A2,RCVHDR,A4	GET STA
	ANK	A2,/FF	SIGNIFICANT PORTION 
	LD	A1,DCDTE	GET SYMB DTE ADRESS
	CF	A15,GETSSA	GET SYMB STA ADDRESS 
	LDR	A1,A1	SET RETURN CODE
	ABI(N)	DCMODE	INCORRECT ADDRESS
* 
NRM185	EQU	*
	CW	A1,DWTSUB,A3	STA = THAT OF THIS DWT?
	RF(E)	NRM190	YES - ALLOCATE BUFFER 
	LD	A3,DWTCHN,A3	NEXT DWT IN CHAIN
	RB(NZ)	NRM185	MORE LEFT
	XIF
TSMSP	EQU	*	.	=2
	IFT	MESPAS=1 
	LD	A3,DTEDDT	DISCARD DWT ?	=2
	ABI(Z)	DCMODE	NO	=2
	ABL	NRM190	OK,DISCARD PRESENT	=2 
	XIF
	ABI	DCMODE 
NRM186	EQU	*
	LD	A3,DCDWA	DWT QUEUE
	RF(Z)	NRM191	NO
* 
*  CHECK DWT
* 
NRM190	EQU	*
	LDR	A6,A3	RESTORE A6 FOR DWT 
	LD	A1,DWTST,A6	GET STATUS
	RF(N)	NRM191	NO ORDERS 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2	READ ?
	RF(NZ)	NRM191	NO 
	LD	A8,DWTECB,A6	GET ECB
	LD	A3,+2,A4	LENGTH 
	SUK	A3,1	ADJUST
	ST	A3,ECBEL,A8	SAVE IT 
	LDR	A1,A4
	ADK	A1,7	ADJUST BUFFER ADDRESS 
	IFT	SUB=0
	SUK	A1,1	IGNORE STA
	XIF
	LD	A2,ECBBA,A8	GET BUFFER USER 
	LD	A4,DWTTAB,A6
	CF	A15,MOVSU	MOVE USER BUFFER
	CF	A15,CTIME	RESET READ TIMER
	LDK	A1,0 
	CF	A15,TENDIO	COMPLETE 
	ABI	DCMODE	JUMP RECEIVER 
* 
* LINK BUFFER TO DWT OR DTE 
* 
NRM191	EQU	*
	IFT	SUB=1
	ADK	A3,DWTIPC	ADDRESS OF FIRST BUFFER POINTER
	XIF
	IFT	SUB=0
	ADK	A6,DWTCHN	CHECK CHAIN
	LDR*	A3,A6	GET DWT ON NEXT POSITION
	RB(NZ)	NRM190	YES ONE STILL THERE
	LDKL	A3,DCIPC	CHAIN ANCHOR 
	XIF
* 
NRM195	EQU	*
	LDR*	A2,A3	GET BUFFER POINTER
	RF(Z)	NRM198	LAST IN CHAIN 
	LDR*	A3,A3	GET NEXT
	RB	NRM195	TEST IF AT END 
* 
NRM198	EQU	*
	STR	A4,A3	LAST IN CHAIN FOUND - LINK THIS BFR TO IT
	LDR*	A1,A4	SAVE LINK TO NEXT FREE BUFFER 
	CMR	A4	END OF CHAIN FOR THE DWT
* 
*	REMOVE BUFFER FROM FREE CHAIN 
* 
	LDKL	A2,DCIPA	CHAIN ANCHOR 
* 
NRM210	EQU	*
	LDR*	A4,A2	GET NEXT IN CHAIN 
	CWR*	A4,A3	SAME AS THE 1 CHAINED TO THE DWT/DTE? 
	RF(E)	NRM220	YES 
	LDR*	A2,A2	NO - GET NEXT 
	RB	NRM210	TEST IT
* 
NRM220	EQU	*
	STR	A1,A2	REPLACE W/ THE NEXT FREE BFR 
	ABI	DCMODE	GET NEXT FRAME
* 
*  EXEPTION STATE:WRONG N(S)
*	REJECT ENABLED= SEND REJ W/O TESTING P-BIT
*	NOT ENABLED: WAIT FOR P-BIT 
* 
NRM400	EQU	*
	CM	STATUS	RESTORE STATUS 
	LDKL	A1,UNR2	UNR2 ENABLED? 
	ABL(Z)	NRM145	WAIT POLL
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBTRJ	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
	LDK	A1,REJ	INDICATE REJ TO BE SEND 
	ABL	NRMTRA 
	EJECT
* 
*   HERE TO TEST N(R) VALIDITY
* 
TSTNR	EQU	* 
	LD	A1,STATUS	GET STATUS
	ANK	A1,2	WRONG N(R)? 
	RF(NZ)	TSTNRX	YES
	RTN	A5 
********** INIT FRMR PARAMETERS *********** 
TSTNRX	EQU	*
	CM	STATUS	RESTORE STATUS 
	LD	A1,VSCNT
	SLL	A1,4 
	LD	A2,VRCNT
	ORR	A2,A1	PRESENT COUNTERS IN A2 
	LDK	A3,/10	FAIL CODE IN A3 
	CF	A5,PRFRMR	INIT FIELDS 
	ABL	NRM160 
	EJECT
* 
*  HERE TO INITIALIZE FRMR OUTPUT FIELDS
* 
PRFRMR	EQU	*
	LDK	A1,FRMR	LOAD 'FRMR'+F-BIT
	LDKL	A4,DLOBUF	GET BUFFER ADDRESS
	ADK	A4,1 
	SCR	A1,A4	STORE C-FIELD
	LC	A1,FIELD1+1	GET WRONG RECEIVED C-FIELD
	ADK	A4,1 
	SCR	A1,A4	STORE IT 
	ADK	A4,1 
	SCR	A2,A4	SAVE PRESENT COUNTERS
	ADK	A4,1 
	SCR	A3,A4	SAVE FAIL PARAMETERS 
	RTN	A5 
BSYMDE	EQU	*
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBRBY	LOAD STATISTICS 
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
	LC	A1,FIELD1+1	GET C-FIELD 
	ANK	A1,/10	POLL-BIT SET ?
	ABI(Z)	DCMODE
	LDK	A1,RNR	YES 
	CF	A15,QMTRM	SEND BUSY 
	ABI	DCMODE 
	EJECT
* 
* 
*	HDLC OUTPUT PROCESS 
* 
*	QUEUED FROM INPUT PROCESS 
* 
*	TRANSMIT FRAME IF ANY ON QUEUE
*	PRIORITY 1: COMMANDS/RESPONSES (UA,CMDR,DM) 
*	PRIORITY 2: RR-FRAMES WHEN NOTHING PENDING
* 
* 
TRM	EQU	* 
	INH		SET INHIBIT 
	LDKL	A5,STBUT	LOAD STACKBASE 
	STR	A1,A15	SAVE A1 ON STACK
	LD	A1,DCHDLS 
	ST	A1,SAHDLC	SAVE CURRENT STATUS 
	CF	A15,CPTIM	START POLL TIMER
	LDR*	A1,A15	RESTOR A1
	IM	TRMACT	OUTPUT IN PROGRESS 
	LDR	A2,A1	COMMAND FIELD = PARAMETER
	ST	A1,SAVPAM	SAVE PARAMETER
	CF	A15,LOOKUP	BRANCH ON COMMAND TO SEND
	DATA	RSPTBE,TRM150	MAY SEND I-FRAME
	DATA	REJ,TRM136	REJECT 
	DATA	UA,TRM107	UA
	DATA	DM,TRM108	DM
	DATA	RR,TRM130	RCV READY 
	DATA	FRMR,TRM140	FRAME REJECT
	DATA	RNR,TRM180	RCV NOT READY
RSPTBE	DATA	0,TRM150	MAY SEND I-FRAME 
TRM107	EQU	*
	IFT	STAT=1 
	LDR	A2,A6	SAVE DWT 
	LDKL	A6,DTE	INIT DTE 
	LDKL	A1,CSBTUA	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTEORE DWT 
	XIF
	RF	TRM109
TRM108	EQU	*
	IFT	STAT=1 
	LDR	A2,A6	SAVE DWT 
	LDKL	A6,DTE	INIT DTE 
	LDKL	A1,CSBTDM	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
TRM109	EQU	*
	LD	A1,SAVPAM	RESTORE PARAMETER 
TRM110	EQU	*
	CF	A5,TRSFR	SEND SHORT FRAME 
	RF	TRMEND
	EJECT
* 
*	RR SHOULD BE SENT 
* 
* 
TRM130	EQU	*
	LDK	A1,RR	LOAD 'RR'+F
TRM135	EQU	*
	LD	A2,VRCNT	GET NEXT EXPECTED SEND COUNTER 
	SLL	A2,5	ADJUST IT 
	ORR	A1,A2	INSERT IN RR 
	RB	TRM110
TRM136	EQU	*
	LDK	A1,REJ 
	RB	TRM135
* 
* 
*	FRMR SHOULD BE SENT 
* 
* 
TRM140	EQU	*
	LDKL	A4,DLOBUF	GET BUFFER ADDRESS
	LDK	A3,5	FRAME LENGTH TO A3
	CF	A5,WRFRAM	SEND THE FRAME
	RF	TRMEND
	EJECT
* 
*	CHECK   APPLICATION QUEUE AND SEND
*	I-FRAME OR RR-FRAME 
* 
* 
TRM150	EQU	*
	LD	A6,DCIPA
	RF(NZ)	TRM190	OK CHECK QUEUE 
* 
* 
*	RNR SHOULD BE SENT, BUFFER SHORTAGE 
* 
* 
TRM180	EQU	*
	LDK	A1,RNR	LOAD 'RNR'+F
	RB	TRM135
* 
*	CHECK APPLICATION QUEUE 
* 
TRM190	EQU	*
	LD	A6,DCWRQ	CHECK APPLICATION QUEUE
	RB(Z)	TRM130	NOTHING IN QUEUE
	EJECT
* 
*	DEFINE AND TRANSMIT INFORMATION FRAME 
* 
	SUK	A6,DWTOPN	GET WRITE REQUEST DWT ADDRESS
	LD	A8,DWTECB,A6	ECB ADDRESS
	IFT	MMUPAG+MUX=0 
	LDKL	A4,DLOBUF	GET HEADER BUFFER ADDRESS 
	LD	A3,ECBRL,A8	REQUESTED LENGTH
	ADK	A3,2	INCLUDE HEADER
	LD	A7,ECBBA,A8	GET BUFFER START ADDRESS
	IFT	SUB=1
	LD	A2,DWTSUB,A6	SYMBOLIC SUBTERMINAL ADDRESS 
	LD	A1,DCDTE	GET SYMB DTE 
	CF	A15,GETSNA	GET PHYS STA 
	SLL	A1,8	SHIT IT ON LEFT 
	LCR	A1,A7	1ST DATA CHARACTER 
	ST	A1,DLOBUF+2	MOVE TO HEADER BUFFER 
	ADK	A3,1	INCREMENT LENGTH FOR STA
	ADK	A7,1	INCREMENT FOR 1ST DATA CHARACTER
	XIF
	IFT	MMUPAG+MUX=0 
	ST	A7,SWITCH	SAVE FOR BUFFER SWITCHING 
	XIF
	IFF	MMUPAG+MUX=0 
	IFT	SUB=1
	LD	A2,DWTSUB,A6	GT SYMBOLIC SUBTERMIKNAL ADDRESS 
	LD	A1,DCDTE	GET SYMB DTE 
	CF	A15,GETSNA	GET PHYS STA 
	SC	A1,MMUBUF+2	PUT IN HEADER 
	LDKL	A2,MMUBUF+3	SYSTEM BUFFER ADDRESS 
	XIF
	IFF	MMUPAG+MUX=0 
	IFT	SUB=0
	LDKL	A2,MMUBUF+2	SYSTEM BUFFER ADDRESS 
	XIF
	IFF	MMUPAG+MUX=0 
	LD	A1,ECBBA,A8	USER BUFFER ADDRESS 
	LD	A3,ECBRL,A8	NUMBER OF CHARS. TO MOVE
	STR	A5,A15	SAVE A5 STACK 
	LD	A5,DWTTAB,A6	TTAB ADDRESS OF USER TASK
	CF	A15,MOVUS	MOVE APPLICATION DATA TO SYSTEM BUFFER
	LDR*	A5,A15	RESTORE A5 STACK 
	LDKL	A4,MMUBUF	TRANSMIT BUFFER START ADDRESS 
	SUKL	A2,MMUBUF	END ADDRESS - START ADDRESS = 
	LDR	A3,A2	   = TOTAL LENGTH
	XIF
	ST	A6,WRDWT	SAVE WRITING DWT 
	LDK	A1,/10	LOAD 'I'+F
	LD	A2,VRCNT	GET NEXT EXPECTED N(S) 
	SLL	A2,5 
	ORR	A1,A2
	LD	A2,VSCNT	GET N(S) 
	SLL	A2,1 
	ORR	A1,A2
	STR	A1,A4	STORE C-FIELD IN BUFFER
	CF	A5,WRFRAM 
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSBTIF 
	CF	A15,DCSUPR	UPDATE STATISTICS
	LDR	A6,A2	RESTORE DWT
	XIF
	LD	A1,VSCNT	UPDATE V(S)
	ADK	A1,1 
	ANK	A1,7	MODULO 7
	ST	A1,VSCNT
	ST	A1,CPCNT	UPDATE CHECKPINT 
* 
*	DISPATCH
* 
TRMEND	EQU	*
	LD	A2,QOUT 
	CM	TRMACT	RESET OUTPUT FLAG
	CW	A2,QIN
	ABL(E)	TDISP	NOTHING ON QUEUE
	LDR*	A1,A2	GET COMMAND 
	CWK	A2,COMQE 
	RF(NE)	TRME10	NOT END OF QUEUE 
	LDKL	A2,COMQ-2	RESET OUTPUT POINTER
TRME10	EQU	*
	ADK	A2,2 
	ST	A2,QOUT 
	ABL	TRM
	EJECT
**********************************************************************
**********************************************************************
* 
*	SERVICE ROUTINES
* 
**********************************************************************
**********************************************************************
* 
*	RSRSPQ  -  RESET RESPONSE QUEUE 
* 
RSRSPQ	EQU	*
	LDKL	A2,COMQ	BASE
	ST	A2,QIN	APPEND POINTER 
	ST	A2,QOUT	EXTRACT POINTER 
	ADKL	A15,4	* 
	ABR*	A15	* RETURN
	EJECT
*	QUEUEING FACILITY FOR HDLC TRANSMITTER
*	ON ENTRY A1 CONTAINS REQUESTED HDLC COMMAND 
* 
QMTRM	EQU	* 
	LD	A2,TRMACT 
	RF(NZ)	QMTRM10	OUTPUT ACTIVE 
* 
*	ACTIVATE TRANSMITTER
* 
	STR	A4,A15	SAVE A4 ON STACK
	CF	A15,SETIME
	DATA	TRM,1	AFTER 100 MS
	LDR*	A4,A15	RESTORE A4 
	RF	QMRTN 
* 
*	PUT COMMAND ON QUEUE
* 
QMTRM10	EQU	* 
	LD	A2,QIN
	CWK	A2,COMQE 
	RF(NE)	QMTRM20	STILL SPACE IN QUEUE
	LDKL	A2,COMQ-2	RESET POINTER 
QMTRM20	EQU	* 
	ADK	A2,2 
	STR	A1,A2
	ST	A2,QIN
* 
*	RETURN
* 
QMRTN	EQU	* 
	IFT	CPU852=1 
	ADKL	A15,4 
	ABR*	A15 
	XIF
	IFT	CPU852=0 
	RTN	A15
	XIF
	EJECT
* 
*	RESET PROCEDURE COUNTERS
* 
* 
RESCON	EQU	*
	CM	VSCNT 
	CM	VRCNT 
	LDK	A1,7 
	ST	A1,NSCNT
	CM	NRCNT 
	CM	LNRCNT
	CM	CPCNT 
	RTN	A15
	EJECT
* 
* 
*	UPDATE PROCEDURE COUNTERS 
*	AND CHECK OUTPUT QUEUE
* 
*	ON ENTRY A1 CONTAINS CURRENT C-FIELD
* 
* 
UPDCON	EQU	*
	LC	A1,FIELD1+1	GET C-FIELD 
	LDR	A2,A1	SAVE C-FIELD 
	ANK	A2,1 
	RF(NZ)	UPD100	NOT I-FRAME, NO N(S) 
	LDR	A2,A1
	SRL	A2,1 
	ANK	A2,7	MASK N(S) 
	ST	A2,NSCNT	STORE IT 
	CW	A2,VRCNT	CHECK IT 
	RF(NE)	UPD080	INVALID
	IM	VRCNT	INCREMENT VARIABLE
	LDK	A2,7 
	ANS	A2,VRCNT	MODULO 7
	RF	UPD100
UPD080	EQU	*
	LDK	A2,1 
	ORS	A2,STATUS	INDICATE WRONG N(S)
UPD100	EQU	*
	LDR	A2,A1	GET C-FIELD
	SRL	A2,5	ADJUST IT 
	ANK	A2,7 
	LD	A3,CPCNT	GET CHECKPOINT 
	CW	A3,LNRCNT 
	RF(E)	UPD210	NO TRANSMISSION DONE
	ST	A2,NRCNT	STORE N(R) 
	LD	A6,WRDWT	GET WRITING DWT
	CW	A2,CPCNT	TRANSMISSION ACKNOWLEDGED ?
	RF(NE)	UPD130	NO 
	ST	A2,LNRCNT	YES,SAVE LAST ACKNOWLEDGED N(R) 
* 
* 
*	UPDATE OUTPUT QUEUE 
* 
	IFF	MMUPAG+MUX=0		 
	CM	SWMMU	RESET FLAG
	XIF
* 
	LDK	A1,0	RC=0
	CF	A5,CWRITE	CHECK COMPLETE REQUEST
	RTN	A5 
* 
*	LAST TRANSMISSION NOT ACKNOWLEDGED
* 
UPD130	EQU	*
****** TEST IF VALID N(R) ********* 
	CW	A2,LNRCNT	VALID ? 
	RF(NE)	UPD205	NO 
	ST	A2,VSCNT	STORE NEXT N(S) TO BE SENT 
	RTN	A5 
* 
* INDICATE WRONG N(R) 
* 
UPD205	EQU	*
	LDK	A1,2 
	ORS	A1,STATUS
	RTN	A5 
* 
* HERE ,NO TRANSMISSION HAS BEEN DONE 
* SO,JUST CHECK SYNCHRONOUS N(R) SEQUENCE 
UPD210	EQU	*
* 
	CW	A2,VSCNT
	RB(NE)	UPD205	WRONG SEQUENCE 
	RTN	A5 
	EJECT
* 
* 
*	STORE INPUT REGISTER A3-A8
* 
* 
STREGI	ST	A3,LCI3 
	ST	A4,LCI4 
	ST	A5,LCI5 
	ST	A6,LCI6 
	ST	A7,LCI7 
	ST	A8,LCI8 
RTNA15	EQU	*
* 
	IFT	CPU852=1 
	ADKL	A15,4 
	ABR*	A15 
	XIF
	IFT	CPU852=0 
	RTN	A15
	XIF
	EJECT
* 
* 
*	RESTORE INPUT REGISTER A3-A8
* 
* 
LDREGI	LDKL	A3,0
LCI3	EQU	*-2
	LDKL	A4,0
LCI4	EQU	*-2
	LDKL	A5,0
LCI5	EQU	*-2
	LDKL	A6,0
LCI6	EQU	*-2
	LDKL	A7,0
LCI7	EQU	*-2
	LDKL	A8,0
LCI8	EQU	*-2
	RB	RTNA15
	EJECT
* 
* 
*	STORE OUTPUT REGISTER A3-A8 
* 
* 
STREGO	ST	A3,LCO3 
	ST	A4,LCO4 
	ST	A5,LCO5 
	ST	A6,LCO6 
	ST	A7,LCO7 
	ST	A8,LCO8 
	RB	RTNA15
	EJECT
* 
* 
*	RESTORE OUTPUT REGISTER A3-A8 
* 
* 
LDREGO	LDKL	A3,0
LCO3	EQU	*-2
	LDKL	A4,0
LCO4	EQU	*-2
	LDKL	A5,0
LCO5	EQU	*-2
	LDKL	A6,0
LCO6	EQU	*-2
	LDKL	A7,0
LCO7	EQU	*-2
	LDKL	A8,0
LCO8	EQU	*-2
	RB	RTNA15
	EJECT			TRABUG 			TRABUG 			TRABUG 			TRABUG 			TRABUG 		TRABUG
* 
*	LOOKUP - LOOK UP KEY IN TABLE & BRANCH ON ADDRESS 
* 
*	CALL: 
*		CF     A15,LOOKUP          TABLE ADDRESS TO STACK
*		DATA   LAST,ADDRE          LAST ENTRY; ERROR ADDRESS 
*		DATA   KEY1,ADDR1          KEY (A2); ADDRESS FOR BRANCH
*		 "       "    "
*	LAST	DATA   KEYN,ADDRN
* 
*	ENTRY: A2 = KEY VALUE 
*	EXIT: A3 & A4 DESTROYED 
* 
LOOKUP	EQU	*
	LDR	A1,A15	USE A1 REGISTER 
	ADK	A1,4	POINT TO NEXT INSTRUCTION ADDRESS 
	LDR*	A3,A1	GET CONTENT=TABLE ADDRESS 
	LDR*	A4,A3	GET LAST LEGAL ADDRESS
* 
LOOK50	EQU	*	LOOP ENTRY 
	ADK	A3,4	GET NEXT TABLE ENTRY ADDRESS
	CWR	A3,A4	PAST THE END?
	RF(G)	LOOK90	YES = NOT FOUND 
	CWR*	A2,A3	KEY = VALUE IN TABLE? 
	RB(NE)	LOOK50	NO - CHECK NEXT ENTRY
	RF	LOOK95	BRANCH TO TABLE ADDRESS
*		KEY NOT FOUND
LOOK90	EQU	*
	LDR*	A3,A1	GET TABLE ADDRESS AGAIN 
LOOK95	EQU	*
	ADKL	A15,4 
	ABI	2,A3	BRANCH ADDRESS
	EJECT
**********************************************************************
* 
*	DCLINK  -  LINK DWT ADDRESS TO CONFIGURATION CHAIN
* 
*	ENTRY: A6 = DWT-ADDRESS 
* 
*	EXIT:  DCDWA = A(FIRST DWT IN CHAIN)
*	       DWTCHD = A(DTE)
*	       A2, A3 DESTROYED 
* 
**********************************************************************
* 
DCLINK	EQU	*
	LDR	A2,A7	GET OPTION+ORDER 
	SLL	A2,1	BIT /40 SET?
	RF(NN)	DCLK10	NO - NOT A MASTER DWT
	CM	DWTSUB,A6	SUBTERMINAL ADDRESS = 0 FOR MASTER
	LD	A2,DCDWA	GET ANCHOR VALUE 
	ST	A2,DWTCHN,A6	PUT IN THIS DWT:S CHAIN ADDRESS
	ST	A6,DCDWA	THIS DWT FIRST IN CHAIN
	RF	DCLK50	COMPLETE 
* 
DCLK10	EQU	*
	LDKL	A3,DCDWA-DWTCHN	GET ANCHOR ADDRESS COMPATIBLE W/ DWT'S
DCLK20	EQU	*
	LDR	A2,A3	PREVIOUS POINTER 
	LD	A3,DWTCHN,A2	GET POINTER TO NEXT IN CHAIN 
	RB(NZ)	DCLK20	KEEP ON UNTIL LAST IN CURRENT CHAIN
	ST	A6,DWTCHN,A2	ADD NEW DWT TO CHAIN 
	CM	DWTCHN,A6	END OF CHAIN MARKER 
* 
DCLK50	EQU	*
	LDKL	A2,DTE	*
	ST	A2,DWTCHD,A6	* BACKWARD LINK  TO ANCHOR 
	ADKL	A15,4	
	ABR*	A15	RETURN
	EJECT
**********************************************************************
* 
*	DCREMV  -  REMOVE DWT-ADDRESS FROM CONFIGURATION CHAIN
* 
*	ENTRY:  A6 = DWT-ADDRESS TO BE REMOVED
* 
*	EXIT:   CC = 0   = CHAIN NOW EMPTY; ANCHOR = 0
*	             POS = DWT FOUND & REMOVED
*	             NEG = DWT NOT FOUND OR CHAIN EMPTY ON ENTRY
*	        A2 & A3 DESTROYED 
* 
**********************************************************************
* 
DCREMV	EQU	*
	LDKL	A3,DCDWA-DWTCHN	MAKE ANCHOR DWT-COMPATIBLE
DCRM20	EQU	*
	LDR	A2,A3	PREVIOUS DWT-POINTER 
	LD	A3,DWTCHN,A2	GET DWT OF NEXT (OR 1ST) ENTRY IN CHAIN
	RF(NZ)	DCRM30	NOT AT END 
	SUK	A3,1	AT END & NOT FOUND; SET FOR CC = NEGATIVE 
	RF	DCRM80	RETURN 
* 
DCRM30	EQU	*
	CWR	A3,A6	IS THIS OUR DWT? 
	RB(NE)	DCRM20	NO - LOOK AT NEXT
	LD	A3,DWTCHN,A6	GET LINK TO NEXT IN DWT TO BE REMOVED
	ST	A3,DWTCHN,A2	MOVE IT TO THE PREVIOUS ONE
	LDK	A3,0	SET FOR CC = 0
	LD	A2,DCDWA	GET ANCHOR 
	RF(Z)	DCRM80	LAST DWT NOW REMOVED
	ADK	A3,1	SET CC = POS. 
* 
DCRM80	EQU	*
	ADKL	A15,4	UPDATE STACK
	LDR	A3,A3	SET PROPER CC
	ABR*	A15	RETURN
	EJECT
**********************************************************************
* 
*	COMMUNICATIONS I/O PROCESSING 
* 
**********************************************************************
* 
* 
*	TRANSMIT SHORT FRAME WITHOUT I-FIELD
*	ON ENTRY A1 CONTAINS COMMAND/RESPONSE 
* 
* 
TRSFR	EQU	* 
	LDKL	A4,DLOBUF	GET BUFFER ADDRESS
	SC	A1,+1,A4	STORE C-FIELD
	LDK	A3,2	FRAME LENGTH TO A3
	CF	A5,WRFRAM	SEND THE FRAME
	RTN	A5 
	EJECT
* 
*	TRANSMIT ONE FRAME
*	ON ENTRY : A3 = FRAME LENGTH IN BYTES 
*	           A4 = BUFFER ADDRESS
* 
WRFRAM	EQU	*
	LC	A1,DCTCA	GET DTE ADDRESS
	SCR	A1,A4	STORE FIRST IN BUFFER
	IFT	MUX=1		
	LDR	A2,A3	LENGTH IN BYTES
	ADK	A2,1	+1 IN CASE OF ODD 
	SRL	A2,1	LENGTH IN WORDS 
	ORKL	A2,WDXFER+WRCMD	WORD XFER, WRITE COMMAND
	WER	A2,IOPOUT	LENGTH TO IOP REG. 0 
	WER	A4,IOPOUT+/1	ADDRESS TO IOP REG. 1 
	XIF			 
	LD	A1,PFPOST 
	RF(NZ)	WRF105	WAIT FOR POWER UP
	LDR	A1,A3	GET LENGTH 
	ANK	A1,1	ODD?
	RF(Z)	WRF100	NO
	LDKL	A1,/800	YES - 8 SIGNIF. BITS IN LAST WORD 
WRF100	EQU	*	.	1
	IFT	MUX=0		
	ADK	A1,CIXPC	TRANSMIT P.C. COMMAND 
	XIF			 
	IFT	MUX=1		
	ADK	A1,CIXMX	TRANSMIT IOP COMMAND
	XIF			 
	CIO	A1,1,CHLCUT	START CHLC TRANSMITTER 
	RF(NA)	WRT115	FORCE RETURN 
WRF105	EQU	*
	CF	A5,WRITE	SEND THE FRAME 
	LDK	A1,CINRTS
	CIO	A1,1,CHLCUT	NO REQUEST TO SEND 
	RF(NA)	WRT115	FORCE RETURN 
	CF	A15,STREGO	SAVE REGISTERS 
	ABL	TDISP
WRT115	EQU	*
	RTN	A5 
	EJECT
* 
* 
*	READ ONE FRAME INTO RECEIVE POOL BUFFER 
*	ON EXIT CR = (Z) IF THE FRAME IS VALID
*	   WITH CORRECT ADDRESS.
*	A1 CONTAINS THE CONTROL FIELD 
*	AND A4 CONTAINS BUFFER ADDRESS
* 
* 
RDFRAM	EQU	*
	CM	FIELD1	CLEAR CONTROL FIELD (A+C)
	LD	A4,DCIPA	GET   BUFFER 
	RF(NZ)	RDF001	BUFFERS STILL AVAILABLES 
	IM	BUFNUL	SET BUFFER OVERFLOW INDICATOR
	IFT	MUX=1		
	LDKL	A4,FIELD1	SHORT BUFFER- 
	LDKL	A3,2+WDXFER+1	1 WORD LONG 
	XIF			 
	RF	RDF002
RDF001	EQU	*
	CM	BUFNUL	RESET INDICATOR
	IFT	MMUPAG+MUX=0		 
	ADK	A4,RCVHDR	RESERVE HEADER 
	XIF			 
	IFT	MMUPAG=1		 
	IFT	MUX=0		
	ADK	A4,RCVHDR	POINT AT 1ST DATA BYTE 
	XIF		
	IFT	MUX=1		
	ADK	A4,RCVHDR-2	POINT AT A-FIELD 
	LDKL	A3,WDXFER+RBUFL+1	BFR LENGTH IN WDS INCL A+C
	XIF			 
RDF002	EQU	*
	IFT	MUX=0		. 
	LDK	A3,0	RESET CHARACTER COUNTER 
	XIF			.
	IFT	MUX=1		
	WER	A3,IOPIN	LENGTH ---> IOP REG. 0
	WER	A4,IOPIN+1	ADDRESS ---> IOP REG. 1 
	XIF			 
	LD	A1,PFPOST 
	RF(NZ)	RDF010	WAIT FOR POWER UP
	IFT	MUX=0		
	LDK	A1,CIRPC	RECEIVE ON PC 
	XIF			 
	IFT	MUX=1		
	LDK	A1,CIRMX	RECEIVE ON IOP
	XIF			 
	CIO	A1,1,CHLCIN	START RECEIVER 
	RF(NA)	RDF140	COMMAND NON ACCEPTED 
RDF010	EQU	*
	LDK	A7,0 
	CF	A5,READ	READ THE FRAME
	IFT	MUX=1
	LDR	A7,A7	SET CND REG
	XIF
	RF(Z)	RDF110	VALID FRAME 
RDF020	EQU	*
	LDK	A3,1	FLAG INVALID
	RF	RDF120
RDF110	EQU	*
	LD	A4,DCIPA
	RF(Z)	RDF115 
	ST	A3,RCVEL,A4	LENGTH TO RECEIVE BUFFER
	IFT	MUX=1		
	LD	A3,RCVTCA,A4	GET A + C
	ST	A3,FIELD1	SAVE FOR TESTS
	XIF				
RDF115	EQU	*
	LC	A1,FIELD1	GET CLUSTER ADDRESS 
	LDR	A1,A1	*
	RF(Z)	RDF150	SKIP CONTENTION SST 
	CC	A1,DCTCA	OUR ADDRESS? 
	RB(NE)	RDF020	NO - SET INVALID 
	LDK	A3,0	FLAG VALID FRAME
	LC	A1,FIELD1+1	GET COMMAND FIELD OF FRAME
	RF	RDF125	NO STATUS CHECK WHEN DATA OK 
RDF120	EQU	*
	LDR	A1,A2	SAVE STATUS
	ANK	A2,1	MODEM NOT OP ?
	RF(NZ)	RDF130	YES
	ANKL	A1,/302E	MERGE WITH BAD HW STATUS 
	RF(NZ)	RDF126	HW INCORRECT 
RDF125	EQU	*
	ADK	A5,4 
	LDR	A3,A3	SET PROPER CC
	ABR*	A5
RDF126	EQU	*
	CF	A15,STREGI	SAVE REGISTERS 
	CF	A15,SETIME	 
	DATA	RDF127,CUTIME 
	ABL	TDISP	START TIMER
RDF127	EQU	*
	CF	A15,LDREGI	RELOAD REGISTERS 
	RB	RDF125	RETURN AFTER DELAY  (HIGH SECURITY !!) 
	EJECT
* 
* RESTORE LINE WHEN REQUIRED
* 
RDF130	EQU	*	DISCONNECT,CONNECT MODEM 
	CF	A5,CUOPEN	TRY TO CONNECT MODEM
	RF(N)	RDF140	INVALID DTE 
	RB(Z)	RDF130	NO SUCCESS
RDF131	EQU	*
	LDK	A3,1	FLAG INVALID FRAME
	RB	RDF125
RDF140	EQU	*
	CM	DCCUS	HW OUT OF SERVICE 
	LDKL	A3,-1	SET CC NEGATIVE 
	RB	RDF125
RDF150	EQU	*
	CF	A15,STREGI	SAVE REGISTERS 
	CF	A15,SETIME	START TIMER
	DATA	RDF160,CUTIME 
	ABL	TDISP
RDF160	EQU	*
	CF	A15,LDREGI	RESTORE REGISTERS
	ABL	RDF020	SKIP CONTENTION 
	EJECT
* 
* 
*	POWER ON FUNCTIONS
* 
* 
DC07ON	EQU	*
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8
	XIF
	IFT	CPU852=0 
	MSR	8,A15	SAVE REGISTERS 
	XIF
	CF	A15,RSRSPQ	RESET RESPONSE QUEUE 
	LD	A2,DCREQS	CURRENT STATE 
	ABL(NZ)	PWERXX	DTE ACTIVE
	LD	A6,WRDWT	DWT PRESENT ?	=2 
	ABL(Z)	TDISP	NO
	LD	A1,DWTST,A6	ORDER PRESENT ? 
	ABL(N)	TDISP	NO
	LD	A1,DWTOR,A6	OPEN REQUEST ?
	SUK	A1,/21 
	ABL(NZ)	TDISP	NO 
	LDKL	A5,STBIN	YES,COMPLETE 
	ABL	RQOP21 
PWERXX	EQU	*
	LD	A6,WRDWT	DWT PRESENT ?	=2 
	RF(Z)	PWERX1	NO
	LD	A1,DWTST,A6	ORDER PRESENT ? 
	RF(N)	PWERX1	NO
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,/22	CLOSE ? 
	ABL(E)	RQCL52	YES COMPLETE 
PWERX1	EQU	*
	LDKL	A5,STBIN	POWER FAILURE
	CF	A5,CUOPEN	CONNECT MODEM 
	ABL(N)	TDISP	HW OUT OF SERVICE 
	RB(Z)	PWERX1	NOT OK,TRY AGAIN
	ABI	DCMODE	RESTART RECEIVER
	EJECT
* 
*  TIMER FUNCTIONS
* 
SPTIM	EQU	* 
	CF	A15,SETIME
	DATA	PTOUT,TIMPOL
	ST	A4,DCTPGP	SAVE POINTER
	ADKL	A15,4 
	ABR*	A15	RETURN
PTOUT	EQU	* 
* 
	LD	A1,DCHDLS	SAVE CURRENT STATE
	RF(Z)	PTOUT1	ALREADY TIMED OUT 
	ST	A1,SAHDLC 
	CM	DCHDLS	CLEAR IT 
PTOUT1	EQU	*
	CF	A15,SPTIM	RESTART TIMER 
	ABL	TDISP
CPTIM	EQU	* 
	LD	A1,SAHDLC 
	ST	A1,DCHDLS	RESTORE STATUS
	LDKL	A2,-TIMPOL
	ST*	A2,DCTPGP	RESTORE TIMER
	ADKL	A15,4 
	ABR*	A15	RETURN
	EJECT
* 
* 
*	READ FROM THE LINE
* 
* 
READ	EQU	*
	CF	A15,STREGI	SAVE REGISTERS 
	ABL	TDISP
* 
* 
*	WRITE ON THE LINE 
* 
* 
WRITE	EQU	* 
	CF	A15,STREGO	SAVE REGISTERS 
	ABL	TDISP
	EJECT
**********************************************************************
* 
*	CUOPEN  -  CONNECT MODEM
* 
*	ISSUE CONNECT MODEM FUNCTION IF CONTROL UNIT STATE = 0
*	CHANGE STATE TO 1 IF SUCCESSFUL 
* 
**********************************************************************
* 
CUOPEN	EQU	*
	CF	A15,STREGI	SAVE REGISTERS 
	CF	A15,SETIME	START TIMER
	DATA	CUOP89	TIMEOUT ADDRESS
	DATA	CUTIME	TIMEOUT VALUE X 100 MS 
	ABL	TDISP
CUOP89	EQU	*
	CF	A15,LDREGI	RESTORE REGISTERS
	LDK	A1,CICMO	CONNECT MODEM 
	CIO	A1,1,CHLCIN	ISSUE FUNCTION 
	RF(NA)	CUOP91	COMMAND NOT ACCEPTED 
	CF	A5,READ	WAIT FOR INTERRUPT OR TIMEOUT 
	IFT	MUX=1
	LDR	A7,A7	SET CND REG
	XIF
	RF(NZ)	CUOP90	BAD
	LDK	A1,1 
	ST	A1,DCCUS	OK,SET CONNECT 
* 
CUOP90	EQU	*
	ADK	A5,4	UPDATE STACK
	LD	A1,DCCUS	SET CC 
	ABR*	A5	RETURN 
CUOP91	EQU	*
	CM	DCCUS	HW OUT OF SERVICE 
	ADK	A5,4	UPDATE STACK
	LDKL	A1,-1	SET CC NEGATIVE 
	ABR*	A5	RETURN 
	EJECT
**********************************************************************
* 
*	CUCLOS  -  DISCONNECT MODEM 
* 
*	DISCONNECT MODEM (DROP DSR) AND CHANGE
*		CONTROL  UNIT STATE TO 0 
* 
**********************************************************************
* 
CUCLOS	EQU	*
	LD	A1,DCCUS	GET CURRENT CONTROL UNIT STATE 
	RF(Z)	CUCL90	ALREADY DISCONNECTED
	CIO	A1,0,CHLCIN	SET HW INACTIVE
	RF(NA)	CUCL90	HW PROBLEMS
	CF	A5,READ 
	LDK	A1,CIDISC	DISCONNECT COMMAND 
	CIO	A1,1,CHLCIN	ISSUE FUNCTIOON
	RF(NA)	CUCL90	HW PROBLEMS
	CF	A5,READ	WAIT FOR INTERRUPT
* 
CUCL90	EQU	*
	CM	DCCUS	HW DOWN 
	RTN	A5 
	EJECT
* 
* 
*	INPUT INTERRUPT HANDLER 
* 
* 
IH0701	EQU	*
* 
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
	IFT	CPU852=0 
	MSR	8,A15	SAVE REGISTERS 
	XIF
* 
	CF	A15,LDREGI
	IFT	MUX=1		
	ABL	SSTIN	MUST BE STATUSL
	XIF			 
	IFT	MUX=0		
	INR	A2,0,CHLCIN	READ 16 BITS 
	RF(NA)	IHLC10	NOT ACCEPTED 
* 
	IFT	MUX=0		
	IFF	LOGG=0 
	CF	A5,LOGIN
* 
	XIF
	IFT	MUX=0			 
* 
* 
*  STORE FIRST WORD IN FIELD1 
* 
	LD	A7,TESTCF	FIRST WORD ?
	RF(NZ)	NFIRST	NO 
	IM	TESTCF	YES,SET FIRST WORD FLAG
	ST	A2,FIELD1	AND STORE ADDRESS + C-FIELD 
	ABL	READ 
NFIRST	EQU	*
	LD	A1,BUFNUL 
	ABL(NZ)	READ	BUSY DO NOT ACCEPT ANY DATA 
	SC	A2,1,A4 
	ECR	A2,A2
	SCR	A2,A4
	ADK	A4,2	INCREMENT POINTER 
	ADK	A3,2	INCREMENT COUNTER 
	CWK	A3,RBUFL+RBUFL	BUFFER OVERFLOW ? 
	ABL(L)	READ	NO 
* 
*	BUFFER OVERFLOW 
* 
	SUK	A4,2	DECREMENT POINTER 
	ABL	READ 
* 
*	INR NOT ACCEPTED
* 
IHLC10	EQU	*
	CM	TESTCF	RESET FIRST WSORD TEST 
	CF	A5,SSTIN	PERFORM SST
	ADK	A5,4 
	LDR	A7,A7
	ABR*	A5
	XIF			 
	EJECT
* 
* 
*	PERFORM SST ON INPUT CHANNEL
* 
* 
SSTIN	EQU	* 
	SST	A2,CHLCIN	PERFORM SST
	RF(NA)	SSTI20	NOT ACCEPTED 
	IFF	LOGG=0 
	CF	A5,LOGSST 
	XIF
	LDR	A1,A2
	ANK	A1,1	MODEM NOT OP
	RF(Z)	SSTI30	NOT PRESENT 
	IFT	STAT=1 
	LDR	A2,A6	SAVE DWT 
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSCDCE	LOAD STATISTICS 
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE THAT DWT 
	XIF
	LDK	A2,1	RESTORE MODEM NOT OPERABLE
	CM	DCCUS	CLEAR MODEM UP
	EJECT
* 
* MODEM OK: 
*   COULD BE OK OR RETRY INPUT
* 
SSTI20	EQU	*
	LDK	A7,1	INDICATE INVALID FRAME
	RTN	A5 
SSTI30	EQU	*
	LDK	A1,1 
	ST	A1,DCCUS	MODEM OK 
	IFT	MUX=1
	LDR	A2,A1	GET SST
	ANK	A2,8	OVRFLOW ? 
	RF(NZ)	SSTI31	YES ACCEPT IT ANYWAY 
	XIF
	LDR	A1,A2
	ANKL	A1,/302E	INVALID FRAME ?
	RB(NZ)	SSTI20	YES,CARRIER DOWN,THROUGPUT,CRC...ETC...
	IFT	MUX=0
	CWK	A3,RBUFL+RBUFL	BUFFER OVERFLOW?
	RB(G)	SSTI20	YES - ERROR 
	XIF
SSTI31	EQU	*
	LDK	A7,0 
	IFT	MUX=1		
	LD	A4,BUFNUL	SHORT BUFFER USED?
	RF(NZ)	SSTI40	YES
	RER	A4,IOPIN	GET RESIDUAL LENGTH IN WORDS
	LDKL	A3,RBUFL	ORIG. LENGTH, DON`'T INCL A+C
	SUR	A3,A4	MINUS RESIDUAL LENGTH
	SLL	A3,1	LENGTH RCVD IN CHARS
	XIF			 
	ANKL	A2,/0F00
	RF(Z)	SSTI40	ALL BITS IN LAST INTERRUPT SIGNIFICANT
	SUK	A3,1	ADJUST LENGTH 
SSTI40	RTN	A5 
	EJECT
* 
* 
*	OUTPUT INTERRUPT HANDLER
* 
* 
IH0702	EQU	*
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE REGISTERS 
	XIF
	IFT	CPU852=1 
	CF	A15,SAVE8 
	XIF
* 
	CF	A15,LDREGO
	IFT	MUX=1		
	ABL	IHLCU1		 
	XIF			 
	IFT	MUX=0		
	LCR	A2,A4
	SLL	A2,8	
	LC 	A2,+1,A4	INIT OUTPUT REGISTER
	OTR	A2,0,CHLCUT	SEND THEM
	RF(NA)	IHLCU1	NOT ACCEPTED 
* 
	IFT	MUX=0		
	IFF	LOGG=0 
	CF	A5,LOGOUT 
	XIF
	IFT	MMUPAG+MUX=0		 
* 
*   HERE TO BROADCAST DIRECT FROM USER BUFFER 
* 
	LD	A7,SWITCH	LOAD USER BUFFER ADDRESS
	RF(Z)	IHLCUX	I-FRAME 
	IFT	SUB=1
	CWK	A4,DLOBUF	1ST WORD SENT? 
	RF(E)	IHLCUX	YES - SEND 2ND
	XIF
	IFT	MMUPAG+MUX=0 
	LDR	A4,A7	INIT FIRST PASSAGE 
	SUK	A4,2	PREPARE POINTER 
	XIF			 
	IFT	MUX=0		
	CM	SWITCH	CLEAR INDICATOR
IHLCUX	EQU	*
	ADK	A4,2	INCREMENT POINTER 
	SUK	A3,2	DECREMENT COUNTER 
	RF(P)	IHWAIT	WAIT FOR NEXT INTERRUPT 
* 
*	END OF FRAME
* 
	CIO	A1,0,CHLCUT	HALT TRANSMISSION
IHWAIT	EQU	*
	CF	A15,STREGO	SAVE REGISTERS 
	ABL	TDISP
	XIF			 
	EJECT
* 
*	CHECK SST 
* 
IHLCU1	EQU	*
	SST	A2,CHLCUT	PERFORM SST
	RF(NA)	IHLCU2	NOT ACCEPTED 
* 
	IFF	LOGG=0 
	CF	A5,LOGSST 
	XIF
* 
	LDR	A1,A2
	RF(Z)	IHLCU2	SST OK
	ANK	A1,1	
	RF(Z)	IHLCU3	THROUGHPUT ERROR
* 
*	MODEM NOT OPERABLE
* 
	IFT	STAT=1 
	LDR	A2,A6	SAVE THAT DWT
	LDKL	A6,DTE	GET DTE
	LDKL	A1,CSCDCE	LOAD STATISTIC
	CF	A15,DCSUPR	UPDATE 
	LDR	A6,A2	RESTORE DWT
	XIF
	CF	A15,STREGO	SAVE REGISTERS 
	CF	A15,SETIME	START TIMER
	DATA	IHLCU5,10	
	ABL	TDISP	DISPATCH 
* 
*	TIMEOUT 
* 
IHLCU5	EQU	*	 
	CF	A15,LDREGO	 
* 
*	THROUGHPUT ERROR
* 
IHLCU3	EQU	*
	CM	TRMACT	RESET OUTPUT ACTIVE
	LDK	A7,1 
IHLCU2	EQU	*
	RTN	A5 
	EJECT
**********************************************************************
* 
*	BUFFER AREAS
* 
**********************************************************************
* 
* 
*	DC RECEIVE BUFFER POOL
* 
* 
*	BYPASS ASSEMBLER CONSTRAINTS: 
RBUFLB	EQU	RBUFL+RBUFL	BUFFER DATA PORTION - BYTES
*		.
RLINK	EQU	RBUFLB+RCVHDR+2	SECTION SIZE, LINKAGE WORD INCL. (BYTES)
* 
RBUFP	EQU	*	START OF RECEIVE BUFFER POOL
	IFT	RBUFNR=14
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=13
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=12
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=11
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=10
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=9 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=8 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=7 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=6 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=5 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=4 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	IFT	RBUFNR=3 
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	XIF
	DATA	*+RLINK 
	RES	RBUFL+RCHDRW 
	DATA	0 
	RES	RBUFL+RCHDRW 
* 
	IFF	MMUPAG+MUX=0		 
MMUBUF	RES	TBUFL+2	MMU TRANSMIT BUFFER INCL. HEADER SP]ACE
	XIF
	EJECT
* 
*	DATA LINK CONTROL OUTPUT BUFFER 
*	    HEADER IF I-FRAME 
* 
* 
DLOBUF	EQU	*
	RES	6	OUTPUT BUFFER
* 
* 
*	HDLC CIRCULAR COMMAND QUEUE 
* 
* 
QIN	DATA	COMQ	INPUT POINTER 
QOUT	DATA	COMQ	OUTPUT POINTER 
* 
* 
COMQ	EQU	*	CIRCULAR COMMAND QUEUE 
	DATA	0,0,0,0,0 
COMQE	EQU	*-2	END OF QUEUE
* 
* 
* 
	EJECT
**********************************************************************
* 
* 
*	INTERRUPT LOGGING ROUTINE 
* 
**********************************************************************
* 
	IFF	LOGG=0 
LOGSST	EQU	*
	LDKL	A1,/5555
	RF	LOG10 
LOGOUT	EQU	*
	LDK	A1,0 
	RF	LOG10 
LOGIN	EQU	* 
	LDKL	A1,/1111
LOG10	ST	A3,SAVE3 
	ST	A2,SAVE2
	LD	A3,LOGPNT 
	STR	A1,A3
	ADK	A3,2 
	STR	A2,A3
	ADK	A3,2 
	CWK	A3,LOGEND
	RF(L)	LOGEXI 
	LDKL	A3,LOGSTA 
LOGEXI	ST	A3,LOGPNT 
	LD	A2,SAVE2
	LD	A3,SAVE3
	RTN	A5		 
	EJECT
* 
* 
LOGPNT	DATA	LOGSTA
LOGSTA	EQU	*
	RES	400
LOGEND	EQU	*-6
SAVE2	DATA	0
SAVE3	DATA	0
	XIF
* 
* 
* 
	END

Full view