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

⟦8080caca5⟧

    Length: 199774 (0x30c5e)
    Notes: pts_type(SC)
    Names: »DRDC25.SC«

Derivation

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

PTS(SC)

	IDENT	DRDC25	REL 11.0 81-01-26 870105041100
* 
********************************************* 
* 
*	PHILIPS TERMINAL SYSTEM PTS 
* 
*	DRDC25: DRIVER FOR DATA COMMUNICATION 
*	        HDLC: ASYNCHRONOUS RESPONSE MODE OR 
*	              ASYNCHRONOUS BALANCED MODE
*	              (OPTIONS 2,8,11 AND 12) 
* 
* 
********************************************* 
* 
* 
* 
	EJECT
	ENTRY	DC25ON 
	ENTRY	DW2501 
	ENTRY	DW2502 
	ENTRY	DW2503 
	ENTRY	DW2504 
         ENTRY    IH2501
         ENTRY    IH2502
	ENTRY	IH2503 
	ENTRY	IH2505 
	ENTRY	IH2507 
	ENTRY	IH2504 
	ENTRY	IH2506 
	ENTRY	IH2508 
	ENTRY	PARTA1	PROTOCOL TABLE,LINE 1 
	ENTRY	CURTRP	CURRENT TRACE POINTER 
	ENTRY	TRASTR	TRACE START ADDRESS 
	ENTRY	TRAEND	TRACE END ADDRESS 
	ENTRY	CURLGP	CURRENT LOGG POINTER
	ENTRY	LOGSTR	LOGG START ADDRESS
	ENTRY	LOGEND	LOGG END ADDRESS
	ENTRY	DW2500 
* 
	EXTRN	DWTST
	EXTRN	DWTECB 
	EXTRN	DWTTAB	TTAB ADDRESS
	EXTRN	DWTWAT	WAIT OR ACTIVATE INDICATOR
         EXTRN    SAVE8 
         EXTRN    RETUR8
	EXTRN	TENDIO 
	EXTRN	TDISP
	EXTRN	SETIME 
	EXTRN	INTSAV	INTERRUPT SAVE ADDRESS
* 
*****  BUFFER EQUATES ***** 
RECAD	EQU	0	POINTER TO BUFFER ADDRESS FIELD 
RECCT	EQU	1	POINTER TO BUFFER CONTROL FIELD 
* 
	EJECT
* 
***************************************** 
*	
*	SYSGEN PARAMETERS 
* 
* 
X:A	EQU	1 
SYNRLN	EQU	X:A	NUMBER OF LINES
* 
X:B	EQU	0	CHLC 6836 OR CULC 6856(HLCUZ) 
HLCUZ	EQU	X:B	0=6836,1=6856 
* 
X:C	EQU	/02 
REDV01	EQU	X:C	REC.UNIT ADDR. LINE 1
* 
	IFF	SYNRLN=1 
X:D	EQU	/22 
REDV02	EQU	X:D	REC.UNIT ADDR. LINE 2
* 
	IFF	SYNRLN=2 
X:E	EQU	/04 
REDV03	EQU	X:E	REC.UNIT ADDR. LINE 3
* 
	IFF	SYNRLN=3 
X:F	EQU	/05 
REDV04	EQU	X:F	REC.UNIT ADDR. LINE 4
	XIF
* 
	EJECT
* 
	IFT	HLCUZ=0
SEDV01	EQU	REDV01+/10	TRANS.UNIT ADDR. LINE 1 
	IFF	SYNRLN=1 
SEDV02	EQU	REDV02+/10	TRANS.UNIT ADDR. LINE 2 
	IFF	SYNRLN=2 
SEDV03	EQU	REDV03+/10	TRANS.UNIT ADDR. LINE 3 
	IFF	SYNRLN=3 
SEDV04	EQU	REDV04+/10	TRANS.UNIT ADDR. LINE 4 
	XIF
* 
	IFT	HLCUZ=1
SEDV01	EQU	REDV01+/01	TRANS.UNIT ADDR. LINE 1 
	IFF	SYNRLN=1 
SEDV02	EQU	REDV02+/01	TRANS.UNIT ADDR. LINE 2 
	IFF	SYNRLN=2 
SEDV03	EQU	REDV03+/01	TRANS.UNIT ADDR. LINE 3 
	IFF	SYNRLN=3 
SEDV04	EQU	REDV04+/01	TRANS.UNIT ADDR. LINE 4 
	XIF
* 
X:G	EQU	1	LINE ACCESS PROCEDURE 
ABM	EQU	X:G	0=ARM,1=ABM 
* 
X:H	EQU	0	PROGRAMMED CHANNEL OR IOP 
IOPCON	EQU	X:H	0=PC,1=IOP 
* 
X:I	EQU	0 
STAT	EQU	X:I	STATISTICAL COUNTERS 
* 
CPU852	EQU	1	0=EXTENDED INSTRUCTION SET 
* 
	EJECT
* 
SYUBNR	EQU	2	NR OF INP.BUFFERS IN OPEN/CLOSE
SYIORY	EQU	100	NUMBER OF I/O ERROR RETRIES
SYNRY	EQU	7	NR OF RETRIES (TIME OUT AND I/O)
SYNRTR	EQU	2	NR OF OUTPUT REQUESTS ALLOWED
SYTRWN	EQU	SYNRTR	TRANSMIT WINDOW 
SYNRRC	EQU	2	NR OF INPUT REQUESTS ALLOWED 
SYADCM	EQU	1	COMMAND ADDRESS
SYADRS	EQU	3	RESPONSE ADDRESS 
SYTIM0	EQU	200	TIME OUT VALUE TIMER STATE 0: SILENT TIMER 
SYTIM1	EQU	40	TIME OUT VALUE TIMER STATE 1: WAIT FOR F
SYTIM2	EQU	40	TIME OUT VALUE TIMER STATE 2: WAIT FOR ACK
SYTIM3	EQU	40	TIME OUT VALUE TIMER STATE 3: CHECK BUSY
SYTIM4	EQU	40	TIME OUT VALUE TIMER STATE 4: RESET 
* 
NRLEC1	EQU	SYNRRC+SYUBNR+2	NUMBER OF LINE ECB'S ON DRIVER INTERFACE 
NRLEC2	EQU	SYNRRC+SYNRTR+2	NUMBER OF LINE ECB'S FOR SAVING DWT INFO 
NRLECB	EQU	NRLEC1+NRLEC2	TOTAL NUMBER OF LINE ECB'S 
* 
TRACE	EQU	0	LOGGING OF RECEIVED AND TRANSM. I-FRAMES
LOG	EQU	0	LOGGING OF RECEIVED AND TRANSM. HDLC-FRAMES 
LOOP	EQU	0	LOOPTEST INDICATION
IOPPC	EQU	0	IOP+PC USED ? 
IOLOG	EQU	0	I/O-INSTRUCTIONS LOGGED ? 
* 
***** LINE FILECODES FOR I/O-HANDLER INTERFACE *****
* 
FC:LN1	EQU	/60	FILECODE LINE 1
	IFF	SYNRLN=1 
FC:LN2	EQU	/61	FILECODE LINE 2
	IFF	SYNRLN=2 
FC:LN3	EQU	/62	FILECODE LINE 3
	IFF	SYNRLN=3 
FC:LN4	EQU	/63	FILECODE LINE 4
	XIF
         IFT      SYNRLN=4
LINE4    EQU	1
LINE3    EQU	1
LINE2    EQU	1
         XIF
         IFT      SYNRLN=3
LINE4    EQU	0
LINE3    EQU	1
LINE2    EQU	1
         XIF
         IFT      SYNRLN=2
LINE4    EQU	0
LINE3    EQU	0
LINE2    EQU	1
         XIF
         IFT      SYNRLN=1
LINE4    EQU	0
LINE3    EQU	0
LINE2    EQU	0
         XIF
* 
	IFT	TRACE=0
CURTRP	EQU	0	DUMMY
TRASTR	EQU	0	DUMMY
TRAEND	EQU	0	DUMMY
	XIF
* 
	IFT	LOG=0
CURLGP	EQU	0	DUMMY
LOGSTR	EQU	0	DUMMY
LOGEND	EQU	0	DUMMY
	XIF
* 
*     DUMMY ENTRY 
* 
DW2500	EQU	*
* 
*	 CONNECTION STATE VARIABLES (CSV) 
* 
DISCNT	EQU	0	DISCONNECTED 
CNTA	EQU	1	CONNECTING, LOCAL STATION HAS STARTED
			A CONNECT SEQUENCE BY SENDING
			A SARM OR SABM 
	IFT	ABM=0
CNTB	EQU	2	CONNECTING, LOCAL STATION IS WAITING 
			FOR RESPONSE ON HIS TRANSMITTED SARM AFTRE 
			HAVING RECEIVED A SARM FROM THE REMOTE 
			STATION. 
CNTC	EQU	3	CONNECTING, LOCAL STATION HAS RECEIVED 
			UA ON HIS TRANSMITTED SARM AND IS NOW
			WAITING FOR THE REMOTE SARM
	XIF
CNT	EQU	4	CONNECTED 
CNTRES	EQU	5	CONNECTED, DUE TO AN ERROR A 
			CMDR/FRMR IS TRANSMITTED, THE
			LOCAL STATION IS WAITING FOR 
			REMOTE RESET REQUEST 
CNTRS1	EQU	6	RESETTING, LOCAL STATION IS WAITING
			FOR THE RESPONSE ON HIS SARM 
DISCF	EQU	7	DISCONNECTING, A LOCAL DISCONNECT 
			REQUEST IS RECEIVED, THE LOCAL 
			STATION IS WAITING FOR AN F-BIT
			BEFORE TRANSMITTING A DISC.
DISCA	EQU	8	DISCONNECTING, LOCAL STATION HAS
			STARTED THE DISCONNECT SEQUENCE
			BY SENDING A DISCONNECT. 
	IFT	ABM=0
DISCB	EQU	9	DISCONNECTING, LOCAL STATION IS 
			WAITING FOR RESPONSE ON HIS
			TRANSMITTED DISC, AFTER
			HAVING RECEIVED A DISC 
			FROM THE REMOTE STATION
DISCC	EQU	10	DISCONNECTING, LOCAL STATION IS WAITING
			FOR RESPONSE ON HIS DISC, AFTER HAVING 
			RECEIVED A DISC FROM THE REMOTE
			STATION DURING CONNECTING
DISCD	EQU	11	DISCONNECTING, LOCAL STATION IS WAITING
			FOR RESPONSE ON HIS DISC, AFTER HAVING 
			RECEIVED A DISC FROM THE REMOTE
			STATION DURING DISCONNECTING 
DISCE	EQU	12	DISCONNECTING, LOCAL STATION IS WAITING
			FOR REMOTE DISC, AFTER HAVING RECEIVED 
			A RESPONSE ON HIS TRANSMITTED DISC 
	XIF
	EJECT
* 
*****  NOTIFICATIONS  ***** 
* 
* 
* 
NTAC	EQU	0	ACCEPTED CALL
NTNC	EQU	1	NOT CONNECTED
NTQF	EQU	2	TOO MANY CALL'S
NTTL	EQU	3	LENGTH ERROR 
NTND	EQU	4	SECOND CONNECT NOT ACCEPTED
NTPCI	EQU	5	INCORRECT NR OF PROTOCOL BUFFERS
NTNA	EQU	6
IIFRA	EQU	7	I-FRAME ACCEPTED
NTQE	EQU	9	QUEUEING ERROR 
NTDC	EQU	10	DISCONNECTED
NTPR	EQU	11	INCORRECT PRIORITY
NTLD	EQU	12	LOCAL DISCONNECT
NTRD	EQU	13	REMOTE DISCONNECT 
NTTO	EQU	14	DEFINIT TIME OUT
NTCU	EQU	/8010	UNKNOWN DEVICE ADDRESS 
NTRRST	EQU	17	RECEIVER RESET
NTTRST	EQU	18	TRANSMITTER RESET 
* 
* 
***** ECB EQUATES ***** 
* 
* 
* 
ECBFC	EQU	0 
ECBBA	EQU	2 
ECBRL	EQU	4 
ECBEL	EQU	6 
ECBRC	EQU	8 
ECBPR	EQU	10
* 
* 
* 
***** FOR GENERAL USE ***** 
* 
* 
* 
ITYP	EQU	/11
STYP	EQU	/1F
UTYP	EQU	/FF
INPER1	EQU	0	I/O-HANDLER ERROR CONTROL WORD MASK
***			BIT 15: MODEM NOT OPERABLE
***			BIT 14: THROUGHPUT ERROR
***			BIT 13: CRC ERROR 
***			BIT 12: INCORRECT LENGTH
***			BIT 10: 
***			BIT 10: CARRIER OFF 
* 
* 
	EJECT
* 
***** ALLOWED LKM ORDERS *****
* 
* 
* 
READ	EQU	/02
WRITE	EQU	/06 
CONN	EQU	/21
DISCN	EQU	/22 
STATR	EQU	/2D 
* 
* 
* 
***** LEVEL 1 ALLOWED ORDERS *****
* 
* 
* 
ORCNL1	EQU	1	LEVEL 1 CONNECT REQUEST
ORINL1	EQU	2	LEVEL 1 INPUT REQUEST
OROTL1	EQU	3	LEVEL 1 OUTPUT REQUEST 
ORDIL1	EQU	4	LEVEL 1 DISCONNECT REQUEST 
ORTIL1	EQU	5	TIMER ORDER
* 
* 
* 
***** DWT DISPLACEMENTS ***** 
* 
* 
* 
DWTPT	EQU	/18 
* 
	IFT	STAT=1 
	EJECT
***** STATISTICAL COUNTER IDENTIFICATIONS 
* 
*	RECEIVER STATISTICS 
* 
R.I	EQU	0	I-FRAMES
R.RR	EQU	2	RR-FRAMES
R.RNR	EQU	4	RNR-FRAMES
R.REJ	EQU	6	REJ-FRAMES
R.DISC	EQU	8	DISC-FRAMES
R.SABM	EQU	10	SABM/SARM-FRAMES
R.DM	EQU	12	DM-FRAMES 
R.UA	EQU	14	UA-FRAMES 
R.FRMR	EQU	16	FRMR/CMDR-FRAMES
R.INV	EQU	18	INVALID FRAMES 
* 
*	TRANSMITTER STATISTICS
* 
T.I	EQU	20	I-FRAMES 
T.RR	EQU	22	RR-FRAMES 
T.RNR	EQU	24	RNR-FRAMES 
T.REJ	EQU	26	REJ-FRAMES 
T.DISC	EQU	28	DISC-FRAMES 
T.SABM	EQU	30	SABM/SARM-FRAMES
T.DM	EQU	32	DM-FRAMES 
T.UA	EQU	34	UA-FRAMES 
T.FRMR	EQU	36	FRMR/CMDR-FRAMES
T.TOUT	EQU	38	NUMBER OF TIME OUTS 
T.RETRY	EQU	40	NUMBER OF RETRIES
STALNG	EQU	T.RETRY+2	LENGTH OF STATISTIC AREA 
	XIF
* 
* GENERAL LIST OF EQUATES TO BE USED WITH THE HDLC PROTOCOL 
* 
I        EQU      /00                   I-FRAME 
IP       EQU      /10                   I-FRAME + P-BIT 
RR       EQU      /01                   RR-FRAME
RRP      EQU      /11                   RR-FRAME + P-BIT
RRF      EQU      RRP                   RR-FRAME + F-BIT
RNR      EQU      /05                   RNR-FRAME 
RNRP     EQU      /15                   RNR-FRAME + P-BIT 
RNRF     EQU      RNRP                  RNR-FRAME + F-BIT 
REJ      EQU      /09                   REJ-FRAME 
REJF     EQU      /19                   REJ-FRAME + F-BIT 
REJP	EQU	REJF	REJ-FRAME + P-BIT 
SABM     EQU      /2F                   SABM-FRAME
SABMP    EQU      /3F                   SABM-FRAME + P-BIT
SARM	EQU	/0F	SARM-FRAME 
SARMP	EQU	/1F	SARM-FRAME+ P-BIT 
DISC     EQU      /43                   DISC-FRAME
DISCP    EQU      /53                   DISC-FRAME + P-BIT
UA       EQU      /63                   UA-FRAME
UAF      EQU      /73                   UA-FRAME + F-BIT
DM       EQU      /0F                   DM-FRAME
DMF      EQU      /1F                   DM-FRAME + F-BIT
FRMR     EQU      /87                   FRMR/CMDR-FRAME 
FRMRF    EQU      /97                   FRMR/CMDR-FRAME + F-BIT 
NVT      EQU      /FF                   ANY OTHER NOT SPECIFIED FRAME 
* 
* 
         EJECT
* 
* 
*	PROTOCOL INITIATION PART
* 
********************************************* 
* 
*	INITIATED ARE - PARAMETER TABLE 
*	              - PROTOCOL STATUS 
*	              - ALL QUEUES
*	              - STATISTICAL COUNTERS
*	              - CONNECT BUFFER POINTER
* 
*	CALLING SEQUENCE: 
*		CF  A15,DC25ON 
* 
DC25ON	EQU	*
	LD	A7,TABPAR	NUMBER OF ENTRIES IN TABLE
	ST	A7,NUM	.
INI2	EQU	*
	LD	A6,TABPAR,A7	GET PARAMETER TABLE ADDRESS
	LDR	A2,A7	GET LINE INDEX 
	SRL	A2,1 
	LD	A7,TABPAR-2,A7	GET FILECODE FOR I/O-HANDLER 
	LD	A5,STB,A6	STACK BASE
	CF	A5,INIT	INITIATE PARAMETERS 
	LD	A7,NUM
	SUK	A7,4 
	ST	A7,NUM
	RB(P)	INI2	YES 
	RTN	A15
NUM	EQU	* 
	DATA	0	WORK AREA 
	EJECT
* 
* 
*	LKM REQUEST HANDLER 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A6 = DWT-ADDRESS 
*		A7 = ORDER 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABI   DRDC25 
* 
         DATA     -2
DRDC25	DATA	PCALL	ENTRYPOINT FOR APPLICATION
PCALL    EQU      * 
	INH		USE OF THIS LEVEL IS PROHIBITTED
			DURING THIS TIME 
* 
*     A5 WILL BE SET TO STACKBASE PER FILE CODE 
*        IN THE PARAMETER TABLE 
*     A6 WILL BE SET TO THE PARAMETER TABLE ADDRESS 
	LD	A2,DWTTAB,A6	GET TTAB FROM DWT
	LD	A4,DWTWAT,A6	GET WAIT ON ACTIVATION IND FROM DWT
	LDKL	A3,/8000	SET DWT STATUS INACTIVE
	ST	A3,DWTST,A6	. 
	LD	A1,DWTPT,A6	GET ADDR PARAMETER TABLE PARTA1 
	ST	A6,DWTAD,A1	SAVE DWT ADDR IN PARTA1 
	LDR	A6,A1	A6 IS NOW ADDRESS PARTA1 
	LDK	A3,1 
	ST	A3,BUSY,A6	SET PROTOCOL HANDLER BUSY
	LD	A5,STB,A6	GET OWN STACK BASE ADDRESS
	LDR	A1,A8	SAVE ECB ADDRESS 
	CF	A5,GLECB	GET ADDR. LINE ECB IN A8 
	STR	A2,A8	SAVE DWTTAB
	ST	A4,2,A8	SAVE DWTWAT 
	LD	A2,ECBPR,A1	GET PRIORITY FROM ECB 
	ST	A2,4,A8	SAVE PRIORITY 
	ST	A8,ECBPR,A1	SAVE LINE ECB ADDRESS IN ECB
	LDR	A8,A1	RESET ORIGINAL ECB ADDRESS 
	ENB
	LDK	A4,0	RESET POINTER TO ORDER
PCALL1	EQU	*
	LD	A1,ORDTAB,A4	GET ALLOWED ORDER
	RF(N)	INVAL	LAST ORDER DETECTED
	CWR	A1,A7	EQUAL TO RECEIVED ORDER ?
	ABI(E)	ORDER,A4	GO TO ORDER PROCESS
	ADK	A4,2	UPDATE POINTER
	RB	PCALL1	TRY AGAIN
* 
*     TABLE WITH ENTRIES BELONGING TO ORDER 
* 
ORDER	DATA	CREAD	IF CALL READ RECEIVED
	DATA	CREAD	IF CALL WRITE RECEIVED
	DATA	CCONN	IF CALL CONNECT RECEIVED
	DATA	CDISC	IF CALL DISCONNECT RECEIVED 
	IFT	STAT=1 
	DATA	CSTAT	IF CALL FOR STATISTICS RECEIVED 
	XIF
* 
INVAL	EQU	* 
	LDKL	A1,NTNA	NOTIFICATION NO ACCEPTED
	CF	A5,Q.ERDY	QUEUE EVENT READY 
	RF	EXT 
* 
ORDTAB	EQU	*	LIST OF ORDERS 
*                                            ISSUED BY A HIGHER LEVEL 
         DATA     READ
         DATA     WRITE 
         DATA     CONN
         DATA     DISCN 
	IFT	STAT=1 
	DATA	STATR 
	XIF
	DATA	-1
	EJECT
* 
* 
*	INPUT REQUEST HANDLER 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A4 = INDEX IN ORDER TABLE
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   CREAD
* 
*     THE APPLICATION DRIVEN READ 
*     THIS PART WILL PERFORM THE REQUIRED ACTIONS FOR THE CALL READ 
* 
CREAD    EQU      * 
	LDK	A1,NTNC	PRESET ERROR CODE
	LD	A2,PROTST,A6	GET PROTOCOL STATUS
	RF(NZ)	CREADC	READ NOT ALLOWED 
	LD	A1,LECBRC,A6	PRESET RETURN CODE 
	LD	A2,DRIVST,A6	LD DRIVER STATUS 
	RF(NZ)	CREADC	DRIVER NOT CONNECTED 
	LDK	A1,NTTL	PRESET ERR. CODE LENGTH ERROR
	LD	A2,ECBRL,A8	GET REQUESTED LENGHTH 
	LDR	A4,A4	IS IT A WRITE REQUEST ?
	RF(NZ)	CWRITE	YES
	CW	A2,SYLEN,A6	LENGTH CORRECT ?
	RF(NE)	CREADC	INCORRECT LENGTH 
	LD	A3,Q1IRAD,A6	INPUT REQUEST QUE ADDRESS
	LDK	A1,NTQF	PRESET RETURN CODE 
	LD	A4,NN,A3		ROOM FOR SAVING ? 
	RF(NP)	CREADC	INPUT QUEUE FULL 
	CF	A5,PUTBUF	YES ? SAVE !
	LD	A7,ECBBA,A8	GET BUFFER ADDRESS
	CF	A5,L1INPQ	INPUT REQUEST WITH IMPL. GLECB(A7)
	LD	A1,SINS,A6	GET SINK STATE 
	CWK	A1,1	SINK STATE BUSY ? 
	RF(NE)	EXT	NO !
	IM	SINS,A6	SET SINS =2 
	LD	A1,PART1,A6 
	ANKL	A1,/FBFF	RESET IN.RNR IF SET
	ORKL	A1,/0200	SET IN.REJ 
	ST	A1,PART1,A6 
TRANST	EQU	*
	CF	A5,TRAN	CALL TRANSMITTER
EXT	EQU	* 
	ABL	EXIT 
CREADC	EQU	*
	RF	CONFL1	ERROR RETURN 
	EJECT
* 
* 
*	OUTPUT REQUEST HANDLER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   CWRITE 
* 
*     THE APPLICATION DRIVEN WRITE
* 
CWRITE	EQU	*
	CW	A2,SYLEN,A6	MAXIMUM LENGTH ?
	RF(G)	CONFL1	TOO LARGE 
	SUK	A2,2 
	RF(NP)	CONFL1	LENGTH ERROR 
	LDKL	A1,NTQF	PRESET ERROR CODE 
	LD	A2,SC,A6
	AD	A2,AC,A6
	ADR	A2,A2
	LD	A3,Q1SCAD,A6	IS SEND QUEUE FULL ? 
	SU	A2,NN,A3	.
	RF(Z)	CONFL1	YES, WRITE NOT ALLOWED
	CF	A5,PUTBUF	SAVE ELEMENT IN QUE 
	IFT	TRACE=1
	CF	A5,LOGTRC	TRACE 
	XIF
	IM	SC,A6	INCREMENT SEND COUNT
	RB	TRANST	START TRANSMITTER
	EJECT
* 
* 
*	CONNECT REQUEST HANDLER 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   CCONN
* 
CCONN	EQU	* 
	LDK	A1,NTND	PRESET RETURN CODE 'NOT DISCONNECTED'
	LD	A2,PROTST,A6
	RF(NN)	CONFL1	STATUS NOT DISCONNECT
* INITIATE PROTOCOL 
	LDK	A1,DISCNT
	ST	A1,CSV,A6	SET CSV = DISCONNECTED
	CM	SINS,A6	SET RECEIVER NOT BUSY 
	LDKL	A1,-1 
	ST	A1,TST,A6	TIMER STATE 
	CM	SC,A6	RESET SEND COUNTER
	CM	AC,A6	RESET ACKNOWLEDGE COUNT 
	CM	OUTSTP,A6	NO P-BIT OUTSTANDING
	CM	PART1,A6	NO TRANSMITTER ACTIONS 
	CF	A5,RESTR	RESET TRANSMITTER VARIABLES
	CF	A5,RESREC	RESET RECEIVER VARIABLES
	LDKL	A1,0-SYIORY 
	ST	A1,INPRY,A6	INIT RETRY COUNT
	LD	A2,ECBBA,A8	USER BLOCK ADDRESS
	LDK	A1,NTPCI	PRESET ERROR CODE 
	LDR*	A2,A2	NUMBER OF CONNECT BUFFERS 
	CWK	A2,SYUBNR
	RF(NE)	CONFL1	INCORRECT
	LD	A2,ECBRL,A8	GET REQUESTED LENGTH
	ST	A2,SYLEN,A6	SAVE IT AS INPUT LENGTH 
	LDK	A1,1 
	ST	A1,PROTST,A6	PROTOCOL STATUS 'CONNECT BUSY' 
	LD	A1,INBUF,A6 
	ST	A1,CONBUF,A6	INITIATE AREA FOR SAVING THE CONNECT BUFFERS 
*			AT DISCONNECT TIME
	ST	A8,CONECB,A6	SAVE USER ECB
	CF	A5,GLECB	GET ELEMENT FROM LECB QUEUE
	CF	A5,L1CONN	REQUEST LEVEL 1 CONNECT 
	LD	A4,ECBRC,A8	CHECK RETURN CODE 
	RB(NP)	EXT	DEVICE IS KNOWN 
	CF	A5,PLECB	RETURN ELEMENT TO ECB QUEUE
	LDKL	A1,NTCU	RC := DEVICE ADDRESS UNKNOWN
CCONFL	EQU	*
	LDKL	A2,-1 
	ST	A2,PROTST,A6	PROTOCOL STATUS DISCONNECTED 
	LD	A8,CONECB,A6	GET USER ECB 
CONFL1	EQU	*
	CF	A5,Q.ERDY	PUT IN EVENT READY QUE
	RB	EXT 
	EJECT
* 
* 
*	DISCONNECT REQUEST HANDLER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   CDISC
* 
CDISC    EQU      * 
	LDK	A1,NTPCI	PRESET ERROR CODE 
	LD	A2,ECBBA,A8	GET BUFFER ADDRESS
	LDR*	A2,A2	GET NUMBER OF BUFFERS 
	CWK	A2,SYUBNR	EQUAL TO SYSGEN DEFINED? 
	RF(NE)	CDISC3	NO!
	LDK	A1,NTNC	PRESET RETURN CODE 
	LD	A2,PROTST,A6	GET PROTOCOL STATUS
	LDKL	A3,-1 
	ST	A3,PROTST,A6		AND SET DISCONNECTED
	LDR	A2,A2	SET COND REG.
	RF(N)	CDISC3	WAS ALREADY DISCONNCTED 
	ST	A8,DISECB,A6	SAVE ECB ADDRESS 
	LDK	A1,NTLD	SET LOCAL DISC DURING OPEN 
	ST	A1,LECBRC,A6	SAVE RETURN CODE 
	LDR	A2,A2	GET ORIGINAL PROTOCOL STATUS 
	RF(Z)	CDISC4	OPEN READY
	LD	A8,CONECB,A6	GET CONNECT ECB
	LD	A2,DRIVST,A6	GET DRIVER STATUS
	RF(NZ)	CDISC1	DRIVER STOPPED OR NOT CONNECTED
	CM*	ECBBA,A8 
	CF	A5,Q.ERDY	RETURN CONN.REQ.WITHOU BUFFERS
	CF	A5,L1STPQ	STOP DRIVER WITH IMPL. LECB REQUEST 
	RF	CDISC2
CDISC1	EQU	*
	CF	A5,Q.ERDY	RETURN CONN.REQ.WITH BUFFERS
CDISC2	EQU	*
	ABL	EXT	FINISHED 
* 
CDISC3	EQU	*
	CM*	ECBBA,A8	INDICATION: NO BUFFERS RETURNED!
	RB	CONFL1
* 
CDISC4	EQU	*
	LD	A2,DRIVST,A6	GET DRIVER STATUS
	RB(P)	CDISC2	STATUS STOPPED
	ADK	A2,1	TEST IF STATUS DISCONNECTED(-1) 
	ABL(Z)	DISRD3	DRIVER ALREADY DISCONNECTED,RETURN 
         LD       A1,OUTSTP,A6          CHECK OUTST.P IS SET
	RF(NZ)	CDISC6	YES ! FRAMES OUTSTANDING 
	LDKL	A1,/0820	SET IN.DISC AND IN.P 
         ORS      A1,PART1,A6           IN PARAMETER TABLE
	LDK	A1,DISCA	CSV BECOMES DISCONNECTING 
	RF	CDISC7
* 
CDISC6   EQU      * 
	LDK	A1,DISCF	CSV BECOMES DISCONNECTING, WAIT FOR F 
CDISC7	EQU	*
	ST	A1,CSV,A6 
	ABL	TRANST	START TRANSMITTER 
	IFT	STAT=1 
	EJECT
* 
* 
*	STATISTICS REQUEST HANDLER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   CSTAT
* 
CSTAT	EQU	* 
	LDK	A1,STALNG	LENGTH OF COUNTER AREA 
	CW	A1,ECBRL,A8	COMPARE WITH USER AREA
	RF(L)	CSTAT1 
	LD	A1,ECBRL,A8	TAKE SMALLEST ONE 
CSTAT1	EQU	*
	ANKL	A1,/FFFE	MAKE LENGTH EVEN 
	ST	A1,ECBEL,A8	TO USER ECB 
	LD	A2,STASTR,A6	START ADDRESS COUNTER AREA 
	LD	A3,ECBBA,A8	START ADDRESS USER AREA 
CSTAT2	EQU	*
	SUK	A1,2	REDUCE LENGTH COUNTER 
	RF(N)	CSTAT3	READY 
	LDR*	A4,A2	COPY COUNTER
	STR	A4,A3	.
	CMR	A2	CLEAR COUNTER 
	ADK	A2,2	UPDATE POINTERS 
	ADK	A3,2	. 
	RB	CSTAT2	NEXT ONE 
* 
CSTAT3	EQU	*
	LDK	A1,NTAC	SET RETURN CODE
	RB	CONFL1	EXIT 
	XIF
	EJECT
* 
* 
*	INTERRUPT DRIVEN SCHEDULER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A1 OR A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ACTIVATION ON LABEL IDREQT BY TIME-OUT ROUTINE 
*		ABL   IDREQ FOR REAL INTERRUPTS
* 
*****	ENTRY FOR ALL TIME OUT REQUESTS ACTIVATED BY TIMER
* 
IDREQT	EQU	*	INTERRUPT DRIVEN TIMER ENTRY 
	LDR	A8,A1	ECB ADDRESS IN CORRECT REGISTER
*****	ENTRY FOR ALL I/O-HANDLER INTERRUPT REQUESTS
* 
* 
IDREQ	EQU	* 
	INH
	LDR*	A1,A8	GET FILE CODE 
	LD	A2,TABPAR	GET TABLE LENGTH
IDR1	EQU	*
	CC	A1,TABPAR-1,A2	DOES THE FILECODE MATCH
	RF(E)	IDR2	YES 
	SUK	A2,4	TAKE NEXT ENTRY 
	RB	IDR1
IDR2	EQU	*
	LD	A6,TABPAR,A2	GET PARAMETER TABLE ADDRESS
	LD	A5,NEWSTB,A6	GET STACK BASE 
	LD	A1,BUSY,A6	CHECK IF LEVEL BUSY
	RF(Z)	IDNOTB 
	LD	A3,Q1COAD,A6	ADDRESS OF INTERRUPT REQUEST QUE 
	CF	A5,PUTBUF 
EXRAI	EQU	*	RETURN AFTER INTERRUPT
	ENB
	ABL	TDISP
* 
* 
IDNOTB	EQU	*
	LD	A5,STB,A6	MAKE CF STACK IN PARTA1 
	LDK	A1,1 
	ST	A1,BUSY,A6	SET LEVEL BUSY 
	EJECT
****	ENTRY FOR THE INTERRUPT REQUEST HANDLER
*	AND THE EXIT REQUEST HANDLER WHEN THE INTERRUPT 
*	REQUEST QUEUE WAS NOT EMPTY.
* 
IDCONT	EQU	*
	ENB
	LD	A7,ECBPR,A8	GET ORDER 
	RF(P)	IDCN2
IDCN1	EQU	* 
	HLT		ILLEGAL ORDER 
IDCN2	EQU	* 
	CWK	A7,5 
	RB(G)	IDCN1	ILLEGAL ORDER
	LDKL	A1,/302F
	ANS	A1,ECBRC,A8	RESET NOT RELEVANT BITS IN RETURNCODE
	RF(Z)	IDCN3	NO ERROR 
	LDKL	A1,/8000
	ORS	A1,ECBRC,A8	BIT 0=1: DRIVER ERROR
IDCN3	EQU	* 
	LDR	A2,A8	SAVE ECB ADDRESS 
	ADR	A7,A7	MAKE ORDER A POINTER IN ENTRY TABLE
	ABI	IDRY,A7	START SELECTED PART
* 
IDRY	EQU	*-2
	DATA	CONRDY	ORDER=1, CONNECT READY 
	DATA	RECRDY	ORDER=2, INPUT READY 
	DATA	OUTRDY	ORDER=3, OUTPUT READY
	DATA	DISRDY	ORDER=4, DISCONNECT READY
	DATA	TIMRDY	ORDER=5, TIMER OVERFLOW
	EJECT
* 
* 
*	CONNECT REQUEST READY INTERRUPT HANDLER 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   CON.RDY
* 
CON.RDY   EQU      *                     RETURN ADDRESS AFTER CON.READY 
	CF	A5,PLECB	STORE LECB IN QUEUE
	LD	A1,ECBRC,A8	GET CONDITION REGISTER
	RF(NZ)	CCONN6	CONNECTION FAILED
	LDK	A1,0 
	ST	A1,DRIVST,A6	DRIVER STATUS CONNECTED
	LD	A1,PROTST,A6
	RF(NN)	CCONN5	NO DISCONNECT REQUEST BY PROTOCOL
	CF	A5,L1STPQ	STOP DRIVER WITH IMPL. LECB REQUEST 
	CF	A5,L1DISQ	DISCONN DRIVER IMPL. LECB REQUEST 
	ABL	EXIT	READY 
CCONN5	EQU	*
	LD	A8,CONECB,A6	USER ECB ADDRESS 
         LD       A2,ECBBA,A8           GET BLOCK ADDRESS 
	LDR*	A1,A2	GET NUMBER OF BUFFERS 
CCONN4	EQU	*
	LD	A7,2,A2 
	CF	A5,L1INPQ	INPUT DRIVER WITH IMPL. ECB REQUEST 
	ADK	A2,2 
	SUK	A1,1	DECREMENT NUMB OF BUFFERS 
	RB(NZ)	CCONN4
* 
*     NOW INITIALIZE PARAMETER TABLE
* 
         LDK      A1,CNTA 
         ST       A1,CSV,A6             SET CSV TO CONNECTING 
         LDKL     A1,/1020              SET IN.SABM/IN.SARM , IN.P
         ORS      A1,PART1,A6           IN PARAMETER TABLE
	ABL	TRANST	START TRANSMITTER 
CCONN6	EQU	*
	LD	A2,PROTST,A6
	ABL(NN)	CCONFL	CONNECTION FAILED 
	ABL	DISRD5	RETURN CONNECT BUFS IN DISC-REQ.
	EJECT
* 
* 
*	OUTPUT REQUEST READY INTERRUPT HANDLER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   OUT.RDY
* 
* 
* 
OUT.RDY	EQU	* 
	LDK	A1,0 
	ST	A1,OUTPEN,A6	RESET OUTPUT PENDING 
	CF	A5,PLECB	STORE LINE ECB IN QUEUE
	LD	A1,DRIVST,A6	GET DRIVER STATUS
	RF(P)	OTSTP	DRIVER STOPPED 
	RF(NN)	OUTEX	RESTART TRANSMITTER 
*	PROTOCOL HAS SET A REQUEST TO STOP THE DRIVER 
*	BECAUSE OF A REMOTE DISCONNECT
*	MAYBE THE UA OR DM FRAME HAS TO BE SENT FIRST 
*** 
	LD	A1,PART1,A6	THE PROTOCOL REQUESTED A STOP AFTER 
*			UA OR DM FRAME IS SENT
	ANKL	A1,/6000	CHECK IF THE FRAME IS ALREADY SENT 
	RF(NZ)	OUTEX	UA OR DM FRME MUST BE SENT
	LDK	A1,NTRD	ALREADY SENT, R.C. IS REMOTE DISC
	ST	A1,LECBRC,A6	SAVE ERROR CODE
	CF	A5,L1STPQ	STOP DRIVER IMPL. ECB REQ.
* 
OTSTP	EQU	* 
	LD	A1,INP.CNT,A6	INPUT PENDING ? 
	RF(NZ)	OUTEX	NOT READY 
	CF	A5,L1DISQ	DISC. DRIVER IMPL. ECB REQ. 
OUTEX	EQU	* 
	ABL	TRANST	FINISHED
* 
* 
DQEV	EQU	*
	LDR	A7,A3	SAVE QUE ADDRESS 
DQEV1	EQU	* 
	LD	A4,NF,A3	NUMBER OF ELEMENTS 
	RF(Z)	DQEND	QUE EMPTY
	CF	A5,GETBUF	GET ELEMENT 
	LD	A1,LECBRC,A6	GET RETURN CODE
	CF	A5,Q.ERDY	PUT IN EVENT READY QURE 
	LDR	A3,A7	RELOAD QUE ADDRESS 
	RB	DQEV1	GET NEXT ELEMNT 
DQEND	EQU	* 
	RTN	A5	FINISHED
DQOUT	EQU	*	DEQUEUE ALL OUTPUT REQUESTS 
*			AND STORE INT EVENT READY QUEUE 
	LD	A3,Q1ACAD,A6	ACKNOWLEDGE QUEUE
	CF	A5,DQEV 
	LD	A3,Q1SCAD,A6	SEND QUEUE 
	CF	A5,DQEV 
	RTN	A5 
	EJECT
* 
* 
*	INPUT READY INTERRUPT HANDLER 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABLREC.RDY 
* 
* 
* 
REC.RDY	EQU	* 
	LDR	A2,A8	SAVE ECB ADDRESS 
	LDKL	A1,-1 
	ADS	A1,INP.CNT,A6	DECREMENT PENDING INPUT REQUEST
	LD	A1,DRIVST,A6	GET DRIVER STATUS
	RF(P)	INP.STP	STATUS STOPPED 
	RF(N)	INPST1	PROTOCOL REQUESTED A STOP LINE
*			WHEN OUT PUT IS READY (UA OR DM)
	LD	A1,ECBRC,A8	GET RETURN CODE 
	RF(NZ)	INPER	INPUT ERROR HARDWARE
	LDKL	A1,0-SYIORY	NEG NR OF RETRIS
	ST	A1,INPRY,A6	RESET RETRY COUNT 
* 
	CF	A5,REC	CALL RECEIVER
	RB	OUTEX	START TRAN AND EXIT 
* 
* 
* 
INPER	EQU	* 
	LD	A3,ECBRL,A8	GET TIMER READY SIMULATION FLAG 
	RF(Z)	INP100	INPUT SIMULATED BY TIMER
	IM	INPRY,A6	INCREMENT INPUT RETRY COUNT
	RF(Z)	INPIRR	IRRECOVERABLE ERROR 
	ANKL	A1,INPER1	INPUT ERROR MASK
	RF(NZ)	INPIRR	IRRECOVERABLE
	EJECT
* 
***	SIMULATE INPUT REQUEST VIA TIMER REQUEST
* 
	IM	INPCNT,A6	INCREASE INPUT COUNT
	CM	ECBRL,A8	SET INPUT SIMULATION FLAG
***			ECBRL IS NOT ZERO WHEN NORMAL INPUT IS READY
	LDR	A1,A8	A1=PARAMETER FOR TIMER(ECB ADDRESS)
	CF	A15,SETIME	START TIMER
	DATA	IDREQT	ENTRY AT TIMER OVERFLOW RETURN 
	DATA	1	TIMER VALUE = 1/10 SECONDS
	ENB
	RF	EXIT	READY
***	RESTART INPUT REQUEST AFTER TIMER READY 
* 
INP100	EQU	*
	CF	A5,L1INP	LEVEL 1 INPUT REQUEST
	RF	EXIT	EXIT 
* 
	EJECT
* 
INPIRR	EQU	*	IRRECOVERABLE ERROR
	ST	A1,LECBRC,A6	SAVE RETURN CODE 
	CF	A5,L1STPQ	STOP DRIVER IMPL. ECB REQ.
INPSTP	EQU	*
	LD	A1,OUTPEN,A6	NUMBER OF OUTP REQ PEND. 
	AD	A1,INP.CNT,A6	AD INP REQ PENDING
	RF(NZ)	INPST1	NO DISCONNECT AT THIS MOMENT 
	CF	A5,L1DISQ	DISC DRIVER IMPL ECB REQ. 
INPST1	EQU	*
	LDR	A8,A2	RELOAD ORIGINAL LINE ECB ADDR. 
	CF	A5,PLECB	STORE LINE ECB IN QUEUE
	CF	A5,DQINEV	RETURN INPUT EVENT TO CALLER
	RF	EXIT	EXIT 
DQINEV	EQU	*
	LD	A4,ECBBA,A8	GET GET BUFFER ADDRESS
	LD	A3,Q1IRAD,A6	GET INPUT REQUEST QUE ADDRESS
	LD	A1,NF,A3	REQUESTS PENDING ? 
	RF(Z)	DQINEM	QUE EMPTY 
	CF	A5,GETBUF	GET ELEMENT 
	ST	A4,ECBBA,A8	SAVE BUFFER ADDRESS 
	LD	A1,LECBRC,A6	GET RETURN CODE
	CF	A5,QERDY	INPUT EVENT READY
	RTN	A5 
* 
* 
DQINEM	EQU	*
	ST*	A4,CONBUF,A6	SAVE CONNECT BUFFER 
	LDK	A4,2	INCREMENT POINTER ADDRESS 
	ADS	A4,CONBUF,A6 
	RTN	A5	FINISHED
* 
* 
	EJECT
* 
* 
*	DISCONNECT READY INTERRUPT HANDLER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   DIS.RDY
* 
DIS.RDY	EQU	* 
	CF	A5,PLECB	STORE LECB IN QUEUE
	CF	A5,DQOUT	RETURN ALL OUTPUT REQUESTS 
	LD	A1,PROTST,A6	GET PROTOCOL STATUS
	RF(Z)	EXIT	EXIT
	RF(P)	DISOP	COMPLETE OPEN REQUEST
DISRD5	EQU	*
	LD	A8,DISECB,A6	GET DISCONNECT ECB 
DISRD3	EQU	*
	LDK	A1,0	PRESET RETURNCODE 
	ST	A1,LECBRC,A6	SAVE IN PARTA1 
DISRD2	EQU	*	 
	LD	A2,ECBBA,A8	GET ADDRESS OF USER BLOCK 
	LD	A1,CONBUF,A6	EXTRACT POINTER
	LDR	A4,A1
	SU	A4,INBUF,A6 
	SRL	A4,1 
	STR	A4,A2
	RF(Z)	DISRD0 
DISRD1	EQU	*
	ADK	A2,2	STORE POINTER 
	SUK	A1,2	SET POINTER TO CORRECT ADDRESS
	LDR*	A7,A1	GET BUFFER ADDRESS
	STR	A7,A2	SAVE IN USER BLOCK 
	SUK	A4,1 
	RB(NZ)	DISRD1
DISRD0	EQU	*
	LD	A1,LECBRC,A6	GET RETURN CODE
	CF	A5,Q.ERDY	QUE EVENT READY 
	RF	EXIT	EXIT 
DISOP	EQU	* 
	LD	A8,CONECB,A6	GET CONNECT ECB
	LDKL	A1,-1 
	ST	A1,PROTST,A6	SET PROTOCOL STATUS DISCONNECT 
	RB	DISRD2	COMPLETE 
	EJECT
* 
* 
*	LEVEL 2 END I/O AND EXIT ROUTINE
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   EXIT 
* 
* 
* 
* 
EXIT	EQU	*
* 
	ENB
	LD	A3,Q1ERAD,A6	EVENT READY QUE
	LD	A4,NF,A3	NUMB OF FREE ELEMENTS
	RF(Z)	EX150	SET NOT BUSY BEFORE RETURN A.I.
	LD	A4,DWTAD,A6	GET ADDRESS OF DWT
***      TEST IF DWT IS JUST UPDATED BY THE MONITOR (TIO) 
         LD       A1,DWTST,A4 
         RF(NN)   EX200            YES! 
	CF	A5,GETBUF	REQUEST ELEMENT 
	LDR	A1,A8	SAVE ECB ADDRESS 
	LD	A8,ECBPR,A1	GET ADDRESS SAVE AREA LIECB 
	LDR*	A2,A8	GET TTAB ADDRESS
	ST	A2,DWTTAB,A4	SAVE IN DWTTAB OF DWT
	LD	A2,2,A8	GET WAIT OR ACTIVATION INDICATION 
	ST	A2,DWTWAT,A4	SAVE IN DWTWAT OF DWT
	LD	A2,4,A8	GET PRIORITY FIELD
	ST	A2,ECBPR,A1	STORE IN ORIGINAL ECB 
	CF	A5,PLECB	RELEASE LINE ECB 
	LDR	A8,A1	RELOAD ORIGINAL ECB IN A8
	ST	A8,DWTECB,A4	STORE ECB IN DWT 
	LD	A1,ECBRC,A8	GET RETURN CODE 
	LDR	A2,A6	SAVE A6
	LDR	A6,A4	A6=DWT-ADDRESS 
	CF	A15,TENDIO	COMPLETE EVENT 
	LDR	A6,A2	RESTORE A6 
	LD	A5,STB,A6	RELOAD STACK BASE 
	RB	EXIT	TRY NEXT 
EX150	EQU	* 
	LD	A3,Q1COAD,A6	ADDRESS INTERRUPT REQUEST QUEUE
	INH
	LD	A4,NF,A3	QUEUE EMPTY??
	RF(Z)	EX200	NO INTERRUPT REQUEST PENDING 
	CF	A5,GETBUF	GET REQUEST FROM QUEUE
	ABL	IDCONT	ACTIVATE REQUEST
EX200	EQU	* 
	CM	BUSY,A6	SET PROTOCOL NOT BUSY 
	ABL	TDISP	RETURN AFTER INTERRUPT 
* 
* 
Q.ERDY	EQU	*
* 
*     ENTRY PARAMETERS: 
*          A1=RETURN CODE 
*          A6=PARAMETER TABLE ADDRESS 
*          A8=ECB ADDRESS 
* 
	ST	A1,ECBRC,A8	SAVE RETURN CODE
	LD	A3,Q1ERAD,A6	EVENT READY QUE
	CF	A5,PUTBUF	SAVE IN QUE 
	RTN	A5	RETURN TO CALLER
	EJECT
* 
* 
*	TIMEOUT ROUTINE 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		ABL   TIM.RDY
* 
TIM.RDY	EQU	* 
	LD	A1,TIMADR,A6	TIMER ALREADY STOPPED ?
	RB(Z)	EXIT	YES 
	LDR*	A1,A1	NO REAL TIMEOUT ? 
	RB(N)	EXIT	YES 
	IFT	STAT=1 
	LDK	A1,T.TOUT
	CF	A5,COUNT	COUNT # OF TIMEOUT SITUATIONS
	XIF
	CM	TIMADR,A6	SET TIMER BLOCK NOT PENDING 
	LD	A1,CSV,A6	LOAD CSV FOR USE FURTHERON
	LD	A2,NRT,A6	GET NUMBER OF RETRIES 
	SUK	A2,SYNRY	COMPARE WITH ALLOWED MAXIMUM
	RF(N)	TOTC1	MAXIMUM NOT REACHED
	LDK	A2,DISCNT
	ST	A2,CSV,A6	CSV BECOMES DISCONNECTED
	LDK	A1,NTTO	RETURN CODE FOR DEFINIT TIME OUT 
	ST	A1,LECBRC,A6	SAVE IT
	CF	A5,L1STPQ	STOP DRIVER IMPL. ECB REQ.
	RF	TOTC13	READY
* SELECT ON CSV 
TOTC1	EQU	* 
	CWK	A1,DISCNT
	RF(NE)	TOTC2 
* CSV IS DISCONNECTED 
	LDKL	A2,-1 
	ST	A2,TST,A6	TIMER STATE := -1 
	RF	TOTC13	READY
* 
TOTC2	EQU	* 
	CWK	A1,CNT	CSV = CONNECTED ? 
	RF(NE)	TOTC3	NO
* CSV IS CONNECTED
* SELECT ON TIMER STATE 
	LD	A1,TST,A6 
	RF(Z)	TOTC10	TST = 0 
	SUK	A1,1 
	RF(Z)	TOTC8	TST = 1
	SUK	A1,1 
	RF(Z)	TOTC9	TST = 2
	RF	TOTC10	TST = 3
* 
* 
TOTC3	EQU	* 
	CWK	A1,CNTRES	CSV = CONNECTED, WAIT FOR RESET ?
	RF(NE)	TOTC4	NO
* CSV IS CONNECTED, WAIT FOR RESETTING
	LDKL	A2,/8000
	ORS	A2,PART1,A6	SET IN.FRMR/IN.CMDR IN PART 1
	IM	NRT,A6	INCREMENT # OF RETRIES 
	RF	TOTC13
* 
TOTC4   EQU      *
***      TEST IF WAIT FOR RESPONSE ON RESET 
         CWK      A1,CNTRS1 
         RF(E)    TOTC5A
* 
* ALL OTHER CSV'S 
	LDK	A2,1 
	CW	A2,TST,A6 
	RF(E)	TOTC5	TST .EQ. 1 
	ST	A2,TST,A6	TST := 1
	RF	TOTC12
* 
TOTC5	EQU	* 
	CWK	A1,CNT 
	RF(G)	TOTC6	CSV IS DISCONNECTING 
TOTC5A   EQU      * 
	LDKL	A1,/1020	SET IN.SABM/IN.SARM AND IN.P 
	RF	TOTC7 
* 
TOTC6	EQU	* 
***	TEST IF WAIT FOR F-BIT BEFORE DISCONNECT
	SUK	A1,DISCF 
	RF(NZ)	TOTC6A
	LDK	A1,DISCA 
	ST	A1,CSV,A6 
TOTC6A	EQU	*
	LDKL	A1,/820	SET IN.DISC AND IN.P
TOTC7	EQU	* 
	IM	NRT,A6	INCREMENT # OF RETRIES 
	RF	TOTC11
* 
TOTC8	EQU	* 
	IM	NRT,A6	INCREMENT # OF RETRIES 
TOTC9	EQU	* 
	LD	A2,LNR,A6	GET LAST RECEIVED NR
	ST	A2,VS,A6	SET NEW V(S) 
	CF	A5,DACQSC	DEQUEUE AC AND QUEUE SC 
TOTC10	EQU	*
	LDK	A1,/20 
TOTC11	EQU	*
	ORS	A1,PART1,A6	SET IN.P 
	CM	TST,A6	TST := 0 
TOTC12	EQU	*
	CF	A5,STATIM	START TIMER 
TOTC13	EQU	*
	ABL	TRANST 
	EJECT
* 
* 
*	RECEIVER
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		CF   A5,REC
* 
* 
* THE PROTOCOL RECEIVER MODULE WILL PERFORM ALL NECESSARY 
* ACTIONS TO PROCESS THE CONTENTS OF A RECEIVED FRAME.
* 
* THIS PART IS MAINLY TABLE DRIVEN. 
* 
* THE FOLLOWING TABLES ARE USED:
*        VALTAB:  THIS TABLE CONTAINS ALL FRAME TYPES THAT
*                 ARE KNOWN (ALLOWED) IN THE PROTOCOL.
*                 ALL NON RELEVANT BITS ARE SET TO ZERO.
*                 EXCEPT THE P-BIT. 
*                 THE TABLE KNOWS COMMANDS AND RESPONSES. 
* 
*        ALTAB:   THIS TABLE CONTAINS THE RELATION BETWEEN
*                 A FRAME TYPE AND, FOR THIS FRAME TYPE 
*                 APPLICABLE ENTRY INTO THE RECEIVER TABLE. 
* 
*        PROTAB:  THIS TABLE IS THE MAIN TABLE OF THE 
*                 PROTICOL RECEIVER MODULE. 
*                 DEPENDING ON THE STATE(CVS) AND THE 
*                 GIVEN ENTRYPOINT(BY ALTAB) THIS TABLE 
*                 GIVES THE NEW STATE AND EVENTUALLY FURTHER
*                 REQUIRED ACTIONS(INDICATED BY ONE NUMBER) 
* 
*        ACTAB:   THIS TABLE CONVERTS THE NUMBER AS GIVEN 
*                 BY PROTAB TO A LIST OF ACTIONS WHICH IS 
*                 GIVEN TO EXACT (THE ACTIONS EXECUTER) 
* 
	EJECT
* 
* 
* TABLE DEFINITION OF VALTAB
* 
VALTLO   FORM     8,8                   DEFINE WORD LAY-OUT OF VALTAB 
* 
VALTAB   EQU      *                     FRAME VALIDITY TABLE
IVAL     EQU      *-VALTAB              IVAL POINTER IN VALTAB
         DATA     SVAL-IVAL-2           NUMBER OF TYPES ALLOWED 
         VALTLO   NVT,I                 ONLY I-COMMAND VALID
         VALTLO   NVT,IP                     WITH P-BIT SET 
SVAL     EQU      *-VALTAB              SVAL POINTER IN VALTAB
         DATA     UVAL-SVAL-2           NUMBER OF TYPES ALLOWED 
         IFT      ABM=1 
         VALTLO   RR,RR                 RR-COMMANDS AND RESPONSES 
         VALTLO   RRF,RRP                    WITH P OR F-BIT
         VALTLO   RNR,RNR               RNR-COMMANDS AND RESPONSES
         VALTLO   RNRF,RNRP                  WITH P OR F-BIT
         VALTLO   REJ,REJ               REJ-COMMANDS AND RESPONSES
         VALTLO   REJF,REJP                  WITH P OR F-BIT
         XIF
         IFT      ABM=0 
         VALTLO   RR,NVT           RR-RESPONSE
         VALTLO   RRF,NVT          WITH F-BIT 
         VALTLO   RNR,NVT          RNR-RESPONSE 
         VALTLO   RNRF,NVT         WITH F-BIT 
         VALTLO   REJ,NVT          REJ-RESPONSE 
         VALTLO   REJF,NVT         WITH F-BIT 
         XIF
UVAL     EQU      *-VALTAB              UVAL POINTER IN VALTAB
         DATA     ENUVAL-UVAL-2         NUMBER OR TYPES ALLOWED 
	IFT	ABM=1
	VALTLO	NVT,SABM	ONLY SABM-COMMANDS 
	VALTLO	NVT,SABMP	WITH P-BIT SET
	XIF
	IFT	ABM=0
	VALTLO	NVT,SARM	ONLY SARM-COMMANDS 
	VALTLO	NVT,SARMP	WITH P-BIT SET
	XIF
         VALTLO   NVT,DISC              ONLY DISC-COMMANDS
         VALTLO   NVT,DISCP                  WITH P-BIT SET 
         VALTLO   UA,NVT                ONLY UA-RESPONSES 
         VALTLO   UAF,NVT                    WITH F-BIT SET 
         VALTLO   DM,NVT                ONLY DM-RESPONSES 
         VALTLO   DMF,NVT                    WITH F-BIT SET 
         VALTLO   FRMR,NVT              ONLY FRMR/CMDR-RESPONSES
         VALTLO   FRMRF,NVT                  WITH F-BIT SET 
ENUVAL   EQU      *-VALTAB                     END OF TABLE INDICATOR 
	EJECT
* 
* LIST OF EQU'S FOR ALTAB 
* 
F0	EQU	/0	NVT 
F1	EQU	/1	SABM/SARM 
F2	EQU	/2	DISC
F3	EQU	/3	DM
F4	EQU	/4	DM + F-BIT
F5	EQU	/5	UA
F6	EQU	/6	UA + F-BIT
F7	EQU	/7	FRMR/CMDR 
F8	EQU	/8	FRMR/CMDR + F-BIT 
F9	EQU	/9	S - RESPONSE
FA	EQU	/A	S - COMMAND 
FB	EQU	/B	S + P-BIT 
FC	EQU	/C	S + F-BIT 
FD	EQU	/D	I 
FE	EQU	/E	I + P-BIT 
FF	EQU	/F	***SPARE*** 
* 
* 
* TABLE DEFINITION OF ALTAB 
* 
ALTLO	FORM	8,8	WORD LAY-OUT OF ALTAB
* 
ALTAB	EQU	*	START OF TABLE
* 
	ALTLO	/0,/0	NOT ALLOWED ENTRY
	ALTLO	F0,FD	NVT   / I
	ALTLO	F0,FE	NVT   / IP 
	ALTLO	/0,/0	NOT ALLOWED ENTRY
	ALTLO	F9,FA	S     / S
	ALTLO	FC,FB	SF    / SP 
	ALTLO	F9,FA	S     / S
	ALTLO	FC,FB	SF    / SP 
	ALTLO	F9,FA	S     / S
	ALTLO	FC,FB	SF    / SP 
	ALTLO	/0,/0	NOT ALLOWED ENTRY
	ALTLO	F0,F1	NVT   / SABM      (SARM) 
	ALTLO	F0,F1	NVT   / SABMP     (SARMP)
	ALTLO	F0,F2	NVT   / DISC 
	ALTLO	F0,F2	NVT   / DISCP
	ALTLO	F5,F0	UA    / NVT
	ALTLO	F6,F0	UAF   / NVT
	ALTLO	F3,F0	DM    / NVT
	ALTLO	F4,F0	DMF   / NVT
	ALTLO	F7,F0	FRMR  / NVT       (CMDR) 
	ALTLO	F8,F0	FRMRF / NVT       (CMDRF)
	EJECT
* 
* TABLE WITH ADDRESSES FOR PROTAB 
* THE VALUE OF CSV IS USED AS INDEX 
* 
CSVTAB	EQU	*
	DATA	CSV:0 
	DATA	CSV:1 
	IFT	ABM=0
	DATA	CSV:2 
	DATA	CSV:3 
	XIF
	IFT	ABM=1
	DATA	0 
	DATA	0 
	XIF
	DATA	CSV:4 
	DATA	CSV:5 
	DATA	CSV:6 
	DATA	CSV:7 
	DATA	CSV:8 
	IFT	ABM=0
	DATA	CSV:9 
	DATA	CSV:A 
	DATA	CSV:B 
	DATA	CSV:C 
	XIF
	IFT	ABM=1
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	XIF
* 
* TABLE DEFINITION OF PROTAB
* 
* EACH BYTE OF PROTAB CONTAINS THE NEW CSV AND A POINTER IN 
* ACTAB TO THE ACTIONLIST TO BE PERFORMED.
* 
* 
* LIST OF FRAME TYPES 
* 
*	F0 = NVT
*	F1 = SABM/SARM
*	F2 = DISC 
*	F3 = DM 
*	F4 = DM + F-BIT 
*	F5 = UA 
*	F6 = UA + F-BIT 
*	F7 = FRMR/CMDR
*	F8 = FRMR/CMDR + F-BIT
*	F9 = S - RESPONSE 
*	FA = S - COMMAND
*	FB = S + P-BIT
*	FC = S + F-BIT
*	FD = I
*	FE = I + P-BIT
*	FF = ***SPARE***
* 
	EJECT
	IFT	ABM=0
* 
PROTAB	EQU	*
* 
*		F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
* 
CSV:0	DATA	/0027,/A516,/1600,/0000,/0000,/0000,/0000,/0000
CSV:1	DATA	/1024,/1010,/0B10,/3F10,/1610,/1010,/1010,/1010
CSV:2	DATA	/2020,/2020,/2620,/4F20,/2620,/2020,/2020,/2020
CSV:3	DATA	/3044,/A530,/3030,/3030,/3030,/3030,/3030,/3030
CSV:4	DATA	/4069,/9598,/9862,/6262,/624D,/4D4D,/4D4C,/4C40
CSV:5	DATA	/5041,/9550,/5050,/5050,/5050,/5353,/5053,/5350
CSV:6	DATA	/6061,/6060,/9860,/4F60,/6260,/6060,/6060,/6060
CSV:7	DATA	/7074,/707F,/8F70,/7070,/707E,/7E7E,/8A7E,/7E70
CSV:8	DATA	/8080,/B480,/CF80,/CF80,/8080,/8080,/8080,/8080
CSV:9	DATA	/9090,/9490,/0B90,/0B90,/9090,/9090,/9090,/9090
CSV:A	DATA	/A0A0,/A4A0,/0BA0,/0BA0,/A0A0,/A0A0,/A0A0,/A0A0
CSV:B	DATA	/B0B0,/B4B0,/0BB0,/0BB0,/B0B0,/B0B0,/B0B0,/B0B0
CSV:C	DATA	/C0C0,/04C0,/C0C0,/C0C0,/C0C0,/C0C0,/C0C0,/C0C0
* 
	XIF
* 
	IFT	ABM=1
* 
PROTAB	EQU	*
* 
*		F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
* 
CSV:0	DATA	/0046,/0619,/1900,/0000,/0000,/0000,/0000,/0000
CSV:1	DATA	/1046,/0810,/0710,/4110,/1010,/1010,/1010,/1010
CSV:2	DATA	/0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:3	DATA	/0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:4	DATA	/4042,/0663,/6340,/4063,/634E,/4E4E,/4E4D,/4D4D
CSV:5	DATA	/5046,/0663,/6350,/5063,/6350,/5555,/5055,/5550
CSV:6	DATA	/6062,/0A60,/0760,/4160,/6360,/6060,/6060,/6060
CSV:7	DATA	/7070,/0670,/7070,/7070,/707F,/7F7F,/8B7F,/7F70
CSV:8	DATA	/8080,/8680,/0780,/0780,/8080,/8080,/8080,/8080
CSV:9	DATA	/0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:A	DATA	/0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:B	DATA	/0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:C	DATA	/0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
* 
	XIF
* 
	EJECT
* 
* TABLE DEFINITION OF ACTAB 
* 
ACTLO	FORM	1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
* 
* EACH BIT REPRESENTS AN ACTION AS FOLLOWS: 
* 
*	0 = RESET RECEIVER VARIABLES
*	1 = RESET TRANSMITTER VARIABLES 
*	2 = SET IN.FRMR  (IN.CMDR)
*	3 = SET IN.UA 
*	4 = SET IN.DM 
*	5 = SET IN.SABM  (IN.SARM)
*	6 = SET IN.DISC 
*	7 = SET IN.RNR
*	8 = SET IN.P
*	9 = SC := AC := 0 
*	A = REMOTE DISCONNECT 
*	B = PROCESS N(R)
*	C = PROCESS P/F 
*	D = PROCESS I-FRAME 
*	E = PROCESS S-FRAME 
*	F = RECEIVER TIMER CONTROL
* 
	IFT	ABM=0
* 
ACTAB	EQU	*	START OF TABLE
*	FIELD	0 1 2 3 4 5 6 7 8 9 A B C D E F 
* 
ACT0	ACTLO	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ACT1	ACTLO	1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1
ACT2	ACTLO	0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1
ACT3	ACTLO	0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
ACT4	ACTLO	0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1
ACT5	ACTLO	0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1
ACT6	ACTLO	0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1
ACT7	ACTLO	0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1
ACT8	ACTLO	0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1
ACT9	ACTLO	1,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1
ACTA	ACTLO	0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1
ACTB	ACTLO	0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
ACTC	ACTLO	0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1
ACTD	ACTLO	0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1
ACTE	ACTLO	0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1
ACTF	ACTLO	0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
* 
	XIF
* 
	IFT	ABM=1
* 
* 
ACTAB	EQU	*	START OF TABLE
*	FIELD	0 1 2 3 4 5 6 7 8 9 A B C D E F 
* 
ACT0	ACTLO	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ACT1	ACTLO	1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1
ACT2	ACTLO	1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1
ACT3	ACTLO	1,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1
ACT4	ACTLO	1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1
ACT5	ACTLO	0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
ACT6	ACTLO	0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1
ACT7	ACTLO	0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
ACT8	ACTLO	0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1
ACT9	ACTLO	0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1
ACTA	ACTLO	0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1
ACTB	ACTLO	0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1
ACTC	ACTLO	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ACTD	ACTLO	0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1
ACTE	ACTLO	0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1
ACTF	ACTLO	0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1
* 
	XIF
* 
	EJECT
* 
*      PROGRAM PART FOR CHECKING THE ADDRESS
*        THIS PART WILL PERFORM THE CHECK BASED ON THE LAPB 
*        SPECIFICATION OF CCITT 
* 
REC	EQU	* 
	CM	NEWNR,A6
	CF	A5,PLECB	STORE LINE ECB IN QUEUE
	IFT	LOG=1
	LDKL	A4,/5200
	CF	A5,LOGFR	LOG INCOMING FRAME 
	XIF
         LD       A7,ECBBA,A8          GET THE ACTUAL BUFFER ADDRESS
	LD	A1,ECBEL,A8	SAVE LENGTH 
	ST	A7,BUFAD,A6	SAVE INPUTBUFFERADDRESS 
	ST	A1,BUFLEN,A6	SAVE LENGTH
	LD	A1,RECCT,A7 
	ST	A1,RECCF,A6	SAVE RECEIVED CONTROL FIELD 
	LC	A1,RECAD,A7	GET ADDRESS 
         CC       A1,RCMDAD,A6          COMPARE WITH COMMAND ADDRESS
         RF(E)    CMD                   IF EQUAL IT'S A COMMAND 
         CC       A1,RRSPAD,A6          MAY BE A RESPONSE 
         RF(E)    RSP                   SURE
	IFT	STAT=1 
	LDK	A1,R.INV 
	CF	A5,COUNT	COUNT # OF INVALID FRAMES
	XIF
REC2	EQU	*
	LD	A7,BUFAD,A6	GET BUFFERADDRESS 
	CF	A5,L1INPQ	INPUT REQUEST IMPL ECB
	RTN	A5	READY 
* 
* 
CMD      EQU      * 
         LDK      A1,1                  SET REC.CMD INDICATOR 
         RF      DETFT                 GOTO : DETERMINE FRAME TYPE
RSP      EQU      * 
         SUR      A1,A1                 RESET REC.CMD INDICATOR 
* 
*     NOW THE ADDRESS VALIDITY CHECK IF FINISHED
*     IF CORRECT THE PROGRAMM WILL CONTINUE WITH DETFT WITH 
*     EXIT PARAMETER : A1=1 IF COMMAND RECEIVED 
*                       A1=0 IF RESPONSE RECEIVED 
*     IF THE ADRRESS IS NOT RECOGNIZED THE BUFFER WILL BE RETURNED TO 
*        THE RECEIVE BUFFER QUEUE WITHOUT ANY FURTHER PROCESSING
*     A DISTINCTION MUST BE MADE BETWEEN THE FOLLOWING FRAME TYPES
*        I-FRAMES ,S-FRAMES ,U-FRAMES 
*        WITH THIS INFORMATION THE PROGRAM WILL CONTINUE WITH A CHECK 
*        OF THE VALIDITY. 
* 
DETFT    EQU      * 
         ST       A1,REC.CMD,A6         SAVE CMD/RSP INDICATOR
	IFT	LOOP=1 
	LDK	A1,1 
	SUS	A1,REC.CMD,A6
	LD	A1,REC.CMD,A6 
	XIF
	LD	A4,ECBEL,A8	GET LENGTH OF RECEIVED FRAME
	CM	IIF,A6	CLEAR ILLEGAL I-FIELD INDICATION 
	LD	A3,RECCF,A6	GET CONTROL FIELD 
         LDK      A2,/1                GET MASK FOR I-FRAME 
         ANR      A2,A3                 MASK CONTROL FIELD
         RF(NZ)   CHKSU                 IF NOT ZERO THEN NOT I-FRAME
         ANK       A3,ITYP               SCRATCH BITS NOT RELEVANT
         LDK      A2,IVAL               GET POINTER IN VALIDITY TABLE 
         RF      CHKVAL                CHECK VALIDITY OF I-FRAME
	EJECT
* 
CHKSU    EQU      *                     CHECK IF S OR U-FRAME 
         LDK      A2,/2                MASK FOR S-FRAME 
         ANR      A2,A3                 MASK CONTROL FIELD
         RF(NZ)   CHKU                  NOT S-FRAME BUT U-FRAME 
	CWK	A4,2	CHECK RECEIVED LENGTH S-FRAME 
	RF(E)	SLENOK	OK
	IM	IIF,A6	SET ILLEGAL I-FIELD INDICATION 
SLENOK   EQU      * 
         ANK       A3,STYP               SCRATCH BITS NOT RELEVANT
         LDK      A2,SVAL               GET POINTER IN VALIDITY TABLE 
         RF      CHKVAL                CHECK VALIDITY OF S-FRAME
* 
CHKU     EQU      *                     CHECK U-FRAME 
	CWK	A4,2	CHECK RECEIVED LENGTH U-FRAME 
	RF(E)	ULENOK	OK
	CWK	A4,5	MAY BE IT IS A CMDR/FRMR
	RF(NE)	IULEN	ILLEGAL I-FIELD 
	LDR	A2,A3	CHECK FRAME TYPE 
	ANK	A2,/EF	REMOVE P/F-BIT
	CWK	A2,FRMR	.
	RF(E)	ULENOK	IT IS CMDR/FRMR 
IULEN	EQU	*	ILLEGAL I-FIELD 
	IM	IIF,A6	SET INDICATION 
ULENOK   EQU      * 
         ANK       A3,UTYP               SCRATCH BITS NOT RELEVANT
         LDK      A2,UVAL               GET POINTER IN VALIDITY TABLE 
*			AND GO TO CHKVAL
	EJECT
* 
*     THIS PART OF THE FRAME TYPE DETERMINATION IS COMMON USED FOR
*     0 .U AND S-FRAME VALIDITY CHECK 
*     THE CHECK IS PERFORMED WITH THE AID OF THE FRAME TYPE VALIDITY
*     TABLE : VALTAB
*        EXPECTED PARAMETERS : A2 = POINTER TO APPLICABLE PART OF TABLE 
*                              A3 = CONTROL FIELD WITH NON-RELEVANT 
*                                   BITS SCRATCHED TO ZERO
* 
*        NOTE: NON-RELEVANT BITS ARE THE BITS THAT DO NOT GIVE ANY
*              INFORMATION ABOUT THE FRAME TYPE SUCH AS : COUNTERS
* 
CHKVAL   EQU      * 
         LD       A4,VALTAB,A2          GET TABLE PART LENGHT 
         ADR      A2,A1                 POINT TO COMMAND OR RESPONSE
CHKV1    EQU      * 
         ADK      A2,2                  POINT TO NEXT WORD
         CC       A3,VALTAB,A2          COMPARE WITH GIVEN TYPE 
         RF(E)    FOUND                 FRAME TYPE FOUND VALID
         SUK      A4,2                  NOT YET FOUND 
         RB(P)    CHKV1                 TRY AGAIN 
         SUR      A2,A2                 WILL NEVER BE FOUND = NVT ! 
	CM	IIF,A6	THIS FIELD CAN NOW BE RESET
FOUND    EQU      * 
	LD	A3,IIF,A6 
	RF(Z)	CHKV2	NO ILLEGAL I-FIELD 
	LDK	A2,0	SET FRAME TYPE ON NVT 
CHKV2	EQU	* 
         ST       A2,IDFT,A6            SAVE FT IDENTIFIER
	IFT	STAT=1 
	LDK	A1,R.INV 
	LDR	A4,A2
	RF(Z)	UPDCNT 
* UPDATE STATISTICS FOR U-FRAMES
	SUK	A4,UVAL
	RF(N)	UPDEND	NO U-FRAME
	LDK	A1,R.SABM	PRESET INDEX FOR COUNTER-ID. 
	SUK	A4,6 
	RF(N)	UPDCNT	SABM/SARM-FRAME RECEIVED
	LDK	A1,R.DISC
	SUK	A4,4 
	RF(N)	UPDCNT	DISC-FRAME RECEIVED 
	LDK	A1,R.UA
	SUK	A4,4 
	RF(N)	UPDCNT	UA-FRAME RECEIVED 
	LDK	A1,R.DM
	SUK	A4,4 
	RF(N)	UPDCNT	DM-FRAME RECEIVED 
	LDK	A1,R.FRMR	CMDR/FRMR-FRAME RECEIVED 
UPDCNT	EQU	*
	CF	A5,COUNT	UPDATE COUNTER 
UPDEND	EQU	*
	XIF
         SUR      A1,A1 
         LC       A1,ALTAB,A2           GET CORRESPONDING TABLE ENTRY 
	EJECT
* 
*     PROCAL WILL PERFORM THE FOLLOWING ACTIONS:
*        - THE POINTER IN A1 WILL BE UPDATED TO LET IT CORRESPOND TO
*                 THE ACTUAL CSV
*        - WITH THE AID OF THAT POINTER THE APPROPRIATE STATE AND 
*                 ACTION LIST WILL BE EXTRACTED OUTOF PROTAB
* 
PROCAL   EQU      * 
	LD	A2,CSV,A6	GET STATION CONNECTION STATE
***	TEST IF NVT 
	LDR	A1,A1
	RF(NZ)	PROCA8	NO!
***	PREPARE NEW STATUS AND POINTER TO ACTION TABLE IF 
***	STATUS IS CONNECTED OR RESETTING
*** 
***	TEST IF COMMAND 
	LD	A3,REC.CMD,A6 
	RF(Z)	PROCA6	NO! 
***	TEST IF CONNECTED OR RESETTING
	CWK	A2,CNT 
	RF(E)	PROCA4	YES!
	CWK	A2,CNTRES
	RF(NE)	PROCA8	NO!
PROCA4	EQU	*
	LDK	A2,CNTRES	NEW STATUS 
	SLL	A2,4 
         IFT      ABM=0 
	ADK	A2,3	ADD POINTER TO ACTION TABLE 
         XIF
         IFT      ABM=1 
         ADK      A2,4             ADD POINTER TO ACTION TABLE
         XIF
	RF	ACTDEF
***	TEST IF CONNECTED 
PROCA6	EQU	*
	CWK	A2,CNT 
	RF(NE)	PROCA8	NO!
	LDK	A2,CNTRS1	NEW STATUS 
	SLL	A2,4 
         IFT      ABM=0 
	ADK	A2,2	ADD POINTER TO ACTION TABLE 
         XIF
         IFT      ABM=1 
         ADK      A2,3             ADD POINTER TO ACTION TABLE
         XIF
	RF	ACTDEF
PROCA8	EQU	*
	SLL	A2,1	PREPARE FOR INDEXING
	LD	A2,CSVTAB,A2	GET ADDRESS CORRECT PROTAB 
	ADR	A1,A2	AD FRAME TYPE INDICATOR
	LCR	A2,A1	NOW A1 CONTAINS: 
*                                          - NEW STATUS 
*                                          - POINTER TO ACTION TABLE
* 
* 
*     ACTDEF WILL SEARCH IN THE ACTION TABLE TO WHAT LIST OF ACTIONS
*     A1 POINTS AND WHAT VALUE CSV SHOULD GET NOW.
* 
ACTDEF   EQU      * 
         LDR      A3,A2                 SAVE RECEIVED PARAMETER 
         ANK      A2,/F0                 EXTRACT CSV
	SRL	A2,4	PUT ON CORRECT POSITION 
         ST       A2,CSV,A6             GIVE CSV THE NEW VALUE
         ANK      A3,/F                 EXTRACT ACTION LIST POINTER 
	SLL	A3,1	MAKE INDEX
         LD       A2,ACTAB,A3           GET ACTION LIST 
	ABL(Z)	REC2	NO PROCESSING
	EJECT
*     EXACT WILL EXECUTE THE ACTIONS AS GIVEN IN THE ACTION LIST
*     AS RECEIVED FROM ACTDEF.
*     THE INPUT PARAMETER (A2) CONTAINS A NUMBER OF BITS AND EACH BIT 
*     REPRESENTS ONE ACTION TO BE FULFILLED.
*     THE LAY-OUT AS GIVEN IN TABLE ACTAB.
* 
EXACT    EQU      *                     START OF EXECUTION
         SUR      A1,A1                 CLEAR 
	LDR	A3,A2
EXACT1	EQU	*
	ST	A1,SAV1,A6	SAVE FIRST REGISTER
	ST	A2,SAV2,A6	SAVESECOND REGISTER
	ST	A3,SAV3,A6	SAVE THIRD REGISTER
* 
* 
* 
         ABI(N)   EXTAB,A1              BRANCH TO INDICATAD ACTION
EXACR1   EQU      *                     EXACT RETURN POINT AFTER
	LD	A1,SAV1,A6	RELOAD FIRST REGISTER
	LD	A3,SAV3,A6	RELOAD THIRD REGISTER
	LD	A2,SAV2,A6	RELOAD SECOND REGISTER 
EXACR2	EQU	*
                                        EXECUTION OF THE ACTION 
         ADK      A1,/2                 UPDATE POINTER
         SLL      A2,1                  GET NEXT BIT
         RB       EXACT1
*     EXTAB IS THE TABLE THAT CONTAINS ALL ADDRESSES OF THE SEVERAL 
*     ROUTINES THAT EXECUTE AN ACTION 
* 
EXTAB    EQU      * 
         DATA     RCON                  RESET RECEIVER VARIABLES
         DATA     RTVAR                 RESET TRANSMIT VARIABLES
         DATA     SIFRMR                SET IN.FRMR/IN.CMDR 
         DATA     SIUA                  SET IN.UA 
         DATA     SIDM                  SET IN.DM 
         DATA     SISABM                SET IN.SABM/IN.SARM 
         DATA     SIDISC                SET IN.DISC 
         DATA     SIRNR                 SET IN.RNR
         DATA     SIP                   SET IN.P
	DATA	SCAC0	SC = AC := 0
	DATA	RDISCR	REMOTE DISCONNECT REQUEST
	DATA	PNR	PROCESS N(R)
         DATA     PPF                   PROCESS P/F 
         DATA     PIF                  PROCESS I-FRAME
         DATA     PSF                  PROCESS S-FRAME
         DATA     PRTC                  RECEIVER TIMER CONTROL
	EJECT
*     THIS PROGRAM PART WILL RESET ALL RECEIVE VARIABLES
* 
RCON     EQU      *                     ENTRY 
	CF	A5,RESREC	RESET VARIABLES 
	LDK	A1,NTRRST
	ST	A1,RRSETI,A6	SET RECEIVER RESET INDICATION
	RB	EXACR1
*     THIS PROGRAM PART WILL RESET ALL TRANSMIT VARIABLES 
* 
RTVAR    EQU      *                     ENTRY 
         CF       A5,RESTR              RESET TRANSMIT VARIABLES
	RB	EXACR1	RETURN TO CALLER 
*     THIS PROGRAM PART WILL SET ONE OR MORE OF THE FOLLOWING 
*     VARIABLES : IN.FRMR/IN.CMDR , IN.UA , IN.DM , 
*                 IN.SABM/IN.SARM , IN.DISC , IN.RNR
* 
SIDM	EQU	*	SET IN.DM
SIUA	EQU	*	SET IN.UA
	LD	A1,CSV,A6 
	RF(NZ)	SICONT	NOT DISCONNECTED, CONTINUE 
	SUK	A1,2	REQUEST A DRIVER STOP(STATUS=-2)
	ST	A1,DRIVST,A6	AFTER OUTPUT READY 
	LD	A1,LECBRC,A6
	RF(NZ)	SICONT	RETURNCODE ALREADY SET 
	LDK	A1,NTRD	PRESET RETURN CODE 
	ST	A1,LECBRC,A6	REMOTE DISCONNECT
SIFRMR	EQU	*	IF IN.FRMR/IN.CMDR SHOULD BE SET 
SISABM	EQU	*	IN.SABM/IN.SARM
SIDISC   EQU      *                     IF IN.DISC
SIRNR    EQU      *                     IF IN.RNR 
SICONT	EQU	*
         SLL      A3,2                  PUT ON CORRECT POSITION.
	LDR	A2,A3	SAVE ACTION LIST 
         ANKL     A3,/FC00              MASK NON RELEVANT BITS
         ORS      A3,PART1,A6           PARAMETER TABLE WORD 1
         LDK      A1,/E                 UPDATE POINTER
	SLL	A2,5	THESE ACTIONS ARE FINISHED NOW
	RB	EXACR2	RETURN TO CALLER 
*			WITHOUT RELOAD OF REGISTERS 
	EJECT
*     THIS PROGRAM PART WILL SET THE BOOLEAN VARIABLE IN.P
* 
SIP      EQU      * 
         LDK      A3,/20                PREPARE IN.P SETTING
         ORS      A3,PART1,A6           SET IN.P
	RB	EXACR1	RETURN TO CALLER 
* 
RDISCR	EQU	*
	LD	A7,LECBRC,A6
	RF(NZ)	RDISC1	RETURNCODE ALREADY SET 
	LDK	A7,NTRD	PRESET RETURN CODE 
	ST	A7,LECBRC,A6	REMOTE DISCONNECT
RDISC1	EQU	*
	LD	A7,BUFAD,A6	BUFFERADDRESS 
	CF	A5,L1INPQ	INPUT REQUEST IMPL ECB REQ. 
	CF	A5,L1STPQ	STOP DRIVER IMPL ECB REQ. 
	RTN	A5 
	EJECT
* 
*     THIS PART WILL EMPTY AC AND SC DUE TO A RESET.
* 
SCAC0	EQU	* 
	LDK	A1,NTTRST	PRESET RETURN CODE: TRANSM. RESET
	LD	A4,AC,A6
	RF(Z)	SCAC2	QUEUE EMPTY
	CM	AC,A6 
SCAC1	EQU	* 
	LD	A3,Q1ACAD,A6	GET ACK QUEUE ADDRESS
	CF	A5,GETBUF	GET ELEMENT FROM QUEUE
	CF	A5,Q.ERDY	MOVE IT TO EVENT READY QUEUE
	SUK	A4,1 
	RB(NZ)	SCAC1	QUEUE IS NOT YET EMPTY
* 
SCAC2	EQU	* 
	LD	A4,SC,A6
	RF(Z)	SCAC4	QUEUE EMPTY
	CM	SC,A6 
SCAC3	EQU	* 
	LD	A3,Q1SCAD,A6	GET SEND QUEUE ADDRESS 
	CF	A5,GETBUF	GET ELEMENT FROM QUEUE
	CF	A5,Q.ERDY	MOVE IT TO EVENT READY QUEUE
	SUK	A4,1 
	RB(NZ)	SCAC3	QUEUE IS NOT YET EMPTY
* 
SCAC4	EQU	* 
	RB	EXACR1
	EJECT
*     THIS PROGRAM PART WILL PERFORM THE P/F PROCESSING.
* 
PPF      EQU      * 
	LD	A4,RECCF,A6	GET CONTROL FIELD 
	ANK	A4,/10	SCRATCH NON RELEVANT BITS 
         RF(Z)   PPFEX                 NO P/F BIT SET 
* 
         LD       A1,RECCMD,A6          GET REC.CMD INDICATOR 
         RF(NZ)   SIF                   IF COMMAND WITH P-BIT RECEIVED
                                        THEN SET IN.F 
	RF	PPF1
* 
SIF      EQU      * 
         LDKL     A1,/100               PREPARE SETTING IN.F
         ORS      A1,PART1,A6           SET IN.F
         RF      PPFEX                 RETURN TO CALLER 
PPF1	EQU	*
	CM	OUTSTP,A6	CLEAR OUTSTP
PPFEX    EQU      *                     COMMON RETURNPOINT
	LD	A2,SAV2,A6	GET RECEIVED ACTIVITY PARAMETER
	SLL	A2,1	I FRAME TO BE PROCESSED?
	ABL(N)	EXACR1	YES,L1 INPUT WILL BE STARTED BY I PROCESSING 
	ABL	PIFAC6	NO, CALL L1 AGAIN 
	EJECT
*     THIS PROGRAM PART WILL PERFORM THE N(R) PROCESSING
* 
PNR      EQU      * 
	LD	A7,RECCF,A6	GET CONTROL FIELD 
	SRL	A7,5	SHIFT TO CORRECT POSITION 
	ANK	A7,/7	N(R) OUT OF IT 
	LDR	A4,A7	SAVE RECEIVED N(R) TO STORE LATER IN LNR 
         SU       A7,LNR,A6             SUBTRACT LAST RECEIVED N(R) 
         ANK     A7,/7                 MODULO 8 (NOW IT'S "STEP") 
         ABL(Z)    OLDNR                 NO NEW N(R) RECEIVED ! 
         LD       A3,MAXVS,A6           GET N(S) OF HIGHEST TRANSM. FRAM
         SU       A3,LNR,A6             SUBTRACT LAST REC. CONFIRM. 
         ANK     A3,/7                 MODULO 8 
         CWR      A7,A3                 COMPARE WITH STEP 
         RF(G)    NRERR                 TOO HIGH N(R)  ERROR !! 
	IM	NEWNR,A6	SET NEWNR ON 
	ST	A4,LNR,A6	STORE RECEIVED N(R) 
         CW       A7,AC,A6              STEP BIGGER THEN WAIT FOR ACK ? 
         RF(G)    PNR2
	EJECT
* 
* 
* 
DEQAC	EQU	* 
* 
* 
*     THIS PART PERFORMS THE DEQUE OF THE ACKNOWLEDGE QUE 
*     THE NUMBER TO BE DEQUEUED IS EQUAL TO "STEP" AND
*     GIVEN IN REGISTER A7
* 
* 
	CF	A5,DQACER	AC=AC-STEP
	RF	PNREX	READY 
* 
* 
DQACER	EQU	*
	LD	A3,Q1ACAD,A6	GET ACK QUE ADDRESS
	LD	A4,NF,A3
	RF(Z)	DQACEN	QUEUE EMPTY 
	CF	A5,GETBUF	ELEMENT TO BE DEQUEUED
	LD	A1,ECBRL,A8 
	ST	A1,ECBEL,A8 
	LDK	A1,0	SET RETURN CODE 
	CF	A5,Q.ERDY	MOVE TO EVENT READY QUE 
	LDKL	A4,-1 
	ADS	A4,AC,A6	DECREMENT AC WITH 1 
	SUK	A7,1	MORE TO DEQUEUE?
	RB(NZ)	DQACER	YES,DO NEXT
DQACEN	EQU	*
	RTN	A5	READY 
	EJECT
PNR2     EQU      * 
* 
* 
*     THIS PART PERFORMS THE DEQUE OF AC AND IF MORE FRAMES 
*     ARE ACKNOWLEDGED ALSO FROM SC, BOTH TO BE PUT IN
*     THE EVENT READY QUEUE.
* 
*     THE NUMBER TO BE DEQUEUED IS EXPECTED IN A7.
* 
* 
	ST	A4,VS,A6	UPDATE SEND STATE VARIABLE 
	CF	A5,DQACER	AC=AC-STEP
	LDR	A7,A7	STEP COMPLETED?
	RF(Z)	PNREX	YES
PNR5	EQU	*	THE OTHER PART OF STEP MUST BE TAKEN FROM SC 
	LD	A3,Q1SCAD,A6	SC QUEUE 
	LD	A4,NF,A3
	RF(Z)	PNREX
	CF	A5,GETBUF	GET ELEMENT FROM SC QUEUE 
	LDK	A1,0	RETURN CODE 
	CF	A5,QERDY	EVENT READY
	LDKL	A4,-1 
	ADS	A4,SC,A6	DECREMENT SC
	SUK	A7,1	STEP READY? 
	RB(NZ)	PNR5	NO, DEQUEUE NEXT FROM SC 
	CF	A5,DACQSC	SC=SC+AC
	RF	PNREX	READY 
	EJECT
* 
* 
*     THIS PART PERFORMS THE DEQUE OF AC AND THE REQUE
*     FROM THE ELEMENTS OF THE ACK QUEUE TO THE SEND
*     QUEUE FOR REASON OF RETRANSMISSION. 
* 
* 
DACQSC	EQU	*
	LD	A3,Q1SCAD,A6
	LD	A2,NF,A3	PRESET NR OF EL. SC-QUEUE IN A2
DAC100	EQU	*
	LD	A3,Q1ACAD,A6	GET ACK QUE ADDRESS
	LD	A4,NF,A3	GET NUMB PENDING ELEMENTS
	RF(Z)	DACEND	FINISHED
	CF	A5,GETBUF	GET ELEMENT 
	LD	A3,Q1SCAD,A6	SEND QUE ADDRESS 
	CF	A5,PUTBUF	SAVE IN QUE 
	IFT	STAT=1 
	LDK	A1,T.RETRY 
	CF	A5,COUNT	COUNT # OF RETRIES 
	XIF
	RB	DAC100	TRY AGAIN
* 
*	RESTORE NOW ALL ORIGINAL SC ELEMENTS
*	BEHIND THE AC ELEMENTS IN THE SC-QUEUE
*	TO GET CORRECT ORDER OF TRANSMISSION
* 
DACEND	EQU	*
	SUK	A2,2	ANY ORIGINAL ELEMENT IN SC-QUEUE? 
	RF(N)	DAC200	READY 
	LD	A3,Q1SCAD,A6
	CF	A5,GETBUF	GET EL. FROM SC-QUEUE 
	CF	A5,PUTBUF	STRE EL. IN SC-QUEUE
	RB	DACEND	GET NEXT 
DAC200	EQU	*
	LD	A2,AC,A6	GET VALUE OF AC
	ADS	A2,SC,A6	AD AND STORE IN SC
	CM	AC,A6	RESET AC
	RTN	A5	RETURN TO CALLER
	EJECT
* 
* 
* 
NRERR    EQU      * 
* 
* 
*     PREPARATIONS FOR FRAME REJECT 
* 
* 
	LD	A2,RECCF,A6	GET CONTROL FIELD 
	SC	A2,FRSAV1,A6	SAVE TO BE TRANSMITTED 
	LD	A2,VS,A6	GET ACTUAL VALUE OF V(S) 
	SLL	A2,1	PUT ON CORRECT POSITION 
	LD	A3,VR,A6	GET ACTUAL VALUE OF V(R) 
	SLL	A3,5	SHIFT IN POSITIO
	ORR	A2,A3	INCLUDE IN A2
	LD	A3,RECCMD,A6	GET COMMAND/RESPONSE INDICATOR 
	SLL	A3,4	PUT ON CORRECT POSITION 
	ORR	A2,A3	INCLUDE IN A2
	SC	A2,FRSAV2,A6	SAVE TO TRANSFER 
	LDK	A2,/08	SET ERROR CODE IN FRAME 
	SC	A2,FRSAV3,A6	SAVE FOR TRANSFER
	CF	A5,RESTR	RESET TRANSMITTER VARIABLES
         IFT      ABM=1 
         CF       A5,RESREC        RESET RECEIVER VARIABLES 
         XIF
	LDK	A2,CNTRES
	ST	A2,CSV,A6	SET NEW STATUS
	LDKL	A2,/8000
	ORS	A2,PART1,A6	SET IN.FRMR/IN.CMDR
OLDNR	CM	NEWNR,A6	SET NEWNR OFF 
PNREX    EQU      *                     NO FURTHER ACTIONS NECESSARY
         ABL      EXACR1                RETURN TO CALLER
	EJECT
* 
* 
* 
*     THIS PART OF THE PROGRAM WILL PROCESS THE TYPICAL I-FRAME 
*     CHARACTERISTICS.
* 
PIF      EQU      *                     START OF PROGRAM
	IFT	STAT=1 
	LDK	A1,R.I 
	CF	A5,COUNT	COUNT RECEIVED I-FRAME 
	XIF
***      TEST IF FRMR/CMDR HAS TO BE TRANSMITTED
         LD       A1,PART1,A6 
         RF(N)    PIFAC6           YES! IGNORE I-FRAME
	LD	A3,RECCF,A6	GET CONTROL FIELD 
	ANK	A3,/E	EXTRACT N(S) 
	SRL	A3,1	PRESET RECEIVED NS IN A3
	LD	A4,VR,A6	PRESET VR IN A4
	LD	A1,SINS,A6	GET SINK STATE 
	SUK	A1,1 
	CM	SINS,A6	RESET SINS
	RF(Z)	PIFAC2	SINS=1
* SINS = 0 OR 2 
* IN CASE VR .NE. NS OR NS - 1
* SINS IS SET TO 2
	CWR	A3,A4	VR EQUAL NS? 
	RF(NE)	PIFAC3	NO 
	LD	A3,Q1IRAD,A6	INPUT REQUESTS PENDING ? 
	LD	A4,NF,A3	.
	RF(Z)	PIFAC2	NO
         LDK      A1,/40                IN.ACK BIT SET
         ORS      A1,PART1,A6           DO
	IM	VR,A6	INCREASE VR 
	LDK	A1,7 
	ANS	A1,VR,A6	UPDATE VR MODULO 8
	CF	A5,GETBUF 
	LD	A7,BUFAD,A6 
	ST	A7,ECBBA,A8	STORE BUFFERADDRESS IN ECB
	LD	A7,BUFLEN,A6
	ST	A7,ECBEL,A8	STORE INPUTBUFFER LENGTH IN ECB 
	LD	A1,RRSETI,A6	GET RETURN CODE
	CM	RRSETI,A6	CLEAR POSSIBLE SET INDICATION 
	CF	A5,Q.ERDY	QUE EVENT READY 
	IFT	TRACE=1
	CF	A5,LOGTRC 
	XIF
         RF      PIFEX                 RETURN TO CALLER 
* 
PIFAC1	EQU	*
	LDK	A1,/40	SET ACK 
	RF	PIFAC7	IGNORE I-FRAME 
* 
PIFAC2	EQU	*
	IM	SINS,A6	SINS := 1 
	LDKL	A1,/400	SET IN.RNR
	RF	PIFAC7
* 
PIFAC3	EQU	*
	LDR	A1,A1
	RF(P)	PIFAC4	SINS WAS 2
	SUK	A4,1 
	ANK	A4,7	MAKE VR - 1 
	CWR	A3,A4	SINS=0, TEST VR EQUAL NS?
	RB(E)	PIFAC1	YES 
* 
* 
PIFAC4   EQU      * 
	LDK	A3,2 
	ST	A3,SINS,A6	MODIFY SINS
	IFT	ABM=1
	LDR	A1,A1	SINS = 2 ? 
	RF(P)	PIFAC6	YES, IGNORE FRAME 
	XIF
         LDKL     A1,/0200              IN.REJ BIT SET
PIFAC7	EQU	*
         ORS      A1,PART1,A6           DO
PIFAC6   EQU      * 
	LD	A7,BUFAD,A6 
	CF	A5,L1INPQ	INPUT DRIVER IMPL ECB 
PIFEX    EQU      *                     COMMON EXIT 
         ABL      EXACR1
	EJECT
*     THIS PART OF THE PROGRAM WILL PROCESS THE TYPICAL S-FRAME 
*     CHARACTERISTICS.
* 
PSF      EQU      * 
         LD       A1,IDFT,A6            GET FRAME TYPE IDENTIFIER 
	CM	REMFR,A6	PRE-RESET REMOTE FREE INDICATOR
	SUK	A1,SVAL+2
	SRL	A1,1	MAKE INDEX
	IFT	STAT=1 
	ADK	A1,2	A1 = INDEX FOR S-FRAMES 
	CF	A5,COUNT	COUNT RECEIVED S-FRAME 
	SUK	A1,2 
	XIF
         ABI      PSFTAB,A1             EXECUTE NECESSARY ACTIONS 
* 
* 
* 
PSFTAB   EQU      * 
         DATA     PSF1                  RR FRAME RECEIVED 
         DATA     PSF2                  RNR FRAME RECEIVED
         DATA     PSF3                  REJ FRAME RECEIVED
* 
* 
PSF1     EQU      * 
	IM	REMFR,A6	SET REMOTE IS FREE 
         RF      PSFEX                 RETURN TO CALLER 
* 
PSF3     EQU      * 
	IM	REMFR,A6	SET REMOTE IS FREE 
PSF2     EQU      * 
         LD       A1,LNR,A6             GET LAST RECEIVED N(R)
         ST       A1,VS,A6              STORE IN V(S) 
	CF	A5,DACQSC	DEQUE AC AND QUE SC 
PSFEX	EQU	* 
	ABL	EXACR1 
	EJECT
* 
* 
*     THIS PART WILL TAKE CARE FOR THE
*     PROCESSING OF THE RECEIVER TIMER CONTROL
* 
* 
PRTC	EQU	*
	LD	A1,CSV,A6	GET ACTUAL CONNECTION STATE 
	RF(Z)	RTI1	CSV IS DISCONNECTED 
	CWK	A1,CNT 
	RF(E)	RTI2	CSV IS CONNECTED
	CWK	A1,CNTRES
	RF(E)	RTIMEX	CSV IS WAIT FOR RESET 
	RF	RTI3	PROCESS ALL OTHER CSV'S
* 
RTI1	EQU	*
	LDKL	A1,-1 
	ST	A1,TST,A6	SET TST 
	CM*	TIMADR,A6	STOP RUNNING TUMER 
	CM	TIMADR,A6	. 
	RF	RTIMEX	RETURN TO CALLER 
* 
RTI2	EQU	*
	LD	A1,TST,A6	GET TIMER STATE 
	RF(Z)	RTF2	TST=0 
	SUK	A1,2 
	RF(N)	RTF3	TST=1 
	RF(Z)	RTF4	TST=2 
	SUK	A1,2 
	RF(N)	RTF2	TST=3 
	RF	RTF1	TST=4
* 
RTI3	EQU	*
	LD	A1,OUTSTP,A6	GET OUTSTTANDING P INDICATOR 
	RF(NZ)	RTIMEX	RETURN TO CALLER 
* 
RTF1	EQU	*
	LDK	A1,0	SET TST TO 0
	RF	RTIMSV	SAVE TST 
* 
RTF2	EQU	*
	LD	A1,REM.FR,A6	CHECK REMOTE STATION FREE
         RF(NZ)   RTF3
RTF2A	EQU	* 
	LDK	A1,3	SET TIMER STATE TO 3
	RF	RTIMSV	SAVE TST 
RTF3	EQU	*
	LD	A1,OUTST.P,A6		CHECK OUTSTANDING P INDICATOR
	RF(NZ)	RTIMEX	RETURN TO CALLER 
	ST	A1,NRT,A6	ZERO TO NUMBER OF RETRANSMISSIONS 
	LD	A1,REM.FR,A6	GET REMOTE FREE INDICATOR
	RB(Z)	RTF2A
	LD	A1,AC,A6	GET NUMB OF BUFFERS TO BE ACKNOWLEDGED 
	RF(NZ)	RTSET2	SET TST TO 2 
	RB	RTF1
RTF4	EQU	*
	LD	A1,REM.FR,A6	GET REMOTE FREE INDICATOR
	RB(Z)	RTF2A
	LD	A1,AC,A6	GET NUMBER OF BUFFERS TO BE ACKNOWLEDGED 
	RB(Z)	RTF1 
	LD	A1,NEWNR,A6	CHECK IF NEW N(R) IS RECEIVED 
	RF(Z)	RTIMEX	RETURN TO CALLER
RTSET2	EQU	*
	LDK	A1,2	SET TIMER STATE TO 2
RTIMSV	EQU	*
	ST	A1,TST,A6	SAVE TIMER STATE
	CF	A5,STATIM	START TIMER 
* 
RTIMEX	EQU	*
	LD	A2,CSV,A6	GET STATUS FOR USE FURTHER ON 
	LD	A1,PROTST,A6	GET PROTOCOL STATUS
	RF(NP)	PRTCEX	EXIT 
* 
CONREQ	EQU	*	CONNECT REQUESTED
	SUK	A2,CNT	HAS STATUS BECOME CONNECTED?
	RF(NZ)	PRTCEX	NO 
	CM	PROTST,A6	PROTOCOL STATUS CONNECTED 
         CM       RRSETI,A6        RETURNCODE: RECEIVER RESET 
	LD	A8,CONECB,A6	GET CONNECT ECB
	CM*	ECBBA,A8 
	LDK	A1,NTAC	RETURNCODE ACCEPTED
	CF	A5,Q.ERDY	QUE EVENT READY 
PRTCEX	EQU	*
	RTN	A5	RETURN TO CALLER
	EJECT
* 
* 
*	TRANSMITTER 
* 
********************************************* 
* 
*	INPUT PARAMETERS: 
*		A5 = STACK POINTER 
*		A6 = PARAMETER TABLE ADDRESS 
*		A8 = ECB-ADDRESS 
* 
*	CALLING SEQUENCE: 
*		CF   A5,TRAN 
* 
         EJECT
* 
*     THE TRANSMITTER PART OF THE HDLC WILL PERFORM THE ACTIVITIES
*     THAT ARE NECESSARY TO TRANSMIT A FRAME TO THE OTHER SIDE
*     AT FIRST IT WILL BE CHECKED IF THERE IS ANY REASON TO TRANSMIT
*     A FRAME 
* 
*     THE NECESSITY TO TRANSMIT A FRAME IS REGISTRED IN WORD 1 OF THE 
*     PARAMETER TABLE 
* 
*     THIS WORD IS INDICATED AS "PART1
* 
TRAN  EQU         * 
	LD	A1,OUTPEN,A6	OUTPUT PENDING INDICATOR 
* 
	RF(Z)	TRAN1
TRANEX	RTN	A5 
TRAN1	EQU	* 
	LD	A1,DRIVST,A6
	RB(P)	TRANEX	NO OUTPUT ALLOWED WHEN DRIVER STOPPED 
	ADK	A1,1 
	RB(Z)	TRANEX	STATUS =-1, DRIVER DISCONNECTED 
	LDK	A1,/80 
	ORS	A1,PART1,A6	PRESET INTRI 
	LD	A1,Q1ACAD,A6	ACKNOWLEDGE QUEUE FULL ? 
	LD	A1,NN,A1	.
	RF(Z)	TRAN10	YES, RESET IN TRI 
	LD	A1,SC,A6
	RF(Z)	TRAN10	NO I-FRAMES AVAILABLE 
	LD	A1,REMFR,A6 
	RF(Z)	TRAN10	REMOTE NOT FREE TO RECEIVE
	LD	A1,CSV,A6 
	SUK	A1,CNT 
	RF(Z)	TRAN20	I-FRAME TO BE SENT
TRAN10	EQU	*
	LDKL	A1,/FF7F
	ANS	A1,PART1,A6	RESET IN.TRI 
TRAN20	EQU	*
	LDK	A2,0	PRESET TABLE ENTRY TO FIRST WORD
         LD       A1,PART1,A6           GET TRANSMITTER CONDITIONS
	RB(Z)	TRANEX	NOTHING TO DO 
	LDR	A4,A1	SAVE PART1 IN REG A4 
	RF(N)	TRAN2	CONDITION FOUND, START PROCESS 
TRAN3	EQU	* 
	ADK	A2,2	INCREASE TABLE ENTRY
	CWK	A2,TRANTL	LAST ? 
	RB(E)	TRANEX	YES, NOTHING TO DO
	SLL	A1,1	GET NEXT CONDITION
	RB(NN)	TRAN3	NOT SET, TRY NEXT 
TRAN2	EQU	* 
	LD	A1,RESPAR,A2	RESET CONDITION PARAMETER
	ANS	A1,PART1,A6	RESET THE CONDITIONS 
	LDR	A3,A2
	SRL	A3,1	A3 POINTS IN TABLE FRTYPE 
	LC	A1,FRTYP,A3	
	SC	A1,TRCTL,A6	PRESET FRAME TYPE TO BE SENT
	ABI	TRANTB,A2	START TRANSMITTER PROCESS
	EJECT
TRANTB	EQU	*	TRANSMITTER PROCESS ENTRY TABLE
	DATA	TRFRMR	TRANSMIT FRMR/CMDR 
	DATA	TRUA	TRANSMIT UA
	DATA	TRDM	TRANSMIT DM
	DATA	TRSABM	TRANSMIT SABM/SARM 
	DATA	TRDISC	TRANSMIT DISC
	DATA	TRRNR	TRANSMIT RNR
	DATA	TRREJ	TRANSMIT REJ
	DATA	TRF	TRANSMIT ANY FRAME WITH F-BIT SET 
	DATA	TRI	TRANSMIT I-FRAME
	DATA	TRACK	TRANSMIT ACKNOWLEDGE (RR) 
	DATA	TRP	TRANSMIT ANY FRAME WITH P-BIT SET 
TRANTL	EQU	*-TRANTB	TABLE LENGTH
* 
* 
RESPAR	EQU	*	RESET PARAMETER FOR PART1
	DATA	/0180	FRMR/CMDR 
	DATA	/99A0	UA
	DATA	/D9A0	DM
	DATA	/E1A0	SABM/SARM 
	DATA	/F1A0	DISC
	DATA	/F9A0	RNR 
	DATA	/FDA0	REJ 
	DATA	/FFA0	F 
	DATA	/FFA0	I 
	DATA	/FFA0	ACK 
	DATA	/FFA0	P 
* 
* 
FRTYP	EQU	*	TABLE OF TO BE TRANSMITTED FRAMETYPES 
FRTYPE	FORM	8,8 
	FRTYPE	FRMR,UA 
	IFT	ABM=1
	FRTYPE	DM,SABM 
	XIF
	IFT	ABM=0
	FRTYPE	DM,SARM 
	XIF
	FRTYPE	DISC,RNR
	FRTYPE	REJ,RR
	FRTYPE	I,RR
	EJECT
TRUA	EQU	*	 
TRDM	EQU	*
TRFRMR	EQU	*
*	A4 CONTAIN ORIGINAL PART1 CONDITION 
*	A3 IS USED FOR ADDING CONDITIONS IN CONTROL FIELD 
*	A4 WILL BE USSED TO RESET CONDITION IN PART1
*	A1 IS USED FOR SETTING THE ADDRESS FIELD IN THE FRAME 
* 
	IFT	STAT=1 
	LDK	A1,T.FRMR	END OF U-FRAME COUNTERS
	SUR	A1,A2
	CF	A5,COUNT	COUNT # OF U-FRAMES
	XIF
	LD	A1,TRSPAD,A6	PRESET RESPONSE ADDRESS
	ANKL	A4,/100	F-BIT SET?
	RF(Z)	CUFR32	NO
CUFR20	LDK	A3,/10	YES, PRESET SETTING P/F-BIT 
CUFR30	XRS	A4,PART1,A6	RESET CONDITIONS IN PART1
	ORS	A3,TRCTL,A6	SET CONDITION IN CONTROL FIELD 
CUFR32	SC	A1,TRAD,A6	SET ADDRESS FIELD
*			A2 IS INDEX TO TYPE OF U-FRAME
	RF	WRITEC	GO ON WITH TRANSMITTING THE CONSTRUCTED FRAME
* 
TRSABM	EQU	*
TRDISC	EQU	*
	IFT	STAT=1 
	LDK	A1,T.FRMR	END OF U-FRAME COUNTERS
	SUR	A1,A2
	CF	A5,COUNT	COUNT # OF U-FRAMES
	XIF
	CM	OUTSTP,A6	PRE-RESET OUTSTP
	LD	A1,TCMDAD,A6	GET COMMAND ADDRESS
	ANK	A4,/20	PBIT SET IN PART1?
	RB(Z)	CUFR32	NO,SET COMMAND ADDR. AND WRITE CONTROL FRAME
	IM	OUTSTP,A6	YES , SET OUTSTP
	RB	CUFR20	RESET PART1, PREPARE CONTROL FRAME 
	EJECT
TRREJ	EQU	* 
	IFT	STAT=1 
	LDK	A1,T.REJ 
	RF	T.COUNT 
	XIF
*** 
TR.RNR	EQU	*
	IFT	STAT=1 
	LDK	A1,T.RNR 
TCOUNT	EQU	*
	CF	A5,COUNT
	XIF
***	
* 
CSFR	EQU	*	CONSTRUCT S-FRAME
	LD	A1,TRSPAD,A6	PRESET RESPONSE ADDRESS
	LDR	A7,A4	SAVE PART1 IN A7 
	ANKL	A4,/100	F-BIT SET IN PART1? 
	IFT	ABM=1
	RF(Z)	CSFR1	NO,CHECK IF P-BIT SET
CUFR36	LDK	A3,/10	PRESET F OR P TO BE SET IN CONTROL FIELD
	XIF
	IFT	ABM=0
	RF(Z)	CSFR1	NO 
	LDK	A3,/10	PRESET F TO BE SET IN CNTRL-FIELD 
	XIF
CUFR35	EQU	*
	LD	A2,VR,A6	GET VR 
	SLL	A2,5	SHIFT IN POSITION 
	ORR	A3,A2	NOW A3 CONTAINS ALSO VR
	RB	CUFR30	RESET F IN PART1 AND PREPARE CONTROL AND ADDRESS 
	IFT	ABM=1
CSFR1	LDR	A4,A7	GET SAVED PART1 
	LDK	A3,0	AVOID SETTING OF P OR F IN FRAME
	ANK	A4,/20	IS P-BIT SET IN PART1?
	RB(Z)	CUFR35	NO,PREPARE CONTROL FRAME
	LDK	A1,1 
	ST	A1,OUTSTP,A6	SET OUTSTANDING P INDICATION 
	LD	A1,TCMDAD,A6	PRESET COMMAND ADDRESS 
	RB	CUFR36
	XIF
	IFT	ABM=0
CSFR1	EQU	* 
	LDK	A3,0	AVOID SETTING OF F IN FRAME 
	RB	CUFR35
	XIF
	EJECT
TRP	EQU	* 
TRF	EQU	* 
TRACK	EQU	*	TRANSMIT ACKNOWLEDGE
* 
*     THIS PART OF THE TRANSMITTER TAKES CARE FOR THE CONSTRUCTION OF 
*     ANY P/F CARRYING FRAME
* 
CPFFR    EQU      *                     CONSTRUCT P/F-FRAME 
         LD       A1,SINS,A6            GET SINK STATE
         LC       A2,TCPE,A1            GET S-FRAME TYPE
         SC       A2,TRCTL,A6           STORE IN FRAME CONTROL FIELD
	IFT	ABM=0
	LDR	A7,A4	TEST IF P-BIT HAS TO BE TRANSMITTED
	ANK	A7,/20	. 
	RF(Z)	CPFFR1	NO
	XRS	A7,PART1,A6	WE CANNOT DO IT
***      TEST IF TIMER MUST BE ADJUSTED 
         LD       A7,REM.FR,A6
         RF(NZ)   CPFFR0           REMOTE FREE
         LDK      A7,3             SET REMOTE BUSY TIMER
         ST       A7,TST,A6 
         CF       A5,STATIM 
CPFFR0   EQU      * 
	RTN	A5 
* 
CPFFR1	EQU	*
	XIF
	IFT	STAT=1 
*			A1 IS USED AS INDEX 
	SLL	A1,1 
	ADK	A1,T.RR	COUNTER OF FIRST S-FRAME 
	CF	A5,COUNT	COUNT # OF S-FRAMES
	XIF
         RB      CSFR                  CONSTRUCT S-FRAME
* 
TCPE     EQU      * 
TCP      FORM     8,8 
         TCP      RR,RNR            EACH EIGHT BITS CONTAIN THE 
         TCP      REJ,/0            LAY-OUT BELONGING TO THE TYPE 
                                        TO BE TRANSMITTED 
	EJECT
TRI	EQU	* 
* 
*     THIS PROGRAM PART IS THE GENERAL PART FOR I-FRAME CONSTRUCTION. 
* 
SEF10    EQU      * 
	IFT	STAT=1 
	LDK	A1,T.I 
	CF	A5,COUNT	COUNT # OF I-FRAMES
	XIF
         LD       A1,MAXVS,A6           GET MAXIMUM VALUE REACHED 
*                                       BY V(S) 
         CW       A1,VS,A6              COMPARE WITH ACTUAL V(S)
         RF(NE)  SEF11
	IM	MAXVS,A6	INCREASE MAXV(S) 
         LDK      A1,/7 
         ANS      A1,MAXVS,A6           MODULO 8
* 
SEF20	EQU	* 
SEF11    EQU      *                     FURTHER ACTIONS ARE EQUAL 
         LD       A1,VS,A6              V(S)
	SLL	A1,1 
         LD       A2,VR,A6              V(R)
	SLL	A2,5 
         ORR      A1,A2 
         ST      A1,TRCTL,A6           INCLUDE COUNTERS IN CTL FIELD
	IM	VS,A6	INCREASE V(S) 
         LDK      A1,/7 
         ANS      A1,VS,A6              MODULO 8
         LD       A1,TCMDAD,A6          GET ADDRESS FOR COMMAND FRAME 
         SC       A1,TRAD,A6            STORE IN FRAME
	EJECT
*     THIS PART OF THE TRANSMITTER TAKES CARE FOR : 
*                 - P/F-BIT CONSTRUCTION
* 
PFCP     EQU      * 
         ANK      A4,/20                GET P-BIT 
         RF(Z)   PFCP1
	XRS	A4,PART1,A6	RESET P-BIT IN PART1 
	IM	OUTSTP,A6	SET OUTSTP
         LDK      A1,/10           SET P-BIT

         ORS      A1,TRCTL,A6 
PFCP1	EQU	* 
         RF      WRITEI                I-FRAME OUTPUT 
WRITEC	EQU	*	OUTPUT OF CONTROL FRAMES 
	CF	A5,GLECB	GET ELEMENT FROM LECB QUEUE
	LDK	A1,TRANSF	BUFFER ADDRESS 
	ADR	A1,A6	NOW REAL ADDRESS 
	ST	A1,ECBBA,A8	PUT IN ECB
	LDK	A1,5	PRESET LENGTH CASE FRMR/CMDR
	LC	A2,TRCTL,A6	GET CONTROL FIELD 
	ANK	A2,FRMR	STRIP NON RELEVANT BITS
	CWK	A2,FRMR	IS IT FRMR/CMDR ?
	RF(E)	WRITC1	YES ? 
	LDK	A1,2	LENGTH OF CONTROL FRAME 
WRITC1	EQU	*
	ST	A1,ECBRL,A8	IN ECB
* 
* 
WRITCI	EQU	*	FOR DATA AS WELL AS CONTROL
	IFT	LOG=1
	LDKL	A4,/53FF
	CF	A5,LOGFR	LOGGING OF OUTGOING FRAMES 
	XIF
	CF	A5,L1OUT	EXECUTE WRITE LEVEL 1
	RF	PTTC	PROCESS TRANSMITTER TIMER CONTROL
* 
WRITEI	EQU	*
	LDK	A1,Q1SCAD	ENTRY POINT OUTPUT QUEUE ADDRESSES 
	ADR	A1,A6	IN CORRECT PARAMETER TABLE 
PRI7	LDR*	A3,A1	GET QUEUE ADDRESS 
PRI6	CF	A5,GETBUF	GET ELEMENT FROM QUEUE
	LD	A3,Q1ACAD,A6
	CF	A5,PUTBUF	SET IN ACK QUE
	LD	A1,TRANSF,A6	GET ADDRESS AND CONTROL
	LD	A2,ECBBA,A8	GET BUFFER ADDRESS
	STR	A1,A2	STORE CONTROL AND ADDRESS
	LD	A1,ECBRL,A8	SAVE REQUESTED LENGTH 
	CM	ECBEL,A8
	CF	A5,GLECB	GET ELEMENT FROM LECB QUEUE(A3)
	ST	A1,ECBRL,A8	REQ. LENGTH IN ECB
	ST	A2,ECBBA,A8	STORE BUFFER ADDRESS IN ECB 
	IM	AC,A6	INCREMENT ACKNOWLEDGE COUNT 
	LDKL	A1,-1 
	ADS	A1,SC,A6	DECREMENT SEND COUNT
	RB	WRITCI
	EJECT
* 
*     THIS PART PERFORMS THE PROCESSING OF THE
*     TRANSMITTER TIMER CONTROL.
* 
* 
PTTC	EQU	*
	LD	A1,CSV,A6	GET ACTUAL PROTOCOL STATUS
	RF(Z)	TIMAC1	CSV IS DISCONNECTED 
	CWK	A1,CNT 
	RF(E)	TIMAC2	CSV IS CONNECTED
	CWK	A1,CNTRES
	RF(E)	TIMAC4	CSV IS WAIT FOR RESET 
*	ALL OTHER CSV'S 
	RF	TIMAC3	PROCESS OTHER CSV'S
TIMAC1	EQU	*
	SUK	A1,1	TST = -1
	ST	A1,TST,A6	SET STATE 
	RF	TIMEX 
* 
TIMAC2	EQU	*
	LD	A1,OUTSTP,A6	CHECK OUTSTANDING P-BIT
	RF(Z)	TIMC2A 
	LD	A1,TST,A6	GET TIMER STATE 
	SUK	A1,1 
	RF(Z)	TIMEX	TST=1
	RF	TIMST1
TIMC2A	EQU	*
	LD	A1,TST,A6	GET TIMER STATE 
***      TEST IF TST HAS TO BE ADJUSTED 
         CWK      A1,2
         RF(NL)   TIMEX            NO!
***      TEST IF ACK-TIMER HAS TO BE SET
         LD       A2,AC,A6
         RF(Z)    TIMC2C           NO!
         LDK      A1,2             SET ACK-TIMER
         RF       TIMSAV
TIMC2C   EQU      * 
	SUK	A1,1 
	RF(Z)	TIMST0	SET TIMER STATE TO 0
	RF	TIMEX	RETURN TO CALLER
* 
TIMAC3	EQU	*
	LDK	A1,1 
	CW	A1,TST,A6	TST IS 1 ?
	RF(E)	TIMEX	YES EXIT 
	RF	TIMSAV
* 
TIMAC4	EQU	*
	LDK	A1,4	TIMER STATE BECOMES 4 
	RF	TIMSAV
* 
TIMST1	EQU	*
	LDK	A1,1	SET TIMER STATE TO 1
	RF	TIMSAV
TIMST0	EQU	*
	LDK	A1,0	SET TIMER STATE TO 0
TIMSAV	EQU	*
	ST	A1,TST,A6	SAVE TIMER STATE
	CF	A5,STATIM	START TIMER 
TIMEX	EQU	* 
	RTN	A5	RETURN TO CALLER
	IFT	STAT=1 
	EJECT
* 
* 
****	STATISTICAL COUNTING ROUTINE 
* 
*	AT ENTRY: 
*		A1 = INDEX FOR FRAME TYPE TO BE COUNTED
*		A6 = ADDRESS PARAMETER TABLE 
* 
COUNT	EQU	* 
	STR	A1,A5	SAVE A1
	LD	A1,STASTR,A6
	RF(Z)	COUNTR 
	ADR*	A1,A5 
	IMR	A1	INCREMENT STATISTICAL COUNTER 
COUNTR	EQU	*
	LDR*	A1,A5	RESTORE A1
	RTN	A5	RETURN
	XIF
	EJECT
RESTR	EQU	*	RESET TRANSMITTER VARIABLES 
	CM	NRT,A6
	LDK	A1,1 
	ST	A1,REMFR,A6 
	CM	VS,A6 
	CM	MAXVS,A6
	CM	LNR,A6
	CM	OUTSTP,A6 
	CM	PART1,A6
	RTN	A5 
* 
RESREC	EQU	*	RESET RECEIVER VARIABLES 
	CM	VR,A6 
	RTN	A5 
	EJECT
* 
*     THIS PART WILL PERFORM THE INITIALISATION 
*     OF THIS LEVEL 
* 
* 
INIT	EQU	*
	CF	A5,INIT.IO
	CM	TIMADR,A6	RESET ADDRESS TIMER BLOCK AS FLAG 
	CM	LECBRC,A6	RESET ERRORRETURNCODE 
	IFT	STAT=1 
	LD	A1,STASTR,A6	START OF COUNTER AREA
INIT10	EQU	*
	CMR	A1	CLEAR COUNTERS
	ADK	A1,2 
	CW	A1,STAEND,A6	END REACHED ?
	RB(NE)	INIT10	NO 
	XIF
	LDR	A4,A6	SET POINTER
	LDK	A2,12	MINIMUM NR OF QUEUES*2 
INITR	EQU	*	RETURN POINT
	LD	A3,QUEAD,A4	GET FIRST QUE ADDRESS 
	CM	NF,A3	MAKE QUEUE EMPTY
	LD	A7,MI,A3	 
	ST	A7,IN,A3	SET INSERT POINTER 
	ST	A7,EX,A3	SET EXTRACT POINTER
	LD	A1,MA,A3
	SUR	A1,A7	NOW WE HAVE NUMB OF ELEMENTS 
	ST	A1,NN,A3	SET NUMBER OF ELEMENTS 
	ADK	A4,2	INCRENMENT QUE POINTER
	SUK	A2,2	DECREMENT NUMBR TO BE INITIALIZED 
	RB(NZ)	INITR	DO AGAIN
	LD	A1,Q1LEAD,A6	LENGTH OF LECB QUEUE 
	LD	A2,NN,A3	.
	LDR	A7,A8	SAVE A8
	LD	A8,Q1LECA,A6	ADDRESS FIRST ELEMENT
INITQ	CF	A5,PUTBUF	STORE IN QUEUE (A3=ADDR) 
	ADKL	A8,12	UPDATE ELEMENT ADDRESS
	SUK	A2,2	DECREASE NR OF QUEUES 
	RB(NZ)	INITQ	STORE ELEMENT 
	LDR	A8,A7	RELOAD A8
	LDKL	A1,-1 
	ST	A1,PROTST,A6	PROTOCOL STATUS DISCONNECT 
	ST	A1,DRIVST,A6	DRIVER STATUS DISCONNECT 
			IN SAVE AREA 
	RTN	A5	RETURN TO CALLER
	EJECT
* 
***	TIMER ROUTINES
* 
STATIM	EQU	*	START TIMER
	LD	A2,TST,A6	GET TIMER STATE 
	ADR	A2,A2	MAKE INDEX IN TIMER VALUE TABLE
	LD	A3,TIMVAL,A2	GET TIMER STATE DEPENDENT TIMER VALUE
         INH
	ST	A3,TIMER	SET IN LOCATION FOR TIMER
	C1R	A3,A3
	LD	A2,TIMADR,A6	CURRENT TIMER RUNNING? 
	RF(Z)	STATI1	NO
	LDR*	A2,A2	GET TIMER VALUE 
	RF(P)	STATI1	TIMER ALREADY EXHAUSTED 
	ST*	A3,TIMADR,A6	SAVE NEW TIMER VALUE
	ENB
	RTN	A5 
* 
STATI1	EQU	*
	LD	A1,TMECBA,A6	ADDRESS TIMER ECB AS PARAMETER 
	LC	A4,FCL1+1,A6	SET FILECODE IN TIMER ECB
	SC	A4,1,A1 
	CF	A15,SETIME	START TIMER
	DATA	IDREQT	TIMER ENTRY AFTER TIME OUT 
TIMER	DATA	0	TIMER VALUE
	ENB		SETIME RETURNS INHIBIT!!
	ST	A4,TIMADR,A6	SAVE TIMER VALUE ADDRESS 
	RTN	A5	RETURN TO CALLER
* 
TIMVAL	EQU	*
	DATA	SYTIM0	VALUE IF TST 0 
	DATA	SYTIM1	VALUE IF TST 1 
	DATA	SYTIM2	VALUE IF TST 2 
	DATA	SYTIM3	VALUE IF TST 3 
	DATA	SYTIM4	VALUE IF TST 4 
* 
* 
	EJECT
* 
MSRL	EQU	*	MULTIPLE STORE FOR REGISTERSA1 A8
	ST	A1,SAV,A6	IN SAVE AREA
	ST	A2,SAV+2,A6 
	ST	A3,SAV+4,A6 
	ST	A4,SAV+6,A6 
	ST	A7,SAV+8,A6 
	LD	A1,FCL1,A6	FILE CODE FOR CURRENT DRIVER 
	STR	A1,A8	STORE INTO LINE ECB
	RTN	A5	RETURN TO CALLER
* 
* 
* 
MLRL	EQU	*	RELOAD LOW REGISTERS A1-A8 
	LD	A1,SAV,A6 
	LD	A2,SAV+2,A6 
	LD	A3,SAV+4,A6 
	LD	A4,SAV+6,A6 
	LD	A7,SAV+8,A6 
	RTN	A5	RETURN TO CALLER
	EJECT
****	DRIVER REQUEST ROUTINES
* 
L1CONN	EQU	*
	CF	A5,MSRL 
	CM	OUTPEN,A6	RESET OUTPUT PENDING
	CM	INPCNT,A6	RESET INPUT PENDING COUNTER 
	CF	A5,DR.CONN	LEVEL 1 CALL 
L1RET	EQU	* 
	LDR*	A1,A8	GET FILE CODE CURRENT DRIVER
	LD	A2,TABPAR	GET TABLE LENGTH
L1RET2	EQU	*
	CC	A1,TABPAR-1,A2	DOES THE FILECODES MATCH 
	RF(E)	L1RET3	YES 
	SUK	A2,4	TAKE NEXT ENTRY 
	RB	L1RET2
L1RET3	EQU	*
	LD	A6,TABPAR,A2	GET PARAMETER TABLE ADDRESS
	CF	A5,MLRL	MULTIPLE LOAD OF LOW REGISTERS
	LD	A4,ECBRC,A8	GET RETURN CODE 
	RF(NP)	L1RET1	COMMON RETURN POINT
	LD	A4,ECBPR,A8 
	CWK	A4,ORCNL1
	RF(E)	L1RET1	CONNECT REQUEST FAILED
	HLT
L1RET1	EQU	*
	RTN	A5	RETURN TO CALLER
* 
* 
*	DRIVER INPUT REQUEST WITH IMPLICIT
*	LINE ECB REQUEST AND STORE BUFFERADDRESS
*	AT ENTRY A7=BUFFERADDRESS 
* 
L1INPQ	EQU	*
	CF	A5,GLECB	GET LINE ECB FROM QUEUE
	ST	A7,ECBBA,A8	STORE BUFFERADDRESS IN ECB
L1INP	EQU	*	PERFORM LEVEL 1 CALL
	CF	A5,MSRL 
	IM	INPCNT,A6	INCREASE NR OF PENDING INPUT REQUESTS 
	LD	A1,SYLEN,A6 
	ST	A1,ECBRL,A8	STORE FIXED LENGTH
	CF	A5,DR.INP	LEVEL 1 CALL
	RB	L1RET	COMMON RETURN POINT 
* 
L1OUT	EQU	*	PERFORM LEVEL 1 CALL
	CF	A5,MSRL 
	IM	OUTPEN,A6	SET OUTPUT PENDING INDICATION 
	CF	A5,DR.OUT	LEVEL 1 CALL
	RB	L1RET	COMMON RETURN POINT 
* 
*	DRIVER STOP REQUEST WITH IMPLICIT REQUEST 
*	OF A LINE ECB AND RESTORE LINE ECB
* 
L1STPQ	EQU	*
	CF	A5,GLECB	GET LINE ECB 
	CF	A5,L1STOP	STOP DRIVER 
	CF	A5,PLECB	RESTORE LINE ECB IN QUEUE
	RTN	A5 
L1STOP	EQU	*	PERFORM LEVEL 1 CALL 
	CM	TIMADR,A6	SET CURRENT TIMER STOP
	CF	A5,MSRL 
	LDK	A1,1 
	ST	A1,DRIVST,A6	SET DRIVER STATUS STOP 
	CF	A5,DR.STOP	LEVEL 1 CALL 
	RB	L1RET	COMMON RETURN POINT 
* 
*	DRIVER DISCONNECT REQUEST WITH IMPLICIT 
*	REQUEST OF A LINE ECB 
* 
L1DISQ	EQU	*
	CF	A5,GLECB	GET LINE ECB FROM QUEUE
L1DISC	EQU	*	PERFORM LEVEL 1 CALL 
	CF	A5,MSRL 
	LDKL	A1,-1 
	ST	A1,DRIVST,A6	SET DRIVER STATUS DISCONNEC
	CF	A5,DR.DISC	LEVEL 1 CALL 
	RB	L1RET	COMMON RETURN POINT 
	EJECT
MI	EQU	/0 
MA	EQU	/2 
NF	EQU	/4 
NN	EQU	/6 
IN	EQU	/8 
EX	EQU	/A 
* 
* 
* 
* 
*     THIS PROGRAM PART WILL TAKE CARE FOR THE DEQUEUEING 
*     OF ECB'S. 
* 
*     THE EXPECTED INPUT PARAMETERS ARE:
*          A3 = QUEUE ADDRESS 
*          A5 = STACKBASE 
* 
* 
*     A8 WILL CONTAIN THE FOUND ECB ADDRESS 
* 
*     NO REGISTERS BELOW A9 ARE AFFECTED. 
* 
GLECB	LD	A3,Q1LEAD,A6	ADDRESS LECB QUEUE
* 
GETBUF	EQU	*
	STR	A7,A5	SAVE TEMPORARILY ON STACK
	LD	A7,NF,A3	ARE THERE FREE BUFFERS?
	RF(NP)	GETBEX	NO 
	LD	A7,EX,A3	GET EXTRACTION POINTER 
	LDR*	A8,A7	GET BUFFER ADDRESS
	ADKL	A7,2	INCREMENT EXTRACT POINTER
	CW	A7,MA,A3	MAXIMUM REACHED? 
	RF(NE)	GETB1	CONTINUE
	LD	A7,MI,A3	SET POINTER TO BEGIN 
GETB1	EQU	* 
	ST	A7,EX,A3	SAVE POINTER 
	LDK	A7,2 
	ADS	A7,NN,A3	INCREMENT NOT FREE COUNTER
	LDKL	A7,-2 
	ADS	A7,NF,A3	DECREMENT FREE COUNTER
	RF	RETRN	RELOAD A7 AND RETURN
GETBEX	EQU	*
	HLT
* 
* 
* 
*     THIS PROGRAM PART TAKES CARE FOR THE QUEUEING 
*     OF ECB. 
* 
*     THE EXPECTED INPUT PARAMETERS ARE:
*          A3 = QUEUE ADDRESS 
*          A5 = STACKBASE 
*          A8= ECB ADDRESS TO BE QUEUED 
* 
* 
*     NO REGISTERS BELOW A8 ARE AFFECTED. 
* 
PLECB	LD	A3,Q1LEAD,A6	ENTRY POINT TO PUT LECB IN QUEUE
* 
PUTBUF	EQU	*
	STR	A7,A5	SAVE A7 ON STACK 
	LD	A7,NN,A3	GET NUMBER NOT FREE
	RF(NP)	PUTBEX	NOTHING
	LD	A7,IN,A3	GET INSERT POINTER 
	STR	A8,A7	SAVE BUFFER ADDRESS
	ADK	A7,2	INCREASE INSERT POINTER 
	CW	A7,MA,A3	MAXIMUM REACHED ?
	RF(NE)	PUTB1	NO
	LD	A7,MI,A3	SET POINTER TO BEGIN 
PUTB1	EQU	* 
	ST	A7,IN,A3	SAVE POINTER 
	LDK	A7,2 
	ADS	A7,NF,A3	INCREMENT FILLED
	LDKL	A7,-2 
	ADS	A7,NN,A3	DECREMENT NOT FILLED
RETRN	EQU	* 
	LDR*	A7,A5	RELOAD A7 FROM STACK
	RTN	A5 
PUTBEX	EQU	*
	HLT
	IFT	TRACE=1
	EJECT
* 
* 
****	LOGING ROUTINE FOR RECEIVED AND TRANSMITTED I-FRAMES 
* 
*	AT ENTRY: 
*		A8 = ECB-ADDRESS 
* 
*	AT RETURN:
*		A1, A3, A4 AND A7 ARE CHANGED
* 
LOGTRC	EQU	*
	LD	A3,ECBBA,A8	GET LOAD BUFFER 
	LDK	A4,5	GET # OF WORDS TO MOVE
	LD	A7,CURTRP,A6	GET STORE POINTER IN TRACE BUFFER
	RF(Z)	LOGT30	NO AREA SPECIFIED 
LOGT10	EQU	*
	LDR*	A1,A3	GET WORD
	STR	A1,A7	STORE
	ADK	A3,2	INCREASE LOAD POINTER 
	ADK	A7,2	INCREASE STORE POINTER
	CW	A7,TRAEND,A6	END OF TRACE BUFFER REACHED ?
	RF(NE)	LOGT20	NO 
	LD	A7,TRASTR,A6	SET POINTER ON START OF TRACE BUFFER 
LOGT20	EQU	*
	SUK	A4,1	DECREASE # OF WORDS 
	RB(NZ)	LOGT10	GET NEXT 
	ST	A7,CURTRP,A6	SAVE NEW STORE POINTER 
LOGT30	EQU	*
	RTN	A5	RETURN
	XIF
	IFT	LOG=1
	EJECT
* 
* 
****	LOGING ROUTINE FOR RECEIVED AND TRANSMITTED HDLC-FRAMES
* 
*	AT ENTRY: 
*		A4 = SEND/RECEIVE INDICATION 
*		A8 = ECB-ADDRESS 
* 
*	AT RETURN:
*		A7 IS CHANGED
* 
LOGFR	EQU	* 
	LD	A7,CURLGP,A6	GET STORE POINTER IN LOG BUFFER
	RF(Z)	LOG20	NO AREA SPECIFIED
	STR	A4,A7	STORE SEND/RECEIVE INDICATION
	LD*	A4,ECBBA,A8
	ST	A4,2,A7	STORE FIRST BUFFER WORD 
	ADK	A7,4	ADJUST STORE POINTER
	CW	A7,LOGEND,A6	END OF AREA REACHED ?
	RF(NE)	LOG10	NO
	LD	A7,LOGSTR,A6	YES, SET STORE POINTER ON START
LOG10	EQU	* 
	ST	A7,CURLGP,A6	SAVE NEW STORE POINTER 
LOG20	EQU	* 
	RTN	A5	RETURN
	XIF
	EJECT
* 
*	TABLE THAT CONTAINS THE FILECODE USED AT THE I/O-HANDLER
*	INTERFACE FOR A CERTAIN LINE AND THE ADDRESS OF THE RELATED 
*	PARAMETER TABLE.
* 
TABPAR	EQU	*
	DATA	TABEND-*	TABLE LENGTH 
* 
	DATA	FC:LN1
	DATA	PARTA1
	IFF	SYNRLN=1 
	DATA	FC:LN2
	DATA	PARTA2
	IFF	SYNRLN=2 
	DATA	FC:LN3
	DATA	PARTA3
	IFF	SYNRLN=3 
	DATA	FC:LN4
	DATA	PARTA4
	XIF
TABEND	EQU	*-2
	EJECT
* 
*        THE PARAMETER TABLE CONTAINS ALL PARAMETERS THAT CONTROL 
*        THE FUNCTIONING OF DVDCLC
*        FOR EACH "LIFE" OF THE HDLC PROTOCOL PROGRAM , ONE TABLE MUST
*        BE DEFINED 
* 
*        THE TABLE CONSISTS OF TWO PARTS I.E. 
*               * ONE PART THAT CONTAINS ALL VARIABLES THAT ARE RELATED 
*                 TO THE PROTOCOL.
*               * ONE PART THAT CONTAINS ALL VARIABLES THAT CONTAIN 
*                 OTHER INFORMATION SUCH AS QUEUEING PARAMETERS FOR 
*                 BUFFERS , ECB'S , FRAME CONTENTS. 
* 
* 
*****    FIRST PART    *****
* 
	DATA	'PARTA1'
PARTA1	EQU	*	START OF TABLE 
* 
*	DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE 
* 
DW2501	EQU	*
	DATA	'DC'	CHANNEL PARAMETER
	DATA	/8000	STATUS
	DATA	0	ECB-ADDRESS 
	DATA	0	ORDER 
	DATA	DRDC25	POINTER TO ADDRESS BLOCK 
	DATA	0	TTAB-ADDRESS
	DATA	0	WAIT/ACTIVATION INDICATOR 
	DATA	0	TERMINAL QUEUE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	ECHO DEVICE 
	DATA	PARTA1	PARAMETER TABLE ADDRESS
* 
PART1    EQU      *-PARTA1
         DATA     0 
*                 THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
*                      BIT 0  =  IN.FRMR/IN.CMDR
*                          1  =  IN.UA
*                          2  =  IN.DM
*                          3  =  IN.SABM/IN.SARM
*                          4  =  IN.DISC
*                          5  =  IN.RNR 
*                          6  =  IN.REJ 
*                          7  =  IN.F 
*                          8  =  IN.TRI 
*                          9  =  IN.ACK 
*                         10  =  IN.P 
*                         11  =  ** SPARE **
*                         12  =  ** SPARE **
*                         13  =  ** SPARE **
*                         14  =  ** SPARE **
*                         15  =  ** SPARE **
* 
RECCMD   EQU      *-PARTA1              COMMAND/RESPONSE INDICATOR
         DATA     0 
* 
OUTSTP   EQU      *-PARTA1              OUTSTANDING P-BIT INDICATOR 
         DATA     0 
* 
CSV      EQU      *-PARTA1              CONNECTION STATE VARIABLE 
	DATA	0 
* 
TST      EQU      *-PARTA1              TIMER STATE 
         DATA     0 
* 
SINS     EQU      *-PARTA1              SINK STATE
         DATA     0 
RRSETI	EQU	*-PARTA1	RECEIVER RESET INDICATION 
	DATA	0 
* 
REMFR    EQU      *-PARTA1              REMOTE FREE INDICATOR 
         DATA     0 
* 
NEWNR    EQU      *-PARTA1              NEW N(R) RECEIVED INDICATOR 
         DATA     0 
* 
VS       EQU      *-PARTA1              SEND STATE VARIABLE  V(S) 
         DATA     0 
* 
VR       EQU      *-PARTA1              RECEIVE STATE VARIABLE V(R) 
         DATA     0 
* 
MAXVS    EQU      *-PARTA1              MAXIMUM VALUE V(S) HAS REACHED
         DATA     0                     UPDATED TOGETHER WITH V(S)
* 
LNR      EQU      *-PARTA1              LAST VALUE OF N(R) RECEIVED 
         DATA     0                     FROM OPPOSITE SIDE
* 
SC       EQU      *-PARTA1              NUMBER OF FRAMES TO BE SEND 
         DATA     0 
* 
AC       EQU      *-PARTA1              NUMBER OF ACKNOWLEDGES TO BE
         DATA     0                     RECEIVED
* 
NRT      EQU      *-PARTA1              NUMBER OF RETRIES 
         DATA     0 
TRSPAD	EQU	*+1-PARTA1 
RCMDAD	EQU	*+1-PARTA1 
	DATA	SYADRS	RESPONSE ADDRESS 
TCMDAD	EQU	*+1-PARTA1 
RRSPAD	EQU	*+1-PARTA1 
	DATA	SYADCM	COMMAND ADDRESS
IDFT	EQU	*-PARTA1	FRAME TYPE IDENTIFIER 
	DATA	0 
IIF	EQU	*-PARTA1	ILLEGAL I-FIELD INDICATION 
	DATA	0 
STB	EQU	*-PARTA1
	DATA	STCK1A+PARTA1-2 
SAV	EQU	*-PARTA1	SAVE AREA FOR REGISTERS
	RES	5	SAVE AREA FOR REGISTERS
NEWSTB	EQU	*-PARTA1	STACBASE FOR INTERRUPTS DURING BUSY 
	DATA	STCK1B+PARTA1-2	STACKBASE ENTRY 
BUFAD	EQU	*-PARTA1
	DATA	0 
BUFLEN	EQU	*-PARTA1 
	DATA	0 
RECCF	EQU	*-PARTA1
	DATA	0 
SAV1	EQU	*-PARTA1 
	DATA	0 
SAV2	EQU	*-PARTA1	SAVE AREA FOR REGISTERS IN RECEIVER 
	DATA	0 
SAV3	EQU	*-PARTA1 
	DATA	0 
TRANSF	EQU	*-PARTA1 
TRAD	EQU	*-PARTA1 
TRCTL	EQU	*+1-PARTA1
	DATA	0	ADDRESS AND CONTROL FIELD FOR TRANSMITTER 
FRSAV1	EQU	*-PARTA1 
FRSAV2	EQU	*+1-PARTA1 
FRSAV3	EQU	*+2-PARTA1 
	DATA	0	ADDITIONAL INFO FOR CMDR FRAME
	DATA	0 
* 
	EJECT
* 
* QUE ADDRESSES BELONGING TO ONE LINE OF HDLC 
* 
* 
QUEAD	EQU	*-PARTA1
Q1ERAD	EQU	*-PARTA1 
	DATA	Q1ER
Q1IRAD	EQU	*-PARTA1 
	DATA	Q1IR
Q1ACAD	EQU	*-PARTA1 
	DATA	Q1AC
Q1COAD	EQU	*-PARTA1 
	DATA	Q1CO
Q1SCAD	EQU	*-PARTA1	ENTRY IN TABLE FOR OUTPUT QUEUES
	DATA	Q1SC	ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
Q1LEAD	EQU	*-PARTA1 
	DATA	Q1LE
* 
Q1LECA	EQU	*-PARTA1	ADDRESS FIRST LINE ECB
	DATA	Q1LEC1	*****TEM****** 
* 
	EJECT
*****    SECOND PART    ***** 
* 
* 
RECNR    EQU      *-PARTA1              WILL CONTAIN THE N(R) OF THE
         DATA     0                     RECEIVED FRAME
* 
DWTAD	EQU	*-PARTA1
	DATA	DW2501
SYLEN	EQU	*-PARTA1
	DATA	0	INPUT LENGTH
OUTPEN	EQU	*-PARTA1 
	DATA	0 
BUSY	EQU	*-PARTA1 
	DATA	0 
PROTST	EQU	*-PARTA1 
	DATA	-1
DRIVST	EQU	*-PARTA1 
	DATA	-1
FCL1	EQU	*-PARTA1 
	DATA	FC:LN1
TMECBA	EQU	*-PARTA1	ADDRESS TIMER ECB 
	DATA	TIMECB+PARTA1	THIS ECB MUST BE DEFINED FOR ANY LINE 
TIMADR	EQU	*-PARTA1 
	DATA	0 
CON.ECB	EQU	*-PARTA1
	DATA	0 
DIS.ECB	EQU	*-PARTA1
	DATA	0 
INP.CNT	EQU	*-PARTA1
	DATA	0 
LECBRC	EQU	*-PARTA1 
	DATA	0 
CONBUF	EQU	*-PARTA1 
	DATA	0 
INBUF	EQU	*-PARTA1	INIT POINTER 
	DATA	SAVBUF+PARTA1 
	IFT	TRACE=1
CURTRP	EQU	*-PARTA1 
	DATA	TRABUF+PARTA1	CURRENT TRACE BUFFER POINTER
TRASTR	EQU	*-PARTA1 
	DATA	TRABUF+PARTA1 
TRAEND	EQU	*-PARTA1 
	DATA	TREND+PARTA1
	XIF
	IFT	LOG=1
CURLGP	EQU	*-PARTA1 
	DATA	LOGBUF+PARTA1	CURRENT LOG BUFFER POINTER
LOGSTR	EQU	*-PARTA1 
	DATA	LOGBUF+PARTA1 
LOGEND	EQU	*-PARTA1 
	DATA	LGEND+PARTA1
	XIF
	IFT	STAT=1 
STASTR	EQU	*-PARTA1 
	DATA	STABUF+PARTA1 
STAEND	EQU	*-PARTA1 
	DATA	STEND+PARTA1
	XIF
INP.RY	EQU	*-PARTA1 
	DATA	-100
PARLEN	EQU	*-PARTA1	LENGTH OF PARAMETER TABLE 
	EJECT
* 
	RES	10	CALL FUNCTION STACK 
STCK1A	EQU	*-PARTA1 
* 
	RES	3	CALL FUNC STACK FOR INTERR. REQ. 
STCK1B	EQU	*-PARTA1 
* 
TIMECB	EQU	*-PARTA1 
	DATA	FC:LN1	TIMER ECB
	DATA	0,0,0,0,ORTIL1	ORDER = ORTIL1 
* 
SAVBUF	EQU	*-PARTA1 
	RES	SYUBNR	SAVE AREA FOR CONNECT BUFFERS 
* 
	IFT	TRACE=1
TRABUF	EQU	*-PARTA1 
	RES	100	TRACE AREA 
TREND	EQU	*-PARTA1
	XIF
* 
	IFT	LOG=1
LOGBUF	EQU	*-PARTA1 
	RES	50	LOG AREA
LGEND	EQU	*-PARTA1
	XIF
* 
	IFT	STAT=1 
STABUF	EQU	*-PARTA1 
	RORG	*+STALNG	STATISTICAL AREA 
STEND	EQU	*-PARTA1
	XIF
	EJECT
* 
* 
*     THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
*     EVENTS ARE READY
* 
* 
Q1ER	EQU	*	START OF QUEUE 
Q1ERMI	DATA	Q1ERSA	MINIMUM VALUE OF POINTER 
Q1ERMA	DATA	Q1ERFI	MAXIMUM VALUE OF POINTER 
Q1ERNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q1ERNN	DATA	Q1ERFI-Q1ERSA	NUMBER OF FREE POSITIONS
Q1ERIP	DATA	Q1ERSA	INSERTION POINTER
Q1EREP	DATA	Q1ERSA	EXTRACTION POINTER 
Q1ERSA	RES	SYNRRC+SYNRTR+1	RESERVE ALLOWED NUMBER 
Q1ERFI	EQU	*	END OF BLOCK 
* 
* 
* THE INPUT REQUEST QUEUE 
* 
* 
Q1IR	EQU	*	START OF QUEUE 
Q1IRMI	DATA	Q1IRSA	MINIMUM VALUE OF POINTER 
Q1IRMA	DATA	Q1IRFI	MAXIMUM VALUE OF POINTER 
Q1IRNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q1IRNN	DATA	Q1IRFI-Q1IRSA	NUMBER OF FREE POSITIONS
Q1IRIP	DATA	Q1IRSA	INSERTION POINTER
Q1IREP	DATA	Q1IRSA	EXTRACTION POINTER 
Q1IRSA	RES	SYNRRC	RESERVE ALLOWED NUMBER
Q1IRFI	EQU	*	END OF BLOCK 
* 
* 
* THE ACKNOWLEDGE QUEUE 
* 
* 
Q1AC	EQU	*	START OF QUEUE 
Q1ACMI	DATA	Q1ACSA	MINIMUM VALUE OF POINTER 
Q1ACMA	DATA	Q1ACFI	MAXIMUM VALUE OF POINTER 
Q1ACNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q1ACNN	DATA	Q1ACFI-Q1ACSA	NUMBER OF FREE POSITIONS
Q1ACIP	DATA	Q1ACSA	INSERTION POINTER
Q1ACEP	DATA	Q1ACSA	EXTRACTION POINTER 
Q1ACSA	RES	SYTRWN	RESERVE ALLOWED NUMBER
Q1ACFI	EQU	*	END OF BLOCK 
* 
* 
* THE SEND QUEUE
* 
* 
Q1SC	EQU	*	START OF QUEUE 
Q1SCMI	DATA	Q1SCSA	MINIMUM VALUE OF POINTER 
Q1SCMA	DATA	Q1SCFI	MAXIMUM VALUE OF POINTER 
Q1SCNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q1SCNN	DATA	Q1SCFI-Q1SCSA	NUMBER OF FREE POSITIONS
Q1SCIP	DATA	Q1SCSA	INSERTION POINTER
Q1SCEP	DATA	Q1SCSA	EXTRACTION POINTER 
Q1SCSA	RES	SYNRTR	RESERVE ALLOWED NUMBER
Q1SCFI	EQU	*	END OF BLOCK 
* 
* 
* THE INTERRUPT COMPLETION QUEUE
* 
* 
Q1CO	EQU	*	START OF QUEUE 
Q1COMI	DATA	Q1COSA	MINIMUM VALUE OF POINTER 
Q1COMA	DATA	Q1COFI	MAXIMUM VALUE OF POINTER 
Q1CONF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q1CONN	DATA	Q1COFI-Q1COSA	NUMBER OF FREE POSITIONS
Q1COIP	DATA	Q1COSA	INSERTION POINTER
Q1COEP	DATA	Q1COSA	EXTRACTION POINTER 
Q1COSA	RES	SYNRRC+SYUBNR+4	RESERVE ALLOWED NUMBER 
Q1COFI	EQU	*	END OF BLOCK 
* 
* 
* THE QUEUE OF LINE ECBS
* 
* 
Q1LE	EQU	*	START OF QUEUE 
Q1LEMI	DATA	Q1LESA	MINIMUM VALUE OF POINTER 
Q1LEMA	DATA	Q1LEFI	MAXIMUM VALUE OF POINTER 
Q1LENF	DATA	Q1LEFI-Q1LESA	NUMBER OF QUEUED ELEMENTS 
Q1LENN	DATA	0	NUMBER OF FREE POSITIONS
Q1LEIP	DATA	Q1LESA	INSERTION POINTER
Q1LEEP	DATA	Q1LESA	EXTRACTION POINTER 
Q1LESA	EQU	*
*****	 MAXIMUM 12 LINE ECB'S RESERVED 
* 
	DATA	Q1LEC1
	DATA	Q1LEC1+12 
	DATA	Q1LEC1+24 
	IFF	NRLECB=3 
	DATA	Q1LEC1+36 
	IFF	NRLECB=4 
	DATA	Q1LEC1+48 
	IFF	NRLECB=5 
	DATA	Q1LEC1+60 
	IFF	NRLECB=6 
	DATA	Q1LEC1+72 
	IFF	NRLECB=7 
	DATA	Q1LEC1+84 
	IFF	NRLECB=8 
	DATA	Q1LEC1+96 
	IFF	NRLECB=9 
	DATA	Q1LEC1+108
	IFF	NRLECB=10
	DATA	Q1LEC1+120
	IFF	NRLECB=11
	DATA	Q1LEC1+132
	IFF	NRLECB=12
	DATA	Q1LEC1+144
	IFF	NRLECB=13
	DATA	Q1LEC1+156
	IFF	NRLECB=14
	DATA	Q1LEC1+168
	IFF	NRLECB=15
	XIF
Q1LEFI	EQU	*	END OF BLOCK 
* 
*	IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED 
* 
Q1LEC1	EQU	*
	RES	NRLECB	WORD 0
	RES	NRLECB	WORD 1
	RES	NRLECB	WORD 2
	RES	NRLECB	WORD 3
	RES	NRLECB	WORD 4
	RES	NRLECB	WORD 5
         IFT      LINE2=1 
	EJECT
*****    FIRST PART    *****
* 
	DATA	'PARTA2'
PARTA2	EQU	*	START OF TABLE 
* 
*	DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE 
* 
DW2502	EQU	*
	DATA	'DC'	CHANNEL PARAMETER
	DATA	/8000	STATUS
	DATA	0	ECB-ADDRESS 
	DATA	0	ORDER 
	DATA	DRDC25	POINTER TO ADDRESS BLOCK 
	DATA	0	TTAB-ADDRESS
	DATA	0	WAIT/ACTIVATION INDICATOR 
	DATA	0	TERMINAL QUEUE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	ECHO DEVICE 
	DATA	PARTA2	PARAMETER TABLE ADDRESS
* 
         DATA     0 
*                 THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
*                      BIT 0  =  IN.FRMR/IN.CMDR
*                          1  =  IN.UA
*                          2  =  IN.DM
*                          3  =  IN.SABM/IN.SARM
*                          4  =  IN.DISC
*                          5  =  IN.RNR 
*                          6  =  IN.REJ 
*                          7  =  IN.F 
*                          8  =  IN.TRI 
*                          9  =  IN.ACK 
*                         10  =  IN.P 
*                         11  =  ** SPARE **
*                         12  =  ** SPARE **
*                         13  =  ** SPARE **
*                         14  =  ** SPARE **
*                         15  =  ** SPARE **
* 
         DATA     0 
* 
*	OUTSTANDING P-BIT INDICATOR 
         DATA     0 
* 
*	CONNECTION STATE VARIABLE 
	DATA	0 
* 
*	TIMER STATE 
         DATA     0 
* 
*	SINK STATE
         DATA     0 
*	RECEIVER RESET INDICATION 
	DATA	0 
* 
*	REMOTE FREE INDICATION
         DATA     0 
* 
*	NEW N(R) RECEIVED INDICATOR 
         DATA     0 
* 
*	SEND STATE VARIABLE V(S)
         DATA     0 
* 
*	RECEIVE STATE VARIABLE V(R) 
         DATA     0 
* 
*	MAXIMUM VALUE OF V(S) HAS REACHED 
         DATA     0                     UPDATED TOGETHER WITH V(S)
* 
*	LAST VALUE OF N(R) RECEIVED 
         DATA     0                     FROM OPPOSITE SIDE
* 
*	NUMBER OF FRAMES TO BE SEND 
         DATA     0 
* 
*	NUMBER OF ACKNOWLEDGES TO BE RECEIVED 
         DATA     0                     RECEIVED
* 
*	NUMBER OF RETRIES 
         DATA     0 
	DATA	SYADRS	RESPONSE ADDRESS 
	DATA	SYADCM	COMMAND ADDRESS
*	FRAME TYPE IDENTIFIER 
	DATA	0 
*	ILLEGAL I-FIELD INDICATION
	DATA	0 
*	CF-STACK AREA 
	DATA	STCK2A
*	SAVE AREA FOR REGISTERS 
	RES	5	SAVE AREA FOR REGISTERS
*	STACK BASE FOR INTERRUPTS DURING BUSY 
	DATA	STCK2B	STACKBASE ENTRY
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
*	SAVE AREA FOR REGISTERS IN RECEIVER 
	DATA	0 
	DATA	0 
	DATA	0	ADDRESS AND CONTROL FIELD FOR TRANSMITTER 
	DATA	0	ADDITIONAL INFO FOR CMDR FRAME
	DATA	0 
* 
	EJECT
* 
* QUE ADDRESSES BELONGING TO ONE LIFE OF HDLC 
* 
* 
	DATA	Q2ER
	DATA	Q2IR
	DATA	Q2AC
	DATA	Q2CO
Q2SCAD	EQU	*-PARTA2	ENTRY IN TABLE FOR OUTPUT QUEUES
	DATA	Q2SC	ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
	DATA	Q2LE
* 
*	ADDRESS FIRST LINE ECB
	DATA	Q2LEC1	*****TEM****** 
* 
	EJECT
*****    SECOND PART    ***** 
* 
* 
*	WILL CONTAIN THE N(R) OF THE RECEIVED FRAME 
         DATA     0                     RECEIVED FRAME
	DATA	DW2502	DWT ADDRESS
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	-1
	DATA	-1
	DATA	FC:LN2
*	ADDRESS TIMER ECB 
	DATA	TIMEC2	THIS ECB MUST BE DEFINED FOR ANY LINE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
*	INIT POINTER
	DATA	SAVBF2
	IFT	TRACE=1
	DATA	CURTR2	CURRENT TRACE BUFFER POINTER 
	DATA	TRAST2
	DATA	TREND2
	XIF
	IFT	LINE2+LOG=2
	DATA	CURLG2	CURRENT LOG BUFFER POINTER 
	DATA	LOGST2
	DATA	LGEND2
	XIF
	IFT	LINE2+STAT=2 
	DATA	STAST2	START STATISTICAL AREA 
	DATA	STEND2
	XIF
         IFT      LINE2=1 
	DATA	-100
	EJECT
* 
	RES	10	CALL FUNCTION STACK 
STCK2A	EQU	*-2
* 
	RES	3	CALL FUNC STACK FOR INTERR. REQ. 
STCK2B	EQU	*-2
* 
TIMEC2	EQU	*
	DATA	FC:LN2	TIMER ECB
	DATA	0,0,0,0,ORTIL1
* 
SAVBF2	EQU	*
	RES	SYUBNR 
* 
	IFT	LINE2+TRACE=2
CURTR2	EQU	*
TRAST2	EQU	*
	RES	100	TRACE AREA 
TREND2	EQU	*
	XIF
* 
	IFT	LINE2+LOG=2
CURLG2	EQU	*
LOGST2	EQU	*
	RES	50	LOG AREA
LGEND2	EQU	*
	XIF
* 
	IFT	LINE2+STAT=2 
STAST2	EQU	*
	RORG	*+STALNG	STATISTICAL AREA 
STEND2	EQU	*
	XIF
	IFT	LINE2=1
	EJECT
* 
* 
*     THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
*     EVENTS ARE READY
* 
* 
Q2ER	EQU	*	START OF QUEUE 
Q2ERMI	DATA	Q2ERSA	MINIMUM VALUE OF POINTER 
Q2ERMA	DATA	Q2ERFI	MAXIMUM VALUE OF POINTER 
Q2ERNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q2ERNN	DATA	Q2ERFI-Q2ERSA	NUMBER OF FREE POSITIONS
Q2ERIP	DATA	Q2ERSA	INSERTION POINTER
Q2EREP	DATA	Q2ERSA	EXTRACTION POINTER 
Q2ERSA	RES	SYNRRC+SYNRTR+1	RESERVE ALLOWED NUMBER 
Q2ERFI	EQU	*	END OF BLOCK 
* 
* 
* THE INPUT REQUEST QUEUE 
* 
* 
Q2IR	EQU	*	START OF QUEUE 
Q2IRMI	DATA	Q2IRSA	MINIMUM VALUE OF POINTER 
Q2IRMA	DATA	Q2IRFI	MAXIMUM VALUE OF POINTER 
Q2IRNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q2IRNN	DATA	Q2IRFI-Q2IRSA	NUMBER OF FREE POSITIONS
Q2IRIP	DATA	Q2IRSA	INSERTION POINTER
Q2IREP	DATA	Q2IRSA	EXTRACTION POINTER 
Q2IRSA	RES	SYNRRC	RESERVE ALLOWED NUMBER
Q2IRFI	EQU	*	END OF BLOCK 
* 
* 
* THE ACKNOWLEDGE QUEUE 
* 
* 
Q2AC	EQU	*	START OF QUEUE 
Q2ACMI	DATA	Q2ACSA	MINIMUM VALUE OF POINTER 
Q2ACMA	DATA	Q2ACFI	MAXIMUM VALUE OF POINTER 
Q2ACNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q2ACNN	DATA	Q2ACFI-Q2ACSA	NUMBER OF FREE POSITIONS
Q2ACIP	DATA	Q2ACSA	INSERTION POINTER
Q2ACEP	DATA	Q2ACSA	EXTRACTION POINTER 
Q2ACSA	RES	SYTRWN	RESERVE ALLOWED NUMBER
Q2ACFI	EQU	*	END OF BLOCK 
* 
* 
* THE SEND QUEUE
* 
* 
Q2SC	EQU	*	START OF QUEUE 
Q2SCMI	DATA	Q2SCSA	MINIMUM VALUE OF POINTER 
Q2SCMA	DATA	Q2SCFI	MAXIMUM VALUE OF POINTER 
Q2SCNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q2SCNN	DATA	Q2SCFI-Q2SCSA	NUMBER OF FREE POSITIONS
Q2SCIP	DATA	Q2SCSA	INSERTION POINTER
Q2SCEP	DATA	Q2SCSA	EXTRACTION POINTER 
Q2SCSA	RES	SYNRTR	RESERVE ALLOWED NUMBER
Q2SCFI	EQU	*	END OF BLOCK 
* 
* 
* THE INTERRUPT COMPLETION QUEUE
* 
* 
Q2CO	EQU	*	START OF QUEUE 
Q2COMI	DATA	Q2COSA	MINIMUM VALUE OF POINTER 
Q2COMA	DATA	Q2COFI	MAXIMUM VALUE OF POINTER 
Q2CONF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q2CONN	DATA	Q2COFI-Q2COSA	NUMBER OF FREE POSITIONS
Q2COIP	DATA	Q2COSA	INSERTION POINTER
Q2COEP	DATA	Q2COSA	EXTRACTION POINTER 
Q2COSA	RES	SYNRRC+SYUBNR+4	RESERVE ALLOWED NUMBER 
Q2COFI	EQU	*	END OF BLOCK 
* 
* 
* THE QUEUE OF LINE ECBS
* 
* 
Q2LE	EQU	*	START OF QUEUE 
Q2LEMI	DATA	Q2LESA	MINIMUM VALUE OF POINTER 
Q2LEMA	DATA	Q2LEFI	MAXIMUM VALUE OF POINTER 
Q2LENF	DATA	Q2LEFI-Q2LESA	NUMBER OF QUEUED ELEMENTS 
Q2LENN	DATA	0	NUMBER OF FREE POSITIONS
Q2LEIP	DATA	Q2LESA	INSERTION POINTER
Q2LEEP	DATA	Q2LESA	EXTRACTION POINTER 
Q2LESA	EQU	*
*****	 MAXIMUM 12 LINE ECB'S RESERVED 
* 
	DATA	Q2LEC1
	DATA	Q2LEC1+12 
	DATA	Q2LEC1+24 
	IFF	NRLECB=3 
	DATA	Q2LEC1+36 
	IFF	NRLECB=4 
	DATA	Q2LEC1+48 
	IFF	NRLECB=5 
	DATA	Q2LEC1+60 
	IFF	NRLECB=6 
	DATA	Q2LEC1+72 
	IFF	NRLECB=7 
	DATA	Q2LEC1+84 
	IFF	NRLECB=8 
	DATA	Q2LEC1+96 
	IFF	NRLECB=9 
	DATA	Q2LEC1+108
	IFF	NRLECB=10
	DATA	Q2LEC1+120
	IFF	NRLECB=11
	DATA	Q2LEC1+132
	IFF	NRLECB=12
	DATA	Q2LEC1+144
	IFF	NRLECB=13
	DATA	Q2LEC1+156
	IFF	NRLECB=14
	DATA	Q2LEC1+168
	IFF	NRLECB=15
	XIF
         IFT      LINE2=1 
Q2LEFI	EQU	*	END OF BLOCK 
* 
*	IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED 
* 
Q2LEC1	EQU	*
	RES	NRLECB	WORD 0
	RES	NRLECB	WORD 1
	RES	NRLECB	WORD 2
	RES	NRLECB	WORD 3
	RES	NRLECB	WORD 4
	RES	NRLECB	WORD 5
* 
         XIF
         IFT      LINE3=1 
	EJECT
*****    FIRST PART    *****
* 
	DATA	'PARTA3'
PARTA3	EQU	*	START OF TABLE 
* 
*	DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE 
* 
DW2503	EQU	*
	DATA	'DC'	CHANNEL PARAMETER
	DATA	/8000	STATUS
	DATA	0	ECB-ADDRESS 
	DATA	0	ORDER 
	DATA	DRDC25	POINTER TO ADDRESS BLOCK 
	DATA	0	TTAB-ADDRESS
	DATA	0	WAIT/ACTIVATION INDICATOR 
	DATA	0	TERMINAL QUEUE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	ECHO DEVICE 
	DATA	PARTA3	PARAMETER TABLE ADDRESS
* 
         DATA     0 
*                 THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
*                      BIT 0  =  IN.FRMR/IN.CMDR
*                          1  =  IN.UA
*                          2  =  IN.DM
*                          3  =  IN.SABM/IN.SARM
*                          4  =  IN.DISC
*                          5  =  IN.RNR 
*                          6  =  IN.REJ 
*                          7  =  IN.F 
*                          8  =  IN.TRI 
*                          9  =  IN.ACK 
*                         10  =  IN.P 
*                         11  =  ** SPARE **
*                         12  =  ** SPARE **
*                         13  =  ** SPARE **
*                         14  =  ** SPARE **
*                         15  =  ** SPARE **
* 
         DATA     0 
* 
*	OUTSTANDING P-BIT INDICATOR 
         DATA     0 
* 
*	CONNECTION STATE VARIABLE 
	DATA	0 
* 
*	TIMER STATE 
         DATA     0 
* 
*	SINK STATE
         DATA     0 
*	RECEIVER RESET INDICATION 
	DATA	0 
* 
*	REMOTE FREE INDICATION
         DATA     0 
* 
*	NEW N(R) RECEIVED INDICATOR 
         DATA     0 
* 
*	SEND STATE VARIABLE V(S)
         DATA     0 
* 
*	RECEIVE STATE VARIABLE V(R) 
         DATA     0 
* 
*	MAXIMUM VALUE OF V(S) HAS REACHED 
         DATA     0                     UPDATED TOGETHER WITH V(S)
* 
*	LAST VALUE OF N(R) RECEIVED 
         DATA     0                     FROM OPPOSITE SIDE
* 
*	NUMBER OF FRAMES TO BE SEND 
         DATA     0 
* 
*	NUMBER OF ACKNOWLEDGES TO BE RECEIVED 
         DATA     0                     RECEIVED
* 
*	NUMBER OF RETRIES 
         DATA     0 
	DATA	SYADRS	RESPONSE ADDRESS 
	DATA	SYADCM	COMMAND ADDRESS
*	FRAME TYPE IDENTIFIER 
	DATA	0 
*	ILLEGAL I-FIELD INDICATION
	DATA	0 
*	CF-STACK AREA 
	DATA	STCK3A
*	SAVE AREA FOR REGISTERS 
	RES	5	SAVE AREA FOR REGISTERS
*	STACK BASE FOR INTERRUPTS DURING BUSY 
	DATA	STCK3B	STACKBASE ENTRY
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
*	SAVE AREA FOR REGISTERS IN RECEIVER 
	DATA	0 
	DATA	0 
	DATA	0	ADDRESS AND CONTROL FIELD FOR TRANSMITTER 
	DATA	0	ADDITIONAL INFO FOR CMDR FRAME
	DATA	0 
* 
	EJECT
* 
* QUE ADDRESSES BELONGING TO ONE LIFE OF HDLC 
* 
* 
	DATA	Q3ER
	DATA	Q3IR
	DATA	Q3AC
	DATA	Q3CO
Q3SCAD	EQU	*-PARTA3	ENTRY IN TABLE FOR OUTPUT QUEUES
	DATA	Q3SC	ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
	DATA	Q3LE
* 
*	ADDRESS FIRST LINE ECB
	DATA	Q3LEC1	*****TEM****** 
* 
	EJECT
*****    SECOND PART    ***** 
* 
* 
*	WILL CONTAIN THE N(R) OF THE RECEIVED FRAME 
         DATA     0                     RECEIVED FRAME
	DATA	DW2503	DWT ADDRESS
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	-1
	DATA	-1
	DATA	FC:LN3
*	ADDRESS TIMER ECB 
	DATA	TIMEC3	THIS ECB MUST BE DEFINED FOR ANY LINE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
*	INIT POINTER
	DATA	SAVBF3
	IFT	TRACE=1
	DATA	CURTR3	CURRENT TRACE BUFFER POINTER 
	DATA	TRAST3
	DATA	TREND3
	XIF
	IFT	LINE3+LOG=2
	DATA	CURLG3	CURRENT LOG BUFFER POINTER 
	DATA	LOGST3
	DATA	LGEND3
	XIF
	IFT	LINE3+STAT=2 
	DATA	STAST3	START STATISTICAL AREA 
	DATA	STEND3
	XIF
         IFT      LINE3=1 
	DATA	-100
	EJECT
* 
	RES	10	CALL FUNCTION STACK 
STCK3A	EQU	*-2
* 
	RES	3	CALL FUNC STACK FOR INTERR. REQ. 
STCK3B	EQU	*-2
* 
TIMEC3	EQU	*
	DATA	FC:LN3	TIMER ECB
	DATA	0,0,0,0,ORTIL1
* 
SAVBF3	EQU	*
	RES	SYUBNR 
* 
	IFT	LINE3+TRACE=2
CURTR3	EQU	*
TRAST3	EQU	*
	RES	100	TRACE AREA 
TREND3	EQU	*
	XIF
* 
	IFT	LINE3+LOG=2
CURLG3	EQU	*
LOGST3	EQU	*
	RES	50 
LGEND3	EQU	*
	XIF
* 
	IFT	LINE3+STAT=2 
STAST3	EQU	*
	RORG	*+STALNG	STATISTICAL AREA 
STEND3	EQU	*
	XIF
	IFT	LINE3=1
	EJECT
* 
* 
*     THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
*     EVENTS ARE READY
* 
* 
Q3ER	EQU	*	START OF QUEUE 
Q3ERMI	DATA	Q3ERSA	MINIMUM VALUE OF POINTER 
Q3ERMA	DATA	Q3ERFI	MAXIMUM VALUE OF POINTER 
Q3ERNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q3ERNN	DATA	Q3ERFI-Q3ERSA	NUMBER OF FREE POSITIONS
Q3ERIP	DATA	Q3ERSA	INSERTION POINTER
Q3EREP	DATA	Q3ERSA	EXTRACTION POINTER 
Q3ERSA	RES	SYNRRC+SYNRTR+1	RESERVE ALLOWED NUMBER 
Q3ERFI	EQU	*	END OF BLOCK 
* 
* 
* THE INPUT REQUEST QUEUE 
* 
* 
Q3IR	EQU	*	START OF QUEUE 
Q3IRMI	DATA	Q3IRSA	MINIMUM VALUE OF POINTER 
Q3IRMA	DATA	Q3IRFI	MAXIMUM VALUE OF POINTER 
Q3IRNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q3IRNN	DATA	Q3IRFI-Q3IRSA	NUMBER OF FREE POSITIONS
Q3IRIP	DATA	Q3IRSA	INSERTION POINTER
Q3IREP	DATA	Q3IRSA	EXTRACTION POINTER 
Q3IRSA	RES	SYNRRC	RESERVE ALLOWED NUMBER
Q3IRFI	EQU	*	END OF BLOCK 
* 
* 
* THE ACKNOWLEDGE QUEUE 
* 
* 
Q3AC	EQU	*	START OF QUEUE 
Q3ACMI	DATA	Q3ACSA	MINIMUM VALUE OF POINTER 
Q3ACMA	DATA	Q3ACFI	MAXIMUM VALUE OF POINTER 
Q3ACNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q3ACNN	DATA	Q3ACFI-Q3ACSA	NUMBER OF FREE POSITIONS
Q3ACIP	DATA	Q3ACSA	INSERTION POINTER
Q3ACEP	DATA	Q3ACSA	EXTRACTION POINTER 
Q3ACSA	RES	SYTRWN	RESERVE ALLOWED NUMBER
Q3ACFI	EQU	*	END OF BLOCK 
* 
* 
* THE SEND QUEUE
* 
* 
Q3SC	EQU	*	START OF QUEUE 
Q3SCMI	DATA	Q3SCSA	MINIMUM VALUE OF POINTER 
Q3SCMA	DATA	Q3SCFI	MAXIMUM VALUE OF POINTER 
Q3SCNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q3SCNN	DATA	Q3SCFI-Q3SCSA	NUMBER OF FREE POSITIONS
Q3SCIP	DATA	Q3SCSA	INSERTION POINTER
Q3SCEP	DATA	Q3SCSA	EXTRACTION POINTER 
Q3SCSA	RES	SYNRTR	RESERVE ALLOWED NUMBER
Q3SCFI	EQU	*	END OF BLOCK 
* 
* 
* THE INTERRUPT COMPLETION QUEUE
* 
* 
Q3CO	EQU	*	START OF QUEUE 
Q3COMI	DATA	Q3COSA	MINIMUM VALUE OF POINTER 
Q3COMA	DATA	Q3COFI	MAXIMUM VALUE OF POINTER 
Q3CONF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q3CONN	DATA	Q3COFI-Q3COSA	NUMBER OF FREE POSITIONS
Q3COIP	DATA	Q3COSA	INSERTION POINTER
Q3COEP	DATA	Q3COSA	EXTRACTION POINTER 
Q3COSA	RES	SYNRRC+SYUBNR+4	RESERVE ALLOWED NUMBER 
Q3COFI	EQU	*	END OF BLOCK 
* 
* 
* THE QUEUE OF LINE ECBS
* 
* 
Q3LE	EQU	*	START OF QUEUE 
Q3LEMI	DATA	Q3LESA	MINIMUM VALUE OF POINTER 
Q3LEMA	DATA	Q3LEFI	MAXIMUM VALUE OF POINTER 
Q3LENF	DATA	Q3LEFI-Q3LESA	NUMBER OF QUEUED ELEMENTS 
Q3LENN	DATA	0	NUMBER OF FREE POSITIONS
Q3LEIP	DATA	Q3LESA	INSERTION POINTER
Q3LEEP	DATA	Q3LESA	EXTRACTION POINTER 
Q3LESA	EQU	*
*****	 MAXIMUM 12 LINE ECB'S RESERVED 
* 
	DATA	Q3LEC1
	DATA	Q3LEC1+12 
	DATA	Q3LEC1+24 
	IFF	NRLECB=3 
	DATA	Q3LEC1+36 
	IFF	NRLECB=4 
	DATA	Q3LEC1+48 
	IFF	NRLECB=5 
	DATA	Q3LEC1+60 
	IFF	NRLECB=6 
	DATA	Q3LEC1+72 
	IFF	NRLECB=7 
	DATA	Q3LEC1+84 
	IFF	NRLECB=8 
	DATA	Q3LEC1+96 
	IFF	NRLECB=9 
	DATA	Q3LEC1+108
	IFF	NRLECB=10
	DATA	Q3LEC1+120
	IFF	NRLECB=11
	DATA	Q3LEC1+132
	IFF	NRLECB=12
	DATA	Q3LEC1+144
	IFF	NRLECB=13
	DATA	Q3LEC1+156
	IFF	NRLECB=14
	DATA	Q3LEC1+168
	IFF	NRLECB=15
	XIF
         IFT      LINE3=1 
Q3LEFI	EQU	*	END OF BLOCK 
* 
*	IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED 
* 
Q3LEC1	EQU	*
	RES	NRLECB	WORD 0
	RES	NRLECB	WORD 1
	RES	NRLECB	WORD 2
	RES	NRLECB	WORD 3
	RES	NRLECB	WORD 4
	RES	NRLECB	WORD 5
* 
         XIF
         IFT      LINE4=1 
	EJECT
*****    FIRST PART    *****
* 
	DATA	'PARTA4'
PARTA4	EQU	*	START OF TABLE 
* 
*	DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE 
* 
DW2504	EQU	*
	DATA	'DC'	CHANNEL PARAMETER
	DATA	/8000	STATUS
	DATA	0	ECB-ADDRESS 
	DATA	0	ORDER 
	DATA	DRDC25	POINTER TO ADDRESS BLOCK 
	DATA	0	TTAB-ADDRESS
	DATA	0	WAIT/ACTIVATION INDICATOR 
	DATA	0	TERMINAL QUEUE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0	ECHO DEVICE 
	DATA	PARTA4	PARAMETER TABLE ADDRESS
* 
         DATA     0 
*                 THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
*                      BIT 0  =  IN.FRMR/IN.CMDR
*                          1  =  IN.UA
*                          2  =  IN.DM
*                          3  =  IN.SABM/IN.SARM
*                          4  =  IN.DISC
*                          5  =  IN.RNR 
*                          6  =  IN.REJ 
*                          7  =  IN.F 
*                          8  =  IN.TRI 
*                          9  =  IN.ACK 
*                         10  =  IN.P 
*                         11  =  ** SPARE **
*                         12  =  ** SPARE **
*                         13  =  ** SPARE **
*                         14  =  ** SPARE **
*                         15  =  ** SPARE **
* 
         DATA     0 
* 
*	OUTSTANDING P-BIT INDICATOR 
         DATA     0 
* 
*	CONNECTION STATE VARIABLE 
	DATA	0 
* 
*	TIMER STATE 
         DATA     0 
* 
*	SINK STATE
         DATA     0 
*	RECEIVER RESET INDICATION 
	DATA	0 
* 
*	REMOTE FREE INDICATION
         DATA     0 
* 
*	NEW N(R) RECEIVED INDICATOR 
         DATA     0 
* 
*	SEND STATE VARIABLE V(S)
         DATA     0 
* 
*	RECEIVE STATE VARIABLE V(R) 
         DATA     0 
* 
*	MAXIMUM VALUE OF V(S) HAS REACHED 
         DATA     0                     UPDATED TOGETHER WITH V(S)
* 
*	LAST VALUE OF N(R) RECEIVED 
         DATA     0                     FROM OPPOSITE SIDE
* 
*	NUMBER OF FRAMES TO BE SEND 
         DATA     0 
* 
*	NUMBER OF ACKNOWLEDGES TO BE RECEIVED 
         DATA     0                     RECEIVED
* 
*	NUMBER OF RETRIES 
         DATA     0 
	DATA	SYADRS	RESPONSE ADDRESS 
	DATA	SYADCM	COMMAND ADDRESS
*	FRAME TYPE IDENTIFIER 
	DATA	0 
*	ILLEGAL I-FIELD INDICATION
	DATA	0 
*	CF-STACK AREA 
	DATA	STCK4A
*	SAVE AREA FOR REGISTERS 
	RES	5	SAVE AREA FOR REGISTERS
*	STACK BASE FOR INTERRUPTS DURING BUSY 
	DATA	STCK4B	STACKBASE ENTRY
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
*	SAVE AREA FOR REGISTERS IN RECEIVER 
	DATA	0 
	DATA	0 
	DATA	0	ADDRESS AND CONTROL FIELD FOR TRANSMITTER 
	DATA	0	ADDITIONAL INFO FOR CMDR FRAME
	DATA	0 
* 
	EJECT
* 
* QUE ADDRESSES BELONGING TO ONE LIFE OF HDLC 
* 
* 
	DATA	Q4ER
	DATA	Q4IR
	DATA	Q4AC
	DATA	Q4CO
Q4SCAD	EQU	*-PARTA4	ENTRY IN TABLE FOR OUTPUT QUEUES
	DATA	Q4SC	ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
	DATA	Q4LE
* 
*	ADDRESS FIRST LINE ECB
	DATA	Q4LEC1	*****TEM****** 
* 
	EJECT
*****    SECOND PART    ***** 
* 
* 
*	WILL CONTAIN THE N(R) OF THE RECEIVED FRAME 
         DATA     0                     RECEIVED FRAME
	DATA	DW2504	DWT ADDRESS
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	-1
	DATA	-1
	DATA	FC:LN4
*	ADDRESS TIMER ECB 
	DATA	TIMEC4	THIS ECB MUST BE DEFINED FOR ANY LINE
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
*	INIT POINTER
	DATA	SAVBF4
	IFT	TRACE=1
	DATA	CURTR4	CURRENT TRACE BUFFER POINTER 
	DATA	TRAST4
	DATA	TREND4
	XIF
	IFT	LINE4+LOG=2
	DATA	CURLG4	CURRENT LOG BUFFER POINTER 
	DATA	LOGST4
	DATA	LGEND4
	XIF
	IFT	LINE4+STAT=2 
	DATA	STAST4	START STATISTICAL AREA 
	DATA	STEND4
	XIF
         IFT      LINE4=1 
	DATA	-100
	EJECT
* 
	RES	10	CALL FUNCTION STACK 
STCK4A	EQU	*-2
* 
	RES	3	CALL FUNC STACK FOR INTERR. REQ. 
STCK4B	EQU	*-2
* 
TIMEC4	EQU	*
	DATA	FC:LN4	TIMER ECB
	DATA	0,0,0,0,ORTIL1
* 
SAVBF4	EQU	*
	RES	SYUBNR 
* 
	IFT	LINE4+TRACE=2
CURTR4	EQU	*
TRAST4	EQU	*
	RES	100	TRACE AREA 
TREND4	EQU	*
	XIF
* 
	IFT	LINE4+LOG=2
CURLG4	EQU	*
LOGST4	EQU	*
	RES	50	LOG AREA
LGEND4	EQU	*
	XIF
* 
	IFT	LINE4+STAT=2 
STAST4	EQU	*
	RORG	*+STALNG
STEND4	EQU	*
	XIF
	IFT	LINE4=1
	EJECT
* 
* 
*     THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
*     EVENTS ARE READY
* 
* 
Q4ER	EQU	*	START OF QUEUE 
Q4ERMI	DATA	Q4ERSA	MINIMUM VALUE OF POINTER 
Q4ERMA	DATA	Q4ERFI	MAXIMUM VALUE OF POINTER 
Q4ERNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q4ERNN	DATA	Q4ERFI-Q4ERSA	NUMBER OF FREE POSITIONS
Q4ERIP	DATA	Q4ERSA	INSERTION POINTER
Q4EREP	DATA	Q4ERSA	EXTRACTION POINTER 
Q4ERSA	RES	SYNRRC+SYNRTR+1	RESERVE ALLOWED NUMBER 
Q4ERFI	EQU	*	END OF BLOCK 
* 
* 
* THE INPUT REQUEST QUEUE 
* 
* 
Q4IR	EQU	*	START OF QUEUE 
Q4IRMI	DATA	Q4IRSA	MINIMUM VALUE OF POINTER 
Q4IRMA	DATA	Q4IRFI	MAXIMUM VALUE OF POINTER 
Q4IRNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q4IRNN	DATA	Q4IRFI-Q4IRSA	NUMBER OF FREE POSITIONS
Q4IRIP	DATA	Q4IRSA	INSERTION POINTER
Q4IREP	DATA	Q4IRSA	EXTRACTION POINTER 
Q4IRSA	RES	SYNRRC	RESERVE ALLOWED NUMBER
Q4IRFI	EQU	*	END OF BLOCK 
* 
* 
* THE ACKNOWLEDGE QUEUE 
* 
* 
Q4AC	EQU	*	START OF QUEUE 
Q4ACMI	DATA	Q4ACSA	MINIMUM VALUE OF POINTER 
Q4ACMA	DATA	Q4ACFI	MAXIMUM VALUE OF POINTER 
Q4ACNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q4ACNN	DATA	Q4ACFI-Q4ACSA	NUMBER OF FREE POSITIONS
Q4ACIP	DATA	Q4ACSA	INSERTION POINTER
Q4ACEP	DATA	Q4ACSA	EXTRACTION POINTER 
Q4ACSA	RES	SYTRWN	RESERVE ALLOWED NUMBER
Q4ACFI	EQU	*	END OF BLOCK 
* 
* 
* THE SEND QUEUE
* 
* 
Q4SC	EQU	*	START OF QUEUE 
Q4SCMI	DATA	Q4SCSA	MINIMUM VALUE OF POINTER 
Q4SCMA	DATA	Q4SCFI	MAXIMUM VALUE OF POINTER 
Q4SCNF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q4SCNN	DATA	Q4SCFI-Q4SCSA	NUMBER OF FREE POSITIONS
Q4SCIP	DATA	Q4SCSA	INSERTION POINTER
Q4SCEP	DATA	Q4SCSA	EXTRACTION POINTER 
Q4SCSA	RES	SYNRTR	RESERVE ALLOWED NUMBER
Q4SCFI	EQU	*	END OF BLOCK 
* 
* 
* THE INTERRUPT COMPLETION QUEUE
* 
* 
Q4CO	EQU	*	START OF QUEUE 
Q4COMI	DATA	Q4COSA	MINIMUM VALUE OF POINTER 
Q4COMA	DATA	Q4COFI	MAXIMUM VALUE OF POINTER 
Q4CONF	DATA	0	NUMBER OF QUEUED ELEMENTS 
Q4CONN	DATA	Q4COFI-Q4COSA	NUMBER OF FREE POSITIONS
Q4COIP	DATA	Q4COSA	INSERTION POINTER
Q4COEP	DATA	Q4COSA	EXTRACTION POINTER 
Q4COSA	RES	SYNRRC+SYUBNR+4	RESERVE ALLOWED NUMBER 
Q4COFI	EQU	*	END OF BLOCK 
* 
* 
* THE QUEUE OF LINE ECBS
* 
* 
Q4LE	EQU	*	START OF QUEUE 
Q4LEMI	DATA	Q4LESA	MINIMUM VALUE OF POINTER 
Q4LEMA	DATA	Q4LEFI	MAXIMUM VALUE OF POINTER 
Q4LENF	DATA	Q4LEFI-Q4LESA	NUMBER OF QUEUED ELEMENTS 
Q4LENN	DATA	0	NUMBER OF FREE POSITIONS
Q4LEIP	DATA	Q4LESA	INSERTION POINTER
Q4LEEP	DATA	Q4LESA	EXTRACTION POINTER 
Q4LESA	EQU	*
*****	 MAXIMUM 12 LINE ECB'S RESERVED 
* 
	DATA	Q4LEC1
	DATA	Q4LEC1+12 
	DATA	Q4LEC1+24 
	IFF	NRLECB=3 
	DATA	Q4LEC1+36 
	IFF	NRLECB=4 
	DATA	Q4LEC1+48 
	IFF	NRLECB=5 
	DATA	Q4LEC1+60 
	IFF	NRLECB=6 
	DATA	Q4LEC1+72 
	IFF	NRLECB=7 
	DATA	Q4LEC1+84 
	IFF	NRLECB=8 
	DATA	Q4LEC1+96 
	IFF	NRLECB=9 
	DATA	Q4LEC1+108
	IFF	NRLECB=10
	DATA	Q4LEC1+120
	IFF	NRLECB=11
	DATA	Q4LEC1+132
	IFF	NRLECB=12
	DATA	Q4LEC1+144
	IFF	NRLECB=13
	DATA	Q4LEC1+156
	IFF	NRLECB=14
	DATA	Q4LEC1+168
	IFF	NRLECB=15
	XIF
         IFT      LINE4=1 
Q4LEFI	EQU	*	END OF BLOCK 
* 
*	IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED 
* 
Q4LEC1	EQU	*
	RES	NRLECB	WORD 0
	RES	NRLECB	WORD 1
	RES	NRLECB	WORD 2
	RES	NRLECB	WORD 3
	RES	NRLECB	WORD 4
	RES	NRLECB	WORD 5
* 
* 
	XIF
         IFT      LINE4=0 
* DUMMY DWT FOR LINE 4
DW2504   EQU      * 
         XIF
         IFT      LINE3=0 
* DUMMY DWT FOR LINE 3
DW2503   EQU      * 
         XIF
         IFT      LINE2=0 
* DUMMY DWT FOR LINE 2
DW2502   EQU      * 
         XIF
	EJECT
	IFT	IOPPC=0
*** 
**       EQUIVALENCES FOR ALARM RECEIVE DATA
*** 
        IFT      IOPCON=1 
ALARM    EQU      /C
         XIF
	IFT	IOPPC=0
         IFT      IOPCON=0
ALARM    EQU      4 
         XIF
	IFT	IOPPC=1
ALARM	EQU	/C	RECEIVE ALARM DATA FOR IOP 
	XIF
         EJECT
*** 
***      EQUIVALENCES FOR LINE 1
*** 
NRSBUF   EQU      SYUBNR-1
*** 
***      MAX.NUMBER OF ELEMENTS IN INPUT-REQUEST-QUEUE
NREQ01   EQU      SYNRRC+NRSBUF 
         EJECT
*** 
***      INTERRUPT HANDLERS FOR LINE 1
*** 
***      RECEIVER INTERRUPT HANDLER 
IHLCI1   EQU      * 
IH2501   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8        SAVE A1-A8 ON CF-STACK 
         LDKL     A1,LCT1 
         ABL      DRHLRC           BRANCH TO GENERAL PART OF INTERRUPT
***                                HANDLER
*** 
***      TRANSMITTER INTERRUPT HANDLER
IHLCU1   EQU      * 
IH2502   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8        SAVE A1-A8 ON CF-STACK 
         LDKL     A1,LCT1B
	ABL	DRHLTR	BRANCH TO GEN.PART OF INT.HANDLER 
         IFF      SYNRLN=1
*** 
***      INTERRUPT HANDLERS FOR LINE 2
*** 
***      RECEIVER INTERRUPT HANDLER 
IH2503   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8 
         LDKL     A1,LCT2 
         ABL      DRHLRC
*** 
***      TRANSMITTER INTERRUPT HANDLER
IH2504   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8 
         LDKL     A1,LCT2B
         ABL      DRHLTR
*** 
	IFF	SYNRLN=2 
*** 
***      INTERRUPT HANDLERS FOR LINE 3
**
***      RECEIVER INTERRUPT HANDLER 
IH2505   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8 
         LDKL     A1,LCT3 
         ABL      DRHLRC
*** 
***     TRANSMITTER INTERRUPT HANDLER 
IH2506   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8 
         LDKL     A1,LCT3B
         ABL      DRHLTR
*** 
         IFF      SYNRLN=3
*** 
***      INTERRUPT HANDLERS FOR LINE 4
*** 
***      RECEIVER INTERRUPT HANDLER 
IH2507   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8 
         LDKL     A1,LCT4 
         ABL      DRHLRC
*** 
***      TRANSMITTER INTERRUPT HANDLER
IH2508   EQU      * 
	ST	P,INTSAV	SAVE INTERRUPT ADDRESS 
         CF       A15,SAVE8 
         LDKL     A1,LCT4B
         ABL      DRHLTR
*** 
         XIF
***	DUMMY INTERRUPT ADDRESSES FOR NOT USED LINES
	IFF	SYNRLN=4 
*	DUMMY INTERRUPT ADDRESSES FOR LINE 4
IH2507	EQU	*
IH2508	EQU	*
	IFF	SYNRLN=3 
*	DUMMY INTERRUPT ADDRESSES FOR LINE 3
IH2505	EQU	*
IH2506	EQU	*
	IFF	SYNRLN=2 
*	DUMMY INTERRUPT ADDRESSES FOR LINE 2
IH2503	EQU	*
IH2504	EQU	*
	XIF
	HLT		UNEXPECTED INTERRUPT
	EJECT
*** 
**	EQUIVALENCES FOR DRIVER STATUS 
**
DRHALT	EQU	0	HALT BEFORE DISCONNECT BEFORE CONNECT
DRWFDC	EQU	1	WAIT FOR DISCONNECT BEFORE CONNECT 
DRWFCR	EQU	2	WAIT FOR CONNECT READY 
DRCONE	EQU	3	CONNECT
DRWFDR	EQU	4	WAIT FOR NORMAL DISCONNECT READY 
DRSTWA	EQU	5	WAIT FOR STOP
DRSTEX	EQU	6	STOP 
DRDICO	EQU	7	DISCONNECT 
*** 
***	EQUIVALENCES FOR SENDER/RECEIVER STATUS 
*** 
DRACT	EQU	1	ACTIVE
DRINAC	EQU	2	INACTIVE 
	IFT	IOPPC=1
*** 
***	EQUIVALENCES FOR IOP-INDICATION 
*** 
MIOP	EQU	/40	MASK FOR IOP IN I/O-INSTRUCTION
MSKIOP	EQU	/08	MASK FOR IOP IN ALARM
	XIF
*** 
***	EQUIVALENCES FOR I/O-COMMANDS 
*** 
CONNEC	EQU	2	CONNECT-COMMAND
DISCON	EQU	1	DISCONNECT COMMAND 
WRITIO	EQU	/A	TRANSMIT ON I/O-PROCESSOR 
WRITPC	EQU	2	TRANSMIT ON PROGRAMMED-CHANNEL 
*** 
***	EQUIVALENCES FOR I/O-INSTRUCTION WITH A2
*** 
CIOINS	EQU	/42C0	CIO-INSTRUCTION
CIOHLT	EQU	/4280	CIO-HALT INSTRUCTION 
WER	EQU	/7200	WER-INSTRUCTION 
RER	EQU	/7A00	RER-INSTRUCTION 
SSTINS	EQU	/4AC0	SST-INSTRUCTION
OTRINS	EQU	/4200	OTR-INSTRUCTION
OTR1	EQU	/4240	OTR1-INSTRUCTION 
ABORT	EQU	1	ABORT-FLAG FOR OTR1 
INRINS	EQU	/4A00	INR-INSTRUCTION
*** 
***	DISPLACEMENTS ON INPUT REQUEST-QUEUE
QMAX	EQU	0	MAX.NR.OF ELEMENTS IN QUEUE
QINS	EQU	QMAX+2	INSERT-POINTER
QEXT	EQU	QINS+2	EXTRACT-POINTER 
QUELE1	EQU	QEXT+2	1ST ELEMENT IN QUEUE
*** 
***	EQUIVALENCES FOR RETURN-CODES 
*** 
UNKNFC	EQU	1	UNKNOWN FILE CODE
CIONAC	EQU	2	REQUEST NOT ACCEPTED 
UNKNDV   EQU      3                UNKNOWN DEVICE ADDRESS 
WRODST	EQU	4	WRONG DRIVER STATUS
NOTALL	EQU	8	INPUT/OUTPUT NOT ALLOWED AT THIS MOMENT
*** 
***	EQUIVALENCES FOR TYPE ON RETURN TO IDREQ
*** 
TYPECO	EQU	1	TYPE=CONNECT 
TYPEIN	EQU	2	TYPE=INPUT FROM LINE 
TYPEOU	EQU	3	TYPE=OUTPUT TO LINE
TYPEDI	EQU	4	TYPE=DISCONNECT
TYPEST   EQU      5                TYPE = STOP
*** 
***	EQUIVALENCES FOR LCT
*** 
CAROFF	EQU	/20	CARRIER OFF BIT(10) IN STATUS WORD 
INCLEN	EQU	8	INCORRECT-LENGTH-BIT(12)	IN STATUS WORD
NOTOPE   EQU      1                MODEM NOT OPERABLE 
IDLABO   EQU      /3000            IDLE AND ABORT ONE'S BIT 
*** 
***	DISPLACEMENTS FOR LCT 
*** 
DRSTAT	EQU	0	DRIVER STATUS
DRRSTA	EQU	DRSTAT+2	RECEIVER-STATUS IN RECEIVER LCT 
DRSSTA	EQU	DRRSTA	SENDER STATUS IN SENDER-LCT 
	IFT	IOPPC=1
DEVADD	EQU	DRRSTA+2	IOP-INDICATION+DEV.ADDR FOR ASSIGNED FC 
	XIF
	IFT	IOPPC=0
DEVADD	EQU	DRRSTA+2	DEVICEADDR.OF UNIT ASSIGNED TO FC 
	XIF
LIECB	EQU	DEVADD+2	ADDRESS OF LIECB OF REQUEST
BUFADD	EQU	LIECB+2	ADDRESS OF BUFFER
REQLEN	EQU	BUFADD+2	REQUESTED LENGTH IN WORDS(VARIABLE) 
LENGTH EQU	REQLEN+2	REQUESTED LENGTH IN WORDS(FIXED)
***	FOR RECEIVER LCT ONLY!
QUEUE	EQU	LENGTH+2	ADDRESS OF INPUT-REQUEST-QUEUE 
RECDAT   EQU      QUEUE+2          CIO START (ALARM) RECEIVE DATA 
RETRY	EQU	RECDAT+2	RETRY COUNTER FOR CIO-START RECEIVER 
FILCOD   EQU      RETRY+2         FC ASSIGNED TO RECEIVER/TRANSM.UNIT 
APROT    EQU      FILCOD+2         RETURN ADDRESS TO PROTOCOL 
LCTEND	EQU	APROT+2	LENGTH OF RECEIVER-LCT IN CHARACTERS 
         EJECT
***      RECEIVER LCT 
LCT1     EQU      * 
         RES      1                DRIVER STATUS OF RECEIVER
         RES      1                RECEIVER STATUS
         DATA     REDV01           STANDARD DEVICEADDRESS OF RECEIVER 
         RES      1                ADDRESS OF ECB 
         RES      1                ADDRESS OF I/O-BUFFER
         RES      1                REQUESTED LENGTH IN WORDS(VARIABLE)
         RES      1                REQUESTED LENGTH IN WORDS (FIXED)
         DATA     QUEU01           ADDRESS OF INPUT-REQUEST-QUEUE 
         DATA     ALARM                ALARM RECEIVE DATA PC
	RES	1	RETRY COUNTER
	RES	1	FILECODE ASSIGNED TO LINE
         DATA     IDREQ            RETURN ADDRESS TO PROTOCOL 
***      TRANSMITTER LCT
LCT1B    EQU      * 
         RES      1                DRIVER STATUS OF TRANSMITTER 
         RES      1                TRANSMITTER STATUS 
         DATA     SEDV01           STANDARD DEVICE ADDRESS FOR TRANSM.
         RES      1                ADDRESS OF ECB 
         RES      1                ADDRESS OD I/O-BUFFER
         RES      1                REQUESTED LENGTH IN WORDS(VARIABLE)
         RES      1                REQUESTED LENGTH IN WORDS (FIXED)
*** 
         IFF      SYNRLN=1
*** 
***      LCT'S FOR LINE 2 
*** 
***      RECEIVER LCT 
LCT2     EQU      * 
         RES      2 
         DATA     REDV02
         RES      4 
         DATA     QUEU02
         DATA     ALARM 
        RES 2 
         DATA     IDREQ 
*** 
***      TRANSMITTER LCT
LCT2B    EQU      * 
         RES      2 
         DATA     SEDV02
         RES      4 
*** 
         IFF      SYNRLN=2
*** 
***      LCT'S FOR LINE 3 
*** 
***      RECEIVER LCT 
LCT3     EQU      * 
         RES      2 
         DATA     REDV03
         RES      4 
         DATA     QUEU03
         DATA     ALARM 
         RES      2 
         DATA     IDREQ 
*** 
***      TRANSMITTER LCT
LCT3B    EQU      * 
         RES      2 
        DATA     SEDV03 
        RES      4
*** 
         IFF      SYNRLN=3
*** 
***      LCT'S FOR LINE 4 
*** 
***      RECEIVER LCT 
LCT4     EQU      * 
         RES      2 
         DATA     REDV04
         RES      4 
         DATA     QUEU04
         DATA     ALARM 
         RES      2 
         DATA     IDREQ 
*** 
***      TRANSMITTER LCT
LCT4B   EQU      *
         RES      2 
         DATA     SEDV04
         RES      4 
         XIF
         EJECT
LCTTAB   EQU      * 
***      TABLE CONTAINING NR OF RECEIVER LCT'S AND THE ADDRESSES
         DATA     SYNRLN           MAX.NUMBER OF RECEIVER LCT'S 
         DATA     LCT1
         IFF      SYNRLN=1
         DATA     LCT2
         IFF      SYNRLN=2
         DATA     LCT3
         IFF      SYNRLN=3
         DATA     LCT4
         XIF
*** 
QUEU01   EQU      * 
         DATA     NREQ01+NREQ01    2*NUMBER OF ELEMENTS IN QUEUE
         RES      1                INSERT-POINTER 
         RES      1                EXTRACT-POINTER
         RES      NREQ01           ELEMENT-SAVE AREA
         IFF      SYNRLN=1
QUEU02	EQU	*
         DATA     NREQ01+NREQ01 
         RES      2 
         RES      NREQ01
         IFF      SYNRLN=2
QUEU03	EQU	*
         DATA     NREQ01+NREQ01 
         RES      2 
         RES      NREQ01
         IFF      SYNRLN=3
QUEU04	EQU	*
         DATA     NREQ01+NREQ01 
         RES      2 
         RES      NREQ01
         XIF
         EJECT
*** 
***      SUBROUTINE TO INITIATE THE LINE-CONTROL TABLES (LCT) AND THE 
***      INPUT-REQUEST-QUEUE
***	ON ENTRY: A2 = LINE INDEX (2,4,6,....)
***	          A7 = LOGICAL FILECODE OF LINE 
***	ON EXIT : A1, A2 AND A3 ARE DESTROYED 
*** 
INITIO   EQU      * 
         LD       A2,LCTTAB,A2     A2:=ADDRESS OF RECEIVER LCT
***      SET LOGICAL FILECODE IN RECEIVER LCT 
         ST       A7,FILCOD,A2
	IFT	IOLOG=1
	CF	A15,IN:LOG	INITIATE LOG-I/O-AREA
	XIF
         RTN      A5
	EJECT
*** 
*************************************************************************** 
***	CONNECT MODEM FUNCTION
*************************************************************************** 
***	ON ENTRY:A8:=ADDRESS OF LIECB 
***	ON EXIT :A1-A4 AND A6-A7 ARE DESTROYED
*** 
DRCONN	EQU	*
***	SCAN LINE CONTROL-TABLE ON FILECODE GIVEN IN LIECB
         LDK      A2,TYPECO 
	LDKL	A6,CON100	A6:=RETURNADDR.IF LCT FOUND 
	RF	INP050
CON100	EQU	*
***	LCT FOUND WITH THE SAME FILECODE AS IN LIECB
	IFT	IOPPC=1
***	SET CHANNEL INDICATION IN LCT 
	LDK	A3,MSKIOP	MASK FOR IOP 
	AN	A3,RECDAT,A1
	RF(Z)	CON120	NO IOP
***	SET IOP-INDICATION
	LDK	A3,MIOP	A3 := IOP-INDICATION 
	SC	A3,DEVADD,A1
	SC	A3,DEVADD+LCTEND,A1 
CON120	EQU	*
	XIF
***	GENERATE CIO HALT TO BE SURE OF RECEIVER-HARDWARE-STATUS
	INH
	LDK	A2,DRHALT
	ST	A2,DRSTAT,A1	SET DRIVERSTATUS OF RECEIVER 
***	GENERATE CIO HALT TO BE SURE OF HARDWARE-STATUS OF SENDER/RECEIVER
	LDK	A4,LCTEND
	ADR	A4,A1	A4:=ADDRESS OF CORRESPONDING TRANSMITTER-LCT 
	ST	A2,DRSTAT,A4	SET DRIVERSTATUS OF SENDER 
	LD	A7,DEVADD,A1
	LDR	A3,A7
	ORKL	A3,CIOHLT 
	EXR	A3 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	RF(NA)	RTNE21
	LD	A3,DEVADD,A4
	ORKL	A3,CIOHLT 
	EXR	A3 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
         RF(NA)   RTNE21
	LDR	A3,A7
	ORKL	A3,SSTINS 
	EXR	A3 
	IFT	IOLOG=1
	CF	A15,LGA3A2	LOGG IO-INSTR. 
	XIF
	RF(NA)	RTNE21
	LDK	A2,DRINAC
	ST	A2,DRRSTA,A1	SET RECEIVER STATUS INACTIVE 
	CM	RETRY,A1	RESET RETRY COUNTER
	ST	A2,DRSSTA,A4	SET SENDER-STATUS INACTIVE 
***	INITIATE INPUT-REQUEST-QUEUE
	LD	A2,QUEUE,A1	A2:=ADDRESS OF QUEUE-BUFFER 
	LDR	A3,A2
	ADK	A3,QUELE1	A3:=ADDRESS OF 1ST ELEMENT IN QUEUE
	ST	A3,2,A2	SET INSERT-POINTER TO FIRST ELEMENT 
	ST	A3,4,A2	SET EXTRACT POINTER TO FIRST ELEMENT IN QUEUE 
***	CLEAR ELEMENTS IN REQUEST-QUEUE 
	LDR*	A6,A2	A6:=2*NUMBER OF ELEMENTS IN QUEUE 
CON150	EQU	*
	CMR	A3 
	ADK	A3,2 
	SUK	A6,2 
	RB(P)	CON150 
***	GENERATE CIO DISCONNECT 
	LDK	A2,DISCON
	LDR	A3,A7	A3:=DEVICEADDRESS OF RECEIVER-UNIT 
	ORKL	A3,CIOINS 
	EXR	A3	CIO DISCONNECT WITH A2
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	RF(NA)	RTNE21	DISCONNECT NOT ACCEPTED
	LDK	A3,DRWFDC
	ST	A3,DRSTAT,A1	SET DRIVER STATUS:WAIT FOR DISCONNECT
***			READY BEFORE CONNECT
	ST	A8,LIECB,A1 
	RF	RTNOK2
	EJECT
*************************************************************************** 
***	INPUT FROM LINE 
*************************************************************************** 
***	ON ENTRY:A8:=ADDRESS OF LIECB 
***	             LIECB:WORD0=FILECODE 
***	                   WORD1=BUFFERADDRESS
***	                   WORD2=REQUESTED LENGTH IN CHARACTERS 
*** 
***	ON EXIT :A8:=ADDRESS OF LIECB 
***	             LIECB:WORD4=RETURN-CODE
*** 
DRINP	EQU	* 
**
***	SEARCH RECEIVER LCT WITH SAME FILECODE AS IN LIECB
         LDK      A2,TYPEIN 
	LDKL	A6,INP060	A6:=RETURNADDR.IF LCT FOUND 
INP050	EQU	*
	RF	OUT050
***	RECEIVER LCT FOUND;A1=ADDRESS OF LCT
INP060	EQU	*
	INH
***	TEST IF DRIVER STATUS IS CONNECT
	LDK	A3,DRCONE
	CW	A3,DRSTAT,A1
	RF(NE)	RTNE31	DRIVER STATUS NOT CONNECT
***	TEST IF RECEIVER STATUS IS ACTIVE 
	LDK	A7,DRACT 
	CW	A7,DRRSTA,A1
	RF(NE)	INP400
***	RECEIVER IS ACTIVE ; QUEUE REQUEST IN INPUT-REQUEST-QUEUE 
***	TEST IF INPUT-QUEUE IS FULL 
	LD	A3,QUEUE,A1	A3:=ADDRESS OF QUEUE
	LD	A2,QINS,A3	A2:=INSERT-POINTER 
	CW	A2,QEXT,A3	COMPARE INSERT-POINTER WITH EXTRACT POINTER
	RF(NE)	INP200	INPUT-QUEUE NOT FULL 
***	INSERT-POINTER =EXTRACT-POINTER 
	LDR*	A7,A2 
	ABL(NZ)	ERR040	INPUT-REQUEST-QUEUE FULL
***	INPUT QUEUE EMPTY OR NOT FULL 
INP200	EQU	*
	LDR*	A7,A2 
***	SET ADDRESS OF LIECB IN INPUT-QUEUE 
	LDKL	A6,RTNOK
	ABL	UPQUPO 
***	RECEIVER NOT ACTIVE 
INP400	EQU	*
***	SAVE REQUESTED LENGTH IN WORDS IN LCT 
	LD	A2,ECBRL,A8	A2:=LENGTH IN CHARACTERS
	LD	A6,ECBBA,A8	A6:=BUFFER-ADDRESS
         LDR      A3,A2 
         ADR      A3,A6 
***	TEST ON EVEN LENGTH 
	SRC	A2,1 
	RF(NN)	INP450	A2:=LENGTH IN WORDS
***	LENGTH IS ODD 
***      SAVE FIRST NOT SIGN.CHARACTER AND SAVE-INDICATION
         LDR      A4,A2 
         LCR      A4,A3 
         ST       A4,ECBPR,A8 
	ANKL	A2,/FFF 
	ADK	A2,1	A2:=NUMBER OF WORDS+1 
INP450	EQU	*
	IFT	IOPPC=1
	LC	A3,DEVADD,A1
	ANK	A3,MIOP	MASK FOR IOP 
	RF(Z)	INP452	NO IOP
	ADK	A2,1 
INP452	EQU	*
	XIF
	IFT	IOPPC=0
         IFT      IOPCON=1
         ADK      A2,1             FOR READ LENGTH=WRITE LENGTH 
         XIF
	ST	A2,LENGTH,A1	SAVE NR OF WORDS IN LCT
	ST	A2,REQLEN,A1	SAVE NR OF WORDS IN LCT
	IFT	IOPPC=1
	LDR	A3,A3
	RF(Z)	INP454	NO IOP
	CF	A15,WERREA
INP454	EQU	*
	XIF
	IFT	IOPPC=0
	IFT	IOPCON=1 
**************************************************
***	FOR IOPROCESSOR ONLY! 
***	PREPARE WER1 AND WER2 INSTRUCTION 
         CF       A15,WERREA
******************************************
	XIF
***	PREPARE CIO START INPUT INSTRUCTION 
         LD       A2,RECDAT,A1     A2:=CIO START INPUT FLAG 
	LD	A3,DEVADD,A1
	ORKL	A3,CIOINS 
	EXR	A3	EXECUTE CIO START INPUT 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
RTNE21	EQU	*
	RF(NA)	RTNE22	CIO NOT ACCEPTED 
	ST	A8,LIECB,A1	SET ADDRESS OF LIECB IN LCT 
	ST	A6,BUFADD,A1	SET BUFFER ADDRESS IN LCT
***	SET RECEIVER STATUS ACTIVE
	ST	A7,DRRSTA,A1
RTNOK2	EQU	*
***	RETURN TO CALLER WITH RETURNCODE OK AND IN ENABLE-MODE
	RF	RTNOK1
	EJECT
*************************************************************************** 
***	OUTPUT TO LINE
*************************************************************************** 
***	ON ENTRY:A8=ADDRESS OF LIECB
***	            LIECB:WORD0=FILECODE
***	                  WORD1=BUFFERADDRESS 
***	                  WORD2=REQUESTED LENGTH
*** 
***	ON EXIT :A8:=ADDRESS OF LIECB 
***	             LIECB:WORD4=RETURNCODE 
*** 
DROUT	EQU	* 
***	SEARCH SENDER LCT WITH SAME FILECODE AS IN LIECB GIVEN
         LDK      A2,TYPEOU 
	LDKL	A6,OUT100-1	A6:=RETURNADDR.-1 IF LCT FOUND
OUT050	EQU	*
	RF	STP050
***	SENDER LCT FOUND;A1:=ADDRESS OF LCT 
OUT100	EQU	*
	INH
***	TEST IF DRIVER STATUS IS CONNECT
	LDK	A3,DRCONE
	CW	A3,DRSTAT,A1
RTNE31	EQU	*
	RF(NE)	RTNE32	DRIVER STATUS IS NOT CONNECT 
***	TEST IF SENDER IS ACTIVE
	LDK	A4,DRACT 
	CW	A4,DRSSTA,A1
	ABL(E)	ERR040	NO MORE OUTPUT-REQUESTS ALLOWED
***			AT THIS MOMENT
*************************************************************************** 
***	DRIVER STATUS IS CONNECT;SENDER STATUS INACTIVE 
*************************************************************************** 
	LD	A6,ECBBA,A8	A6:=BUFFER-ADDRESS
***	SAVE REQUESTED LENGTH IN WORDS IN LCT 
	LD	A2,ECBRL,A8 
	SRC	A2,1	A2:=NUMBER OF WORDS TO OUTPUT 
	LDR	A7,A2
	RF(NN)	OUT200	EVEN NUMBER OF CHARACTERS
***	ODD NUMBER OF CHARACTERS
	ANKL	A2,/FFF 
	ADK	A2,1	A2:=NUMBER OF WORDS + 1 
OUT200	EQU	*
	ST	A2,REQLEN,A1	SAVE NUMBER OF WORDS IN LCT
	ST	A2,LENGTH,A1
	IFT	IOPPC=0
         IFT      IOPCON=0
	LDK	A2,WRITPC	A2:=WRITE FLAG ON PROGRAM-CHANNEL
         XIF
	IFT	IOPPC=0
	IFT	IOPCON=1 
******************************************
***	FOR IOPROCESSOR ONLY! 
***	PREPARE WER1 AND WER2 INSTRUCTION 
         CF       A15,WERWRI
	LDK	A2,WRITIO	A2:=WRITE-FLAG ON IO-PROCESSOR 
******************************************
	XIF
	IFT	IOPPC=1
	LC	A3,DEVADD,A1
	ANK	A3,MIOP
	RF(NZ)	OUT002	IOP
	LDK	A2,WRITPC
	RF	OUT004
OUT002	EQU	*
	CF	A15,WERWRI
	LDK	A2,WRITIO
OUT004	EQU	*
	XIF
***	TEST IF ODD NUMBER OF CHARACTERS HAS TO BE TRANSMITTED
	LDR	A7,A7
	RF(NN)	OUT350
***	ODD NUMBER OF CHARACTERS
***	SET NUMBER OF TRUE DATA-BITS FOR LAST TRANSFER IN COMMAND 
	ORKL	A2,/800	ONLY ONE CHARACTER SIGNIFICANT IN 
***			LAST WORD 
OUT350	EQU	*
***	PREPARE CIO START OUTPUT
	LD	A3,DEVADD,A1
	ORKL	A3,CIOINS 
	EXR	A3	EXECUTE CIO START OUTPUT
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
RTNE22	EQU	*
	RF(NA)	ERR020	CIO NOT ACCEPTED 
***	SET SENDER STATUS ACTIVE
	ST	A4,DRSSTA,A1
	ST	A8,LIECB,A1	SET ADDRESS OF LIECB IN LCT 
	ST	A6,BUFADD,A1	SET BUFFER ADDRESS IN LCT
RTNOK1	EQU	*
***	RETURN TO CALLER WITH RETURNCODE OK AND IN ENABLE-MODE
	RF	RTNOK 
	EJECT
*************************************************************************** 
***	STOP EXCHANGE 
*************************************************************************** 
***	ON ENTRY:A8=ADDRESS OF LIECB
***	            LIECB:WORD0=FILECODE
*** 
***	ON EXIT :A8:=ADDRESS OF LIECB 
***	             LIECB:WORD4=RETURNCODE 
*** 
DRSTOP	EQU	*
***	SEARCH RECEIVER LCT WITH SAME FILECODE AS IN LIECB
         LDK      A2,TYPEST 
	LDKL	A6,STP100	A6:=RETURNADDR.IF LCT FOUND 
STP050	EQU	*
	RF	SCALCT
***	RECEIVER LCT FOUND;ADDRESS OF LCT IN A1 
STP100	EQU	*
	LDR	A7,A1
	ADK	A7,DRSTAT	A7:=ADDRESS OF DRIVER-STATUS OF RECEIVER 
***	TEST IF DRIVER STATUS IS CONNECT
	INH
	LDK	A4,DRCONE
	CWR*	A4,A7 
RTNE32	EQU	*
	RF(NE)	ERR030	DRIVER STATUS IS NOT CONNECT 
	LDK	A4,DRSTWA
***	TEST IF RECEIVER STATUS IS ACTIVE 
	LDK	A6,DRACT 
	CW	A6,DRRSTA,A1
	RF(E)	STP150 
***	SET DRIVER-STATUS OF RECEIVER STOP
	LDK	A3,DRSTEX
	STR	A3,A7
	RF	STP300
STP150	EQU	*
***	RECEIVER IS ACTIVE
	LD	A3,DEVADD,A1
	ORKL	A3,CIOHLT 
	EXR	A3 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	STR	A4,A7	SET DRIVER-STATUS OF RECEIVER WAIT 
***			FOR STOP
STP300	EQU	*
***	TEST IF SENDER IS ACTIVE
	LDK	A7,LCTEND
	ADR	A7,A1	A7:=ADDRESS OF CORRESPONDING TRANSMITTER-LCT 
	CW	A6,DRSSTA,A7
	RF(E)	STP350 
***	SET DRIVER-STATUS OF SENDER STOP
	LDK	A4,DRSTEX
	ST	A4,DRSTAT,A7
         RF       RTNOK 
STP350	EQU	*
***	SENDER IS ACTIVE
	LD	A3,DEVADD,A7
	ORKL	A3,OTR1 
	LDK	A2,ABORT	A2:=ABORT-FLAG FOR OTR1 
	EXR	A3	EXECUTE OTR1 INSTRUCTION
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	ST	A4,DRSTAT,A7	SET DRIVER STATUS STOP WAIT
	RF	RTNOK 
	EJECT
*************************************************************************** 
***	DISCONNECT MODEM
*************************************************************************** 
***	ON ENTRY:A8:=ADDRESS OF LIECB 
***	             LIECB:WORD0=FILECODE 
*** 
***	ON EXIT :A8:=ADDRESS OF LIECB 
***	             LIECB:WORD4=RETURNCODE 
*** 
DRDISC	EQU	*
***	SEARCH RECEIVER LCT WITH SAME FILE CODE AS IN LIECB 
         LDK      A2,TYPEDI 
	LDKL	A6,DIS100 
	RF	SCALCT
***	RECEIVER LCT FOUND;IN A1:=ADDRESS OF LCT
DIS100	EQU	*
	INH
***	TEST IF DRIVER STATUS IS STOP 
	LDK	A3,DRSTEX
	CW	A3,DRSTAT,A1
	RF(NE)	ERR030	WRONG DRIVER STATUS OF RECEIVER
***	TEST IF DRIVER STATUS OF SENDER IS STOP 
	CW	A3,DRSTAT+LCTEND,A1 
	RF(NE)	ERR030	WRONG DRIVER STATUS OF SENDER
***	PREPARE DISCONNECT INSTRUCTION
	LDK	A2,DISCON
	LD	A3,DEVADD,A1
	ORKL	A3,CIOINS 
	EXR	A3	EXECUTE CIO DISCONNECT
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	RF(NA)	ERR020	CIO NOT ACCEPTED 
***	SET DRIVERSTATUS WAIT FOR NORMAL DISCONNECT READY 
	ST	A8,LIECB,A1 
	LDK	A3,DRWFDR
	ST	A3,DRSTAT,A1	SET DRIVER STATUS FOR RECEIVER 
	ST	A3,DRSTAT+LCTEND,A1	SET DRIVER STATUS OF SENDER 
RTNOK	EQU	* 
***	RETURN TO CALLER WITH RETURN CODE OK AND ENABLE-MODE
***	SET RETURN-CODE OK; SET ENABLE-MODE 
	LDK	A3,0 
	RF	RETURN
	EJECT
*** 
*** 
***	RETURN TO CALLER WITH ERROR!
*** 
***	FILECODE UNKNOWN
ERR010	EQU	*
***	SET IN LIECB-RETURN-CODE: FC-UNKNOWN
	LDK	A3,UNKNFC
	RF	RETURN
*** 
***	CIO NOT ACCEPTED
*** 
ERR020	EQU	*
***      TEST IF DEVICE ADDRESS UNKNOWN 
         RF(O)    ERR050
***	SET IN LIECB-RETURN-CODE:CIO NOT ACCEPTED!
	LDK	A3,CIONAC
	RF	RETURN
*** 
***	DRIVER-STAUS NOT CORRECT
*** 
ERR030	EQU	*
***	SET IN LIECB-RETURN-CODE: WRONG DRIVER STATUS 
	LDK	A3,WRODST
	RF	RETURN
*** 
***	INPUT-QUEUE IS FULL OR SENDER ACTIVE
*** 
ERR040	EQU	*
***	SET IN LIECB-RETURN-CODE: NO MORE INPUT OR OUTPUT ALLOWED AT
***		                         THIS MOMENT 
	LDK	A3,NOTALL
         RF       RETURN
*** 
*** 
ERR050   EQU      * 
***      SET IN LIECB-RETURNCODE : DEVICE ADDRESS UNKNOWN 
         LDK      A3,UNKNDV 
*** 
*** 
RETURN	EQU	*
***	SET ERROR-RETURN-CODE INLIECB;SET ENB-MODE BEFORE RTN TO CALLER 
	ST	A3,ECBRC,A8 
	ENB
	RTN	A5 
	EJECT
*** 
*** 
***	SEARCH LCT ACCORDING FILECODE GIVEN IN LIECB
***	ON ENTRY:A6:=RETURN-ADDRESS 
***		   EVEN ADDRESS: RECEIVER-LCT WANTED 
***		   ODD ADDRESS : SENDER-LCT WANTED 
***		A8:=LIECB-ADDRESS
***                A2:=TYPE OF REQUEST
*** 
***	ON EXIT :A1:=ADDRESS OF LCT CONTAINING SAME FC AS IN LIECB
*** 
SCALCT	EQU	*
         ST       A2,ECBPR,A8 
	LDKL	A2,LCTTAB 
	LDR*	A4,A2	A4:=NUMBER OF TOTAL LCT'S 
SCA100	EQU	*
	SUK	A4,1 
	RB(N)	ERR010	FILECODE UNKNOWN
	ADK	A2,2 
	LDR*	A1,A2	A1:=ADDRESS OF LCT
	LD	A3,FILCOD,A1	A3:=FILECODE FROM LCT
	CC	A3,1,A8 
	RB(NE)	SCA100	TRY NEXT LCT 
***	LCT FOUND WITH SAME FILECODE AS IN LIECB
***	TEST ON REQUIRED LCT
         LDK      A7,1
         ANR      A7,A6            A7:=1 IF SENDER-LCT WANTED 
***                                    0 IF RECEIVER-LCT WANTED 
         RF(Z)    SCA200           RECEIVER LCT FOUND 
***      RECEIVER LCT FOUND BUT SENDER LCT WANTED 
         ADK      A6,1             ADJUST RETURN ADDRESS
	ADK	A1,LCTEND	A1:=ADDRESS OF TRANSMITTER-LCT 
SCA200   EQU      * 
	ABR	A6 
*** 
	EJECT
*************************************************************************** 
***	COMMON SENDER INTERRUPT HANDLER 
*************************************************************************** 
***	ON ENTRY:A1:=ADDRESS OFSPECIFIED SENDER-LCT 
***	         OLD A1 ALREADY SAVED ON A15-STACK
*** 
***	ON EXIT :A7:=TYPE=OUTPUT
***	         RETURNED TO IDREQ IN ENABLE-MODE ON LEVEL 48 
***	         IF INTERRUPT IS EXPECTED 
***	         OTHERWISE RETURN AFTER INTERRUPT 
*** 
DRHLTR   EQU      * 
*** 
	LDR	A7,A1	 
	ADK	A7,DRSTAT	A7:=ADDR.OF DRIVER-STATUS OF SENDER
	LD	A6,DEVADD,A1
	LDK	A4,DRINAC
***	SELECT DRIVER STATUS
	LDK	A3,DRCONE
	CWR*	A3,A7 
	RF(NE)	SIN300
	EJECT
*************************************************************************** 
***	DRIVER STATUS IS CONNECT
*************************************************************************** 
***	TEST IF SENDER STATUS IS INACTIVE 
	CW	A4,DRSSTA,A1
	RF(NE)	SIN200
SIN100	EQU	*
***	UNEXPECTED INTERRUPT;RESET INTERRUPT
	LDR	A3,A6
	ORKL	A3,SSTINS 
	EXR	A3 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
SIN150	EQU	*
***	RETURN AFTER INTERRUPT
	ABL	RTNA15 
SIN200	EQU	*
***	SENDER STATUS IS ACTIVE 
	IFT	IOPPC=1
***	TEST IF IOP OR PC 
	LC	A2,DEVADD,A1
	ANK	A2,MIOP
	RF(NZ)	SIN260
***	PROGRAMMED-CHANNEL
	LD*	A2,BUFADD,A1	A2:=NEXT WORD TO OUTPUT 
	LDR	A3,A6
	ORKL	A3,OTRINS 
	EXR	A3	EXECUTE OTR-INSTRUCTION WITH A2 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	IFT	IOPPC=1
	RF(NA)	SIN260
***	CALCULATE BUFFERADDRESS FOR NEXT WORD TO TRANSMIT 
	LDK	A3,2 
	ADS	A3,BUFADD,A1 
***	TEST IF LAST WORD 
	LD	A3,REQLEN,A1
	SUK	A3,1 
	ST	A3,REQLEN,A1	STORE NEW LENGTH 
	RB(NZ)	SIN150	NOT THE LAST WORD
***	LAST WORD; PREPARE CIO HALT 
	LDR	A3,A6
	ORKL	A3,CIOHLT 
	EXR	A3	EXECUTE CIO HALT INSTRUCTION
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	IFT	IOPPC=1
***	RETURN AFTER INTERRUPT
	RB	SIN150
         XIF
	IFT	IOPPC=0
	IFT	IOPCON=0 
***	PROGRAMMED-CHANNEL
	LD*	A2,BUFADD,A1	A2:=NEXT WORD TO OUTPUT 
	LDR	A3,A6
	ORKL	A3,OTRINS 
	EXR	A3	EXECUTE OTR-INSTRUCTION WITH A2 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	IFT	IOPPC=0
         IFT      IOPCON=0
	RF(NA)	SIN260
***	CALCULATE BUFFERADDRESS FOR NEXT WORD TO TRANSMIT 
	LDK	A3,2 
	ADS	A3,BUFADD,A1 
***	TEST IF LAST WORD 
	LD	A3,REQLEN,A1
	SUK	A3,1 
	ST	A3,REQLEN,A1	STORE NEW LENGTH 
	RB(NZ)	SIN150	NOT THE LAST WORD
***	LAST WORD; PREPARE CIO HALT 
	LDR	A3,A6
	ORKL	A3,CIOHLT 
	EXR	A3	EXECUTE CIO HALT INSTRUCTION
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	IFT	IOPPC=0
         IFT      IOPCON=0
***	RETURN AFTER INTERRUPT
	RB	SIN150
         XIF
SIN260	EQU	*
***	INTERRUPT OF CIO HALT OR OTR1 
	LDKL	A5,SIN268	A5:=RETURNADDRESS 
	RF	SIN400
SIN268	EQU	*
	LD	A2,ECBRL,A8 
	ST	A2,ECBEL,A8	COPY REQUESTED LENGTH IN EFFECTIVE
***			LENGTH FIELD IN LIECB 
***	SWITCH TO SOFTWARE LEVEL 48 AND RETURN TO IDREQ 
SIN280	EQU	*
         SUK      A1,LCTEND        A1:=ADDRESS OF RECEIVER LCT
	ABL	SWLRID 
	EJECT
SIN300	EQU	*
***	TEST IF DRIVER STATUS STOP WAIT 
	LDK	A3,DRSTWA
	CWR*	A3,A7 
	RB(NE)	SIN100	RESET INTERRUPT;RETURN AFTER INTERRUPT 
**************************************************************************
***	DRIVER STATUS IS STOP WAIT
**************************************************************************
	CW	A4,DRSSTA,A1	TEST IF SENDER STATUS IS INACTIVE
	RB(E)	SIN100	RESET INTERRUPT;RETURN AFTER INTERRUPT
***	SENDER STATUS IS ACTIVE 
	LDKL	A5,SIN500	A5:=RETURNADDRESS 
SIN400	EQU	*
	LDR	A3,A6
	ORKL	A3,SSTINS 
	EXR	A3	EXECUTE SST-INSTRUCTION WITH A2 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	RB(NA)	SIN150	SST-NOT ACCEPTED 
	ANK	A2,3	DISTROY NOT SIGNIFICANT BITS
	ORKL	A2,/8000
	LD	A8,LIECB,A1	A8:=ADDRESS OF LIECB
	ST	A2,ECBRC,A8	STORE STATUS WORD 
	ST	A4,DRSSTA,A1	SET SENDER-STATUS INACTIVE 
	ABR	A5	RETURN TO SPECIFIED ADDRES
SIN500	EQU	*
	LDK	A3,DRSTEX
	STR	A3,A7	SET DRIVER-STATUS OF SENDER STOP 
	RB	SIN280	RETURN TO IDREQ
*** 
	EJECT
*************************************************************************** 
***	COMMON RECEIVER-INTERRUPT HANDLER 
*************************************************************************** 
***	ON ENTRY:A1:=ADDRESS OF SPECIFIED RECEIVER-LCT
***	         OLD A1 ALREADY SAVED ON A15-STACK
*** 
***	ON EXIT :A7:=TYPE 
***		RETURN TO IDREQ IN ENABLE-MODE ON LEVEL 48 IF
***		INTERRUPT IS EXPECTED
***		OTHERWISE RETURN AFTER INTERRUPT 
*** 
DRHLRC   EQU      * 
*** 
	LD	A5,DEVADD,A1
	ANK	A5,/FF 
	LDR	A3,A5
	ORKL	A3,INRINS 
	EXR	A3	EXECUTE INR-INSTRUCTION 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	RF(NA)	INT250
***	TEST IF RECEIVER IS ACTIVE
	LDK	A3,DRACT 
	CW	A3,DRRSTA,A1
	RF(E)	INT200 
***	RECEIVER NOT ACTIVE ;STOP RECEIVER
	LDR	A3,A5
	ORKL	A3,CIOHLT 
	EXR	A3 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
INT090	EQU	*
***	RETURN AFTER INTERRUPT
	ABL	RTNA15 
INT200	EQU	*
	IFT	IOPPC=1
***	TEST IF IOP OR PC 
	LC	A3,DEVADD,A1
	ANK	A3,MIOP
	RF(NZ)	INT250	IOP
***	RECEIVER STATUS IS ACTIVE 
	LD	A3,BUFADD,A1	A3:=BUFFERADDRESS WHERE TO STORE 
	STR	A2,A3	INPUT-WORD 
***	DECREMENT NR OF INPUT WORDS 
	LD	A6,REQLEN,A1
	SUK	A6,1 
	ST	A6,REQLEN,A1
***	TEST IF LAST WORD 
	RF(P)	INT220	NOT LAST
	LD	A2,LIECB,A1	GET ECB ADDRESS 
	LD	A2,ECBPR,A2	GET SAVED CHAR AND CONDITION
	RB(NN)	INT090	CHAR MUST NOT BE RESTORED
**
**	THE SAVED CHAR MUST BE RESTORED IN THE BUFFER
**	BECAUSE THE REQUESTED LENGTH IS ODD AND THE
**	CONTROLLER ONLY STORES AN UPROUNDED EVEN NUMBER
**	OF CHARACTERS IN THE BUFFER. 
	SC	A2,1,A3	RESTORE CHARACTER 
	RB	INT090
***	NOT LAST WORD 
INT220	EQU	*
	LDK	A3,2 
	ADS	A3,BUFADD,A1	INCREMENT BUFFERADDRESS FOR NEXT WORD 
	RB	INT090	RETURN AFTER INTERRUPT 
         XIF
	IFT	IOPPC=0
         IFT      IOPCON=0
***	RECEIVER STATUS IS ACTIVE 
	LD	A3,BUFADD,A1	A3:=BUFFERADDRESS WHERE TO STORE 
	STR	A2,A3	INPUT-WORD 
***	DECREMENT NR OF INPUT WORDS 
	LD	A6,REQLEN,A1
	SUK	A6,1 
	ST	A6,REQLEN,A1
***	TEST IF LAST WORD 
	RF(P)	INT220	NOT LAST
	LD	A2,LIECB,A1	GET ECB ADDRESS 
	LD	A2,ECBPR,A2	GET SAVED CHAR AND CONDITION
	RB(NN)	INT090	CHAR MUST NOT BE RESTORED
**
**	THE SAVED CHAR MUST BE RESTORED IN THE BUFFER
**	BECAUSE THE REQUESTED LENGTH IS ODD AND THE
**	CONTROLLER ONLY STORES AN UPROUNDED EVEN NUMBER
**	OF CHARACTERS IN THE BUFFER. 
	SC	A2,1,A3	RESTORE CHARACTER 
	RB	INT090
***	NOT LAST WORD 
INT220	EQU	*
	LDK	A3,2 
	ADS	A3,BUFADD,A1	INCREMENT BUFFERADDRESS FOR NEXT WORD 
	RB	INT090	RETURN AFTER INTERRUPT 
         XIF
*** 
INT250	EQU	*
	LDR	A3,A5
	ORKL	A3,SSTINS 
	EXR	A3	EXECUTE SST-INSTRUCTION WITH A2 
	IFT	IOLOG=1
	CF	A15,LGA3A2
	XIF
	RB(NA)	INT090	SOMETHING WRONG!!SST NOT ACCEPTED!!
	LD	A8,LIECB,A1	A8:=ADDRESS OF LIECB
***	TEST IF DRIVER STATUS IS CONNECT OR STOP WAIT 
	LD	A3,DRSTAT,A1
	CWK	A3,DRCONE
	RF(E)	INT254 
	CWK	A3,DRSTWA
	ABL(NE)	INT400 
	EJECT
INT254	EQU	*
************************************************************************
***	DRIVER-STATUS IS CONNECT OR STOP WAIT 
************************************************************************
***	TEST IF RECEIVER STATUS IS ACTIVE 
	LDK	A4,DRINAC
	CW	A4,DRRSTA,A1
	RB(E)	INT090	RETURN AFTER INTERRUPT
	ST	A2,ECBRC,A8	STORE CONTROL-STATUS-WORD IN ECBRC
	IFT	IOPPC=1
***	TEST IF IOP OR PC 
	LC	A3,DEVADD,A1
	ANK	A3,MIOP
	RF(Z)	INT255	NO IOP
***	IO-PROCESSOR;GET NR.OF WORDS READ 
	LDR	A3,A5
	SLL	A3,1 
	ORKL	A3,RER
	EXR	A3 
	ANKL	A2,/FFF 
	ST	A2,REQLEN,A1	SAVE LENGTH TEMPORARY
INT255	EQU	*
	XIF
	IFT	IOPPC=0
	IFT	IOPCON=1 
***	IO-PROCESSOR;GET NR.OF WORDS READ 
	LDR	A3,A5
	SLL	A3,1 
	ORKL	A3,RER
	EXR	A3 
	ANKL	A2,/FFF 
	ST	A2,REQLEN,A1	SAVE LENGTH TEMPORARY
	XIF
	LD	A2,ECBRC,A8 
***      TEST IF MODEM NOT OPERABLE 
         LDK      A3,NOTOPE 
         TM       A3,A2 
         RF(NZ)   INT260           YES! 
***  TEST IF DRIVER STATUS 'STOP WAIT'
	LDK	A3,DRSTWA
	CW	A3,DRSTAT,A1
	RF(E)	INT260	PROCESS INPUT 
***  DRIVER STATUS 'CONNECT'
***      TEST IF IDLE OR ABORT ONE'S
         LDKL     A3,IDLABO 
         TM       A3,A2 
         RF(NZ)   INT258           YES! 
	LDK	A3,CAROFF
	TM	A3,A2	CARRIER OFF ? 
	RF(NZ)	INT257	YES! 
***	CARRIERR OFF BIT NOT SET
***	TEST IF LENGTH LESS THAN MINIMUM
	LDK	A3,1 
	AD	A3,REQLEN,A1
	CW	A3,LENGTH,A1
	RF(G)	INT258	RETRY: NO INPUT AT ALL! 
	RF(L)	INT260	ACCEPT: MORE THAN TWO CHARACTERS
	LDKL	A3,/F00 
	ANR	A3,A2
	RF(Z)	INT260	ACCEPT: TWO CHARACTERS
	RF	INT258	RETRY: LESS THAN TWO CHARACTERS
INT257	EQU	*
***	CARRIER-OFF BIT SET 
***	TEST IF ALARM RECEIVE DATA
	LD	A3,RECDAT,A1
	ANK	A3,1 
	RF(Z)	INT260	YES!
INT258   EQU      * 
***	RETRY CIO START INPUT 
	CM	ECBRC,A8	CLEAR RETURN CODE
	LD	A2,RETRY,A1	A2 := RETRY COUNTER VALUE 
	ADK	A2,1	INCREMENT COUNTER 
	CWK	A2,5	AGAIN RETRY ? 
	RF(NG)	INT259	YES
	LDK	A2,/FF 
	ST	A2,ECBRC,A8	SAVE RETURNCODE 
	RF	INT260
INT259	EQU	*
	ST	A2,RETRY,A1	STORE RETRY COUNTER 
         LD       A6,ECBBA,A8 
         LD       A2,LENGTH,A1
         ST       A2,REQLEN,A1
	IFT	IOPPC=0
         IFT      IOPCON=1

Full view