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

⟦51e73fb77⟧

    Length: 78212 (0x13184)
    Notes: pts_type(SC)
    Names: »DRDC17.SC«

Derivation

└─⟦173d42e04⟧ Bits:30009663 Philips computer tape "600105"
    └─⟦this⟧ »TOSSWORK/DRDC17.SC« 

PTS(SC)

	IDENT DRDC17 	REL 10.0 80-05-07 870105041000 

			=6, A15-CALLS IN TRIDLE  800507
			=5, 6805 READ HANGUPS    800507

			=4, DC:MIN HEADER
			REL 10.1 80-02-13
			=3,MASK+I/P ACT. IND.
			80-02-13 
			=2,RETURN CODE+MODEM OFF 
			80-01-08 
			=1,POWER UP
			79-10-26 

******************************************************* 
* 
*   PHILIPS ELECTRONIC INDUSTRIES - TERMINAL DIVISION. PEAB-T 
* 
*   DATA COMMUNICATION DRIVER FOR PTS 6800
* 
*   LINE PROCEDURE: BSC CONTENTION/SIEMENS MSV2 
* 
* 
* 
* 
* 
******************************************************* 
* 
*   STANDARD USE OF REGISTERS : 
* 
*   A1  WORK REGISTER 
*   A2  I/O AND WORK REGISTER 
*   A3  WORK REGISTER 
*   A4  WORK REGISTER 
*   A5  STACK POINTER 
*   A6  DWT ADDRESS 
*   A7  BCC ACCUMULATOR 
*   A8  ECB ADDRESS 
* 
******************************************************* 
	EJECT
* 
******************************************************* 
* 
*	ENTRY POINTS
* 
******************************************************* 
* 
	ENTRY	DC17ON	RECOVERY AT POWER ON
* INTERRUPT HANDLERS
	ENTRY	IH1701	LINE 01 INPUT 
	ENTRY	IH1702	        OUTPUT
	ENTRY	IH1703	LINE 02 INPUT 
	ENTRY	IH1704	        OUTPUT
	ENTRY	IH1705	LINE 03 INPUT 
	ENTRY	IH1706	        OUTPUT
	ENTRY	IH1707	LINE 04 INPUT 
	ENTRY	IH1708	        OUTPUT
* DEVICE WORK TABLES
	ENTRY	DW1701	LINE 01 DWT 
	ENTRY	DW1702	LINE 02 DWT 
	ENTRY	DW1703	LINE 03 DWT 
	ENTRY	DW1704	LINE 04 DWT 
* 
	EJECT
* 
******************************************************* 
* 
*	EXTERNAL REFERENCES 
* 
******************************************************* 
* 
	EXTRN	TDISP	DISPATCHER ENTRY 
	EXTRN	TENDIO	REQUEST COMPLETION
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	SETIME	SET TIMER CALL ADDRESS
	EXTRN	DWTST	DWT STATUS 
	EXTRN	DWTECB	DWT ECB ADDRESS 
	EXTRN	DWTOR	DWT ORDER
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EXTRN	ECBRC	ECB RETURN CODE
	EXTRN	ECBCW	ECB CONTROL WORD 
	EXTRN	TASCII	CODE CONV. TABLE EBCDIC-ASCII 
	EXTRN	TEBCDIC	CODE CONV. TABLE ASCII-EBCDIC
	EXTRN	INTSAV 
	EXTRN	ILLINT	ILLEGAL INTERRUPT 
	EXTRN	SAVE8
	EXTRN	DISEND 
	EXTRN	PFPOST	WAIT FOR POWER UP IF SET	=1 
	EJECT
* 
* 
*   PARAMETERS FOR CONDITIONALLY ASSEMBLY 
* 
* 
X:A	EQU	1	<=4 
NLINE	EQU	X:A	NUMBER OF COMMUNICATION LINES 

X:B	EQU	1 
BSC	EQU	X:B	IF = 0. SIEMENS MSV2 PROCEDURE
			IF = 1. BSC PROCEDURE
X:C	EQU	1 
CODE	EQU	X:C	IF = 0. ASCII CODE 
			IF = 1. EBCDIC CODE (BSC ONLY) 
X:D	EQU	0 
TRANSP	EQU	X:D	IF = 1. EBCDIC TRANSPARANCY (BSC ONLY) 

X:E	EQU	10
TBID	EQU	X:E	BID TIME OUT VALUE (X100 MS) 

X:F	EQU	500 
LOGG	EQU	X:F	IF NOT ZERO INTERRUPT LOG INCLUDED 
			LOGG = LOG AREA LENGTH PER LINE

X:G	EQU	0		 
SALCUZ	EQU	X:G	IF =0 DC CONTROL UNIT 6834 	 
			   =1 DC CONTROL UNIT 6857/SALCUZ	 

* DEVICE ADDRESSES
	IFT	SALCUZ=1		 
X:H	EQU	/0A	INPUT DEV ADDR LINE 01	 
X:I	EQU	/3E	                    02	 
X:J	EQU	/3E	                    03	 
X:K	EQU	/3E	                    04	 
	XIF			 
	IFF	SALCUZ=1		 
X:H	EQU	/02	INPUT DEV ADDR LINE 01
X:I	EQU	/22	                    02
X:J	EQU	/04	                    03
X:K	EQU	/05	                    04
DAMI01	EQU	X:H	INPUT DEV ADDR LINE 01	
DAMI02	EQU	X:I	INPUT DEV ADDR LINE 02	
DAMI03	EQU	X:J	INPUT DEV ADDR LINE 03	
DAMI04	EQU	X:K	INPUT DEV ADDR LINE 04	
	XIF		. 
	IFT	SALCUZ=1		 
DAMI01	EQU	/0A	INPUT DEV ADDR LINE 01 
DAMI02	EQU	/3E	INPUT DEV ADDR LINE 02 
DAMI03	EQU	/3E	INPUT DEV ADDR LINE 03 
DAMI04	EQU	/3E	INPUT DEV ADDR LINE 04 
DAMU01	EQU	DAMI01+1	OUTPUT DEV ADDR LINE 01	
DAMU02	EQU	DAMI02+1	OUTPUT DEV ADDR LINE 02	
DAMU03	EQU	DAMI03+1	OUTPUT DEV ADDR LINE 03	
DAMU04	EQU	DAMI04+1	OUTPUT DEV ADDR LINE 04	
	XIF			 
	IFF	SALCUZ=1		 
DAMU01	EQU	DAMI01+/10	OUTPUT DEV. ADDR. LINE 01 
DAMU02	EQU	DAMI02+/10	OUTPUT DEV. ADDR. LINE 02 
DAMU03	EQU	DAMI03+/10	OUTPUT DEV. ADDR. LINE 03 
DAMU04	EQU	DAMI04+/10	OUTPUT DEV. ADDR. LINE 04 
	XIF			 
* 

X:L	EQU	0 
COMPRS	EQU	X:L	IF =1, SPACE COMPR./DECOMPR. PERFORMED 
* 
X:M	EQU	0 
IDLELN	EQU	X:M	IF =1, IDLE LINE ACTIVITY INCLUDED TO SIMULATE 
			    START O/P TO HOLD A 2-WIRE SWITCHED LINE 
* 
SPEED	EQU	1	IF =1, HIGH SPEED (CT111) 
* 
X:N	EQU	0 
TBUFL	EQU	X:N	SIZE OF MMU BUFFER IN WORDS 

*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1 
* 
MMUPAG	EQU	0
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0 
* 
CPU852	EQU	1
* 
* 
DEVIND	EQU	2
BUFLEN	EQU	TBUFL+TBUFL	MMU BUFFER SIZE
	EJECT
* 
******************************************************* 
* 
*	SYSTEM PARAMETERS 
* 
******************************************************* 
* 
TIMBID	EQU	TBID	BID TIMER:( STANDARD IS 1 S ) 
TIMTTD	EQU	20	TTD TIMER: 2 S
TIMENQ	EQU	30	ENQ TIMER: 3 S
TIMACK	EQU	30	ACK TIMER: 3 S
TIMWAC	EQU	20	WACK TIMER: 2 S 
TIMCON	EQU	20	CONNECT TIMER: 2 S
TIMWRT	EQU	200	WRITE TIMER: 20 S
TIMIDL	EQU	150	IDLE LINE ACTIVITY TIME: 15 SEC'S
* 
* 
ENQCNT	EQU	3	COUNT OUT AFTER 3 ENQ:S
WACCNT	EQU	15	COUNT OUT AFTER 15 WACK:S 
RTRCNT	EQU	4	COUNT OUT AFTER 4 TRANSMISSIONS
* 
	IFT	SPEED=1
LSPEED	EQU	/0200	HIGH SPEED SELECTION 6834
	XIF
	IFT	SPEED=0
LSPEED	EQU	0	LOW SPEED SELECTION 6834 
	XIF
	IFT	COMPRS=1		 
COMPMX	EQU	43	MAX NO OF SPACES COMPR <64	 
			MUST BE ADJUSTED TO COMM LINE SPEED	 
			<22 FOR  SPEED =9600 BPS	
			<43            =4800 BPS	
			=63            <4800 BPS	
			SPACE COMPRESSION/DECOMPRESSION	 
SPCMIN	EQU	2	MIN NO OF SPACES	
SPCMAX	EQU	COMPMX	MAX NO OF SPACES	 
SPCCHB	EQU	/40	SPACE COUNT CHAR SPECIAL BIT	
SPCCHM	EQU	/3F	SPACE COUNT CHAR MASK	 
SPCASC	EQU	/20	ASCII SPACE CHAR FOR DECOMPR	
*				 
	XIF			 
IUSUSE	EQU	0	IF =1 IUS TO USER BUFF	
	EJECT
**************************************************
* 
* APPLICATION INTERFACE; ORDERS AND RETURN CODES
* 
**************************************************
* 
* ORDERS: 
* 
*	/02 - READ
* 
*	/06 - WRITE 
* 
*	/0A - READ RANDOM 
* 
*	/31 - ACCEPT A CALL 
* 
*	/37 - CONNECT MODEM 
* 
*	/38 - DICONNECT MODEM 
* 
*	/39 - SET REQUEST TIMEOUT 
* 
	EJECT
* RETURN CODES: 
* 
*     STATUS WORD = 0   REQUEST COMPLETED NORMALLY
* 
*        "    "  <> 0   ABNORMAL RETURN (SEE BIT EQU'S BELOW) 
* 
**************************************************************
* 
BIT0	EQU	/8000	REQUEST ERROR (SEE FURTHER BITS 4-6) 
BIT1	EQU	/4000	REQUEST ABORTED
BIT2	EQU	/2000	BEGIN/END OF DEVICE E.G EOT
BIT3	EQU	/1000	END OF FILE E.G ETX
BIT4	EQU	/0800	DEVICE DEPENDENT (SEE FURTHER REQ. ORDER)
BIT5	EQU	/0400	"                 "
BIT6	EQU	/0200	"                 "
BIT7	EQU	/0100	RETRIES PERFORMED
BIT8	EQU	/0080	MORE INFO E.G NOT USED 
BIT9	EQU	/0040	TIMEOUT
BIT10	EQU	/0020	DEVICE DEPENDENT
BIT11	EQU	/0010	"      "
BIT12	EQU	/0008	INCORRECT BUFFER LENGTH (TRANSM./REC. BUFFER) 
BIT13	EQU	/0004	DATA ERROR
BIT14	EQU	/0002	THROUGHPUT ERROR
BIT15	EQU	/0001	MODEM NOT OPERABLE
* 
RCCMPL	EQU	0	REQUESTED ORDER PERFORMED
RCETB	EQU	RCCMPL	ETB RECEIVED DURING READ 
RCIREQ	EQU	BIT0	ILLEGAL REQUEST 
RCABRT	EQU	BIT1	REQUEST ABORTED 
RCEOT	EQU	BIT2	EOT RECEIVED DURING READ 
***************************************************** 
* 
RCETX	EQU	BIT3	ETX "        "      "
RCISEQ	EQU	BIT4+BIT0	ILLEGAL REQ. - SEQUENCE ERROR
RCRRVI	EQU	BIT5+BIT0	"       "      RVI RECEIVED
RCRENQ	EQU	BIT6+BIT0	"       "      ENQ RECEIVED (BID COLLITION)
RCRTRY	EQU	BIT7	RETRIES PERFORMED 
RCTIMO	EQU	BIT9	REQUEST TIMEOUT 
RCCARR	EQU	BIT10	CARRIER DOWN 
RCNCON	EQU	BIT11	NO CONNECTION ESTABLISHED
RCINCL	EQU	BIT12	INCORRECT BUFFER LENGTH
RCIDAT	EQU	BIT13	INVALIDE DATA
RCTHRU	EQU	BIT14	THROUGHPUT ERROR 
RCMNOP	EQU	BIT15	MODEM NOT OPERABLE 
* 
	EJECT
************************************************* 
* 
* DEVICE WORK AREAS 
* 
**********************************************
* 
* DWT STATUS WORD 
* 
*	DWTST   BIT #00 : 0 = DEVICE BUSY 
*	                  1 = DEVICE NOT BUSY 
*   	        BIT #15 : 0 NO CONNECTION ESTABLISHED
* 	                : 1 MODEM CONNECTED
* 
	EJECT
******************************************************* 
* 
*	LINE CONTROL CHARACTER EQUATES
* 
******************************************************* 
* 
PAD	EQU	/FF	TRAILING PAD
DLE	EQU	/10	DATA LINK ESCAPE
SOH	EQU	/01	START OF HEADING	 
STX	EQU	/02	START OF TEXT 
ETX	EQU	/03	END OF TEXT 
	IFT	CODE=0 
SYN	EQU	/16 
EOT	EQU	/04 
ENQ	EQU	/05 
ETB	EQU	/17	END OF TRANSMISSION BLOCK 
NAK	EQU	/15	NEGATIVE ACKNOWLEDGEMENT
RVI	EQU	/3C	SEC CHAR IN RVI SEQUENCE
ACK0	EQU	/30	SEC CHAR IN ACK 0 SEQUENCE 
EXCACK	EQU	1	DIFFERENCE BETWEEN ACK0/1
GS	EQU	/1D	GROUP SEPARATOR	 
SPACE	EQU	/20	SPACE	
US	EQU	/1F	UNIT SEPARATOR	
	XIF
	IFT	CODE=0 
	IFT	BSC=1
WACK	EQU	/3B	SEC CHAR IN WACK SEQUENCE
	XIF
	IFT	CODE=0 
	IFT	BSC=0
WACK	EQU	/BF	SEC CHAR IN WABT SEQUENCE
			SIEMENS MSV2 PROCEDURE 
	XIF
	IFT	CODE=1	EBCDIC CHARACTER EQUATES
SYN	EQU	/32 
EOT	EQU	/37 
ENQ	EQU	/2D 
ETB	EQU	/26 
NAK	EQU	/3D 
WACK	EQU	/6B
RVI	EQU	/7C 
ACK0	EQU	/70
EXCACK	EQU	/11
IGS	EQU	/1D	GROUP SEPARATOR	
GS	EQU	IGS	RENAME IGS	
SPACE	EQU	/40	SPACE	
IUS	EQU	/1F	UNIT SEPARATOR	 
US	EQU	IUS	RENAME US	 
	XIF
	EJECT
************************************************************* 
* 
*	LINE CONTROL UNIT FUNCTION CONTROL EQU:S
* 
************************************************************* 
* 
	IFT	SALCUZ=1		 
CBBREK	EQU	/80	CIO START BREAK	 
CBECHO	EQU	/10	          ECHO	
CBNPAR	EQU	/0	          NO CHAR PARITY	 
CBEPAR	EQU	/4	          EVEN CHAR PARITY	 
CBOPAR	EQU	/C	          ODD CHAR PARITY	
* 
CBSTOP	EQU	/0	CIO STOP INPUT/OUTPUT	
* 
CBDISC	EQU	/1	CIO DISCONNECT MODEM FROM LINE	 
	XIF			 
	IFF	SALCUZ=1		 
CBCARR	EQU	/100	CARRIER ON	 
CBCRSP	EQU	CBCARR+LSPEED	CARRIER ON + SPEED SELECTION 
	XIF			 
* 
* 
	IFT	SALCUZ=1		 
	IFT	CODE=0		 
PARITY	EQU	CBOPAR	ODD PARITY FOR ASCII	 
	XIF			 
	IFT	SALCUZ=1		 
	IFT	CODE=1		 
PARITY	EQU	CBNPAR	NO PARITY FOR EBCDIC	 
	XIF			 
	EJECT
*************************************************** 
* 
*	LINE CONTROL UNIT SST STATUS BITS 
* 
*************************************************** 
* 
SBNOOP	EQU	/1	SST STATUS MODEM NOT OPERABLE	
SBTHRU	EQU	/02	           THROUGHPUT ERROR	 
	IFT	SALCUZ=1		 
SBPARI	EQU	/04	           CHAR PARITY ERROR	
	XIF			 
SBCARR	EQU	/20	           CARRIER OFF	
SBCALL	EQU	/40	           INCOMING CALL	
* 
	IFT	SALCUZ=1		 
SBERR	EQU	/27	SBNOOP,SBTHRU,SBPARI,SBCARR	
	XIF			 
	IFF	SALCUZ=1		 
SBERR	EQU	/23	SBNOOP,SBTHRU,SBCARR	 
	XIF
	EJECT
* 
******************************************************* 
******************************************************* 
* 
* 
*	D R I V E R  A C T I V A T I O N
* 
* 
******************************************************* 
******************************************************* 
* 
* 
	DATA	BUFLEN
	DATA	DEVIND	DEVICE INDEX 
DRMAD	DATA	DRMACT	DWT REFERENCE 
	DATA	ABORT	ABORT ROUTINE ADDRESS 
	DATA	0,0	DC:MIN HEADER	=4
* 
* 
DRMACT	EQU	*
	LDK	A5,DWTSTB	SET UP A5 STACK BASE 
	ADR	A5,A6	IN CASE OF I/O START 
	LD	A1,DWTST,A6	GET CURRENT LINE STATUS 
	SUK	A7,/02 
	RF(Z)	RD	READ
	SUK	A7,/06-/02 
	ABL(Z)	WR	WRITE
	SUK	A7,/0A-/06 
	RF(Z)	RDRNM	READ RANDOM (CREDIT)	
	SUK	A7,/22-/0A 
	ABL(Z)	SRVI	SEND RVI 
	SUK	A7,/31-/22 
	ABL(Z)	ACCALL	ACCEPT CALL
	SUK	A7,/37-/31 
	ABL(Z)	CONNCT	CONNECT MODEM
	SUK	A7,/38-/37 
	ABL(Z)	DISCON	DISCONNECT LINE
	SUK	A7,/39-/38	SET REQUEST TIMER VALUE 
	ABL(Z)	REQTIM
	ABL	DISIOE	ILLEGAL ORDER 
	EJECT

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

ABORT	EQU	*	. 
	CF	A15,CLRTIM	CLEAR REQ TIMER
	CF	A15,CLPTIM	CLEAR PROC TIMER 
	CF	A15,CLMTIM	CLEAR MODEM TIMER
AB:10	EQU	* 
	ST	A5,DWTSAV+4,A6	SAVE A5 TEMP.
	LDK	A5,DWTSTB	.
	ADR	A5,A6	BUILD NEW STACK-BASE 
	CF	A5,CHALTI	HALT INPUT
	IFT	IDLELN=1 
	CF	A15,STIDLE	START IDLE LINE ACTIVITY TIMER 
	XIF
	LD	A5,DWTSAV+4,A6	RELOAD A5
	CM	DWTSAV+4,A6	CLEAR STACK-POINTER 
	CM	DWTXST,A6	SET CONTROL STATE 
AB:RTN	EQU	*
	IFT	CPU852=1 
	ADKL	A15,4 
	ABR*	A15	RETURN IN INHIBIT MODE
	XIF
	IFF	CPU852=1 
	RTN	A15
	XIF
	EJECT
* 
* 
*	ORDER 02 : READ 
* 
* 
RD	EQU	*
	ANK	A1,1	CHECK STATUS
	RF(NZ)	RD400	MODEM CONNECTED 
	ABL	RXMNOP	NO CONNECTION ESTABLISHED; EXIT 
*				 
*				 
*	ORDER 0A : READ RANDOM (CREDIT)	
*				 
RDRNM	EQU	*		 
	LDK	A7,/02	CONVERT TO STANDARD READ	 
	ST	A7,DWTOR,A6	UPDATE DWT	 
	RB	RD	HANDLE AS READ	
	EJECT
* 
* 
*	START THE READ REQUEST
* 
* 
RD400	EQU	* 
	IFT	MMUPAG=1 
	LD	A2,ECBRL,A8	REQUESTED LENGTH
	CWK	A2,BUFLEN	INVALID LENGTH?
	ABL(G)	RXINCL	ILLEGAL LENGTH 
	LD	A1,DWTTIM,A6	GET CONTROL WORD 
	XIF
	LD	A1,DWTTIM,A6
	RF(Z)	RD420	NO TIME OUT SUPERVISION
	ST	A1,RD410
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START REQUEST TIMER
	DATA	RD500	TIME OUT SEQUENCE 
RD410	DATA	0	TIMER VALUE
	ST	A4,DWTRTI,A6	STORE TIMER POINTER
RD420	EQU	* 
	IFT	IDLELN=1 
	CF	A15,CLIDLE	CLEAR IDLE LINE ACTIVITY TIMER 
	XIF
	LD	A1,DWTXST,A6	GET PROCEDURE STATE
	ABL(Z)	BMM	IN CONTROL STATE: START RECEIVER
	SUK	A1,1	. 
	ABL(Z)	RXISEQ	SEQUENCE ERROR - READ WHEN TRANSMITTING
	LD	A1,DWTACK,A6	GET WACK DELAY INDICATOR 
	ABL(Z)	EXDISP	NOT WACK DELAY - WAIT FOR ENQ OR EOT 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
	CF	A5,TRACK	SEND ACK 0/1 
	ABL	BMM	CONTINUE RECEPTION 
	EJECT
* 
* 
*	READ REQUEST TIME OUT 
* 
* 
RD500	LDR	A6,A1	READ REQUEST TIME OUT, RESTORE A6 
	CF	A15,CLRTIM	CLEAR TIMER LINKS	 
	CF	A15,CLPTIM	CLEAR PROC TIMER 
	CF	A15,CLMTIM	CLEAR MODEM TIMER
	CF	A5,CHALTI	 HALT INPUT & 
	CF	A5,CHALTO	 OUTPUT 
	CM	DWTSAV+4,A6	CLEAR STACK POINTER 
	IFT	IDLELN=1 
	CF	A15,STIDLE	START IDLE LINE ACTIVITY TIMER 
	XIF
	ABL	RXTIMO	TIMEOUT; EXIT 
	EJECT
* 
* 
*	ORDER 06: WRITE 
* 
*   IF CONTROL CHARACTER = 0 NOT, TEXT IS ENDED BY ETB
*   IF CONTROL CHARACTER = 0    , TEXT IS ENDED BY ETX
* 
WR	EQU	*
	ANK	A1,1	CHECK STATUS
	ABL(Z)	RXMNOP	MODEM NOT OPERABLE - EXIT
	IFT	MMUPAG=1 
	LD	A1,ECBRL,A8	REQUESTED LENGTH
	CWK	A1,BUFLEN	INVALID LENGTH?
	ABL(G)	RXINCL	ILLEGAL LENGTH 
	XIF
	LD	A1,DWTXST,A6	GET PROCEDURE STATE
	RF(Z)	BID	CONTROL STATE: BID 
	SUK	A1,1 
	RF(Z)	WR100	TRANSMIT MODE
	ABL	RXISEQ	ILLEGAL SEQUENCE; TRYING TO WRITE WHEN RECEIVING
* 
* 
*	SEND BID SEQUENCE 
* 
* 
BID	LDK	A1,1
	ST	A1,DWTXST,A6	INDICATE TRANSMIT MODE 
	LDK	A1,6 
	ST	A1,DWTACK,A6	AND BID SEQUENCE 
	CM	DWTENQ,A6	RESET ENQ COUNTER 
	LDK	A1,ACK0
	ST	A1,DWTRSN,A6	INDICATE ACK 0 EXPECTED
	IFT	IDLELN=1 
	CF	A15,CLIDLE	CLEAR IDLE LINE ACTIVITY TIMER 
	XIF
	ABL	TRENQB	SEND ENQ TO BID 
	EJECT
* 
* 
*	START WRITE IF POSSIBLE 
* 
* 
WR100	LD	A1,DWTACK,A6	GET RESPONSE STATE
	SUK	A1,2 
	ABL(NZ)	EXDISP	NOT IN TTD SEQUENCE 
WR110	CM	DWTRTR,A6	RSET RETRANSMIT COUNTER
	CM	DWTENQ,A6	RESET ENQ COUNTER 
	CM	DWTWAC,A6	RESET WACK COUNTER
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LDK	A1,EXCACK
	XRS	A1,DWTRSN,A6	CHANGE EXPECTED ACK 
	ABL	TRTEXT	SEND TEXT 
	EJECT
* 
* 
*	ORDER /22: SEND RVI 
* 
*   RVI IS SENT INSTEAD OF ACK0/1 AS AFFIRMATIVE
*   ACKNOWLEDGEMENT TO PREVIOUS TEXT RECEPTION
* 
* 
SRVI	ANK	A1,1	CHECK STATUS
	ABL(Z)	RXMNOP	MODEM NOT OPERABLE 
	LD	A1,DWTTIM,A6	GET CONTROL WORD 
	RF(Z)	RVI120	NO TIME OUT SUPERVISION 
	ST	A1,RVI100 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START REQUEST TIMER
	DATA	RVI400
RVI100	DATA	0	TIMER VALUE 
	ST	A4,DWTRTI,A6	STORE TIMER POINTER
RVI120	LD	A1,DWTXST,A6	GET PROCEDURE STATE
	SUK	A1,2 
	ABL(NZ)	RXISEQ	SEQ. ERROR; TRANSM. MODE OR REC. MODE,RTX RECEIVED
RVI200	LD	A1,DWTACK,A6	GET WACK DELAY INDICATOR 
	ABL(Z)	EXDISP	NOT IN WACK DELAY - WAIT FOR ENQ OR EOT
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
RVI300	CF	A5,TRRVI	SEND RVI 
	CF	A15,CLRTIM	RESET REQUEST TIMER
	LDK	A1,RCCMPL	SET RVI SENT. RC= RCCMPL 
	CF	A15,TENDIO	COMPLETE REQUEST 
	ABL	BMM	CONTINUE RECEPTION 
* 
*   TIME OUT
* 
RVI400	LDR	A6,A1	RVI REQUEST TIME OUT,RESTORE A6
	CF	A15,CLRTIM	CLEAR POINTER	 
	ABL	RXTIMO	REQUEST TIMEOUT 
	EJECT
* 
* 
*	ACCEPT A CALL 
* 
* 
ACCALL	EQU	*
	ANK	A1,1 
	ABL(NZ)	RXISEQ	SEQUENCE ERROR; MODEM ALREADY CONNECTED 
	LD	A1,DWTTIM,A6	GET CONTROL WORD 
	RF(Z)	ACC110	NO TIME OUT SUPERVISION 
	ST	A1,ACC100	TIMER VALUE 
	LDR	A1,A6	PASS DWT ADDRESS 
	CF	A15,SETIME	START REQUEST TIMER
	DATA	ACC200	TIME OUT SEQUENCE
ACC100	DATA	0	TIMER VALUE 
	ST	A4,DWTRTI,A6	SAVE TIMER POINTER 
ACC110	INH
	CF	A5,CCALL	ACCEPT CALL BY CU	 
	ABL(A)	EXDISP	ACCEPTED - WAIT FOR CALL 
	ABL	RXMNOP	MODEM NOT OPERABLE
* 
* CALL RECEIVED 
* 
ACC150	EQU	*
	CF	A15,CLRTIM	CLEAR REQ. TIMER 
	IFT	IDLELN=1 
	CF	A15,STIDLE	START IDLE LINE ACTIVITY TIMER 
	XIF
	ABL	RXCMPL	COMPLETE REQUEST
* 
*	TIME OUT
* 
ACC200	LDR	A6,A1	DWT ADDRESS
	CF	A15,CLRTIM	CLEAR POINTER	 
	LDK	A5,DWTSTB	SET UP A5 STACK BASE 
	ADR	A5,A6
	CF	A5,CHALTI	STOP LINE CONTROL UNIT
	ABL	RXTIMO	REQ. TIMEOUT
	EJECT
* 
* 
*	CONNECT MODEM TO LINE 
* 
* 
CONNCT	EQU	*
	LDR	A1,A6
	CF	A15,SETIME	START TIMER
	DATA	CON100,TIMCON 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	CF	A5,CSYNCI	START I/P WITH SYNC DEF	
	RF(A)	CON010 
	CF	A15,CLPTIM
	IFT	IDLELN=1 
	CF	A15,CLIDLE	CLEAR IDLE LINE ACTIVITY TIMER 
	XIF
	ABL	RXMNOP	MODEM NOT OPERABLE
CON010	CF	A5,CHALTI	STOP RECEIVER, NO INTERRUPTS
	ABL	EXDISP	EXIT THRU DISPATCHER
CON100	LDR	A6,A1	TIME OUT 
	CF	A15,CLPTIM	CLEAR POINTER	 
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	CF	A5,CHALTI	HALT LINE CONTROL UNIT INPUT
	ANK	A2,SBNOOP	MODEM NOT OPERABLE ?	
	ABL(NZ)	RXMNOP	MODEM NOT OPERABLE
CON110	LDK	A1,1 
	ORS	A1,DWTST,A6	INDICATE CONNECTED IN DWT
	CM	DWTXST,A6	CONTROL MODE
	ABL	RXCMPL	REQUEST COMPLETE
	EJECT
* 
* 
*	DISCONNECT MODEM FROM LINE
* 
* 
DISCON	EQU	*
	IFT	IDLELN=1 
	CF	A15,CLIDLE	CLEAR IDLE LINE ACTIVITY TIMER 
	XIF
	CF	A5,CDISC	DISCONNECT MODEM FROM LINE 
	LDKL	A1,/FFFE
	ANS	A1,DWTST,A6	RESET "MODEM OPERABLE"-BIT 
	ABL	RXCMPL	COMPLETE REQUEST
	EJECT
****************************************************************
* 
*	SET REQUEST TIMER VALUE 
* 
****************************************************************
REQTIM	EQU	*
	LD	A2,ECBCW,A8	TIMEOUT VALUE 
	ST	A2,DWTTIM,A6	SAVE IT IN DWT 
	EJECT
************************************************* 
* 
* REQUEST COMPLETION  (NORMAL/ABNORMAL) 
* 
********************************************* 
* 
RXCMPL	EQU	*
	LDKL	A1,RCCMPL	NORMAL COMPLETE OF REQUEST
	RF	RXTEND
* 
* ABNORMAL RETURNS
* 
RXISEQ	EQU	*
	LDKL	A1,RCISEQ	ILLEGAL SEQUENCE
	RF	RXTEND
RXRRVI	EQU	*
	LDKL	A1,RCRRVI	RVI RECEIVED
	RF	RXTEND
RXRENQ	EQU	*
	LDKL	A1,RCRENQ	ENQ RECEIVED (BID COLLITION)
	RF	RXTEND
RXRTRY	EQU	*
	LDKL	A1,RCRTRY	RETRIES PERFORMED 
	RF	RXTEND
RXTIMO	EQU	*
	LDKL	A1,RCTIMO	REQUEST TIMEOUT 
	RF	RXTEND
RXNCON	EQU	*
	LDKL	A1,RCNCON	NO CONNECTION ESTABLISHED 
	RF	RXTEND
RXINCL	EQU	*
	LDKL	A1,RCINCL	INCORR. BUFFER LENGTH 
	RF	RXTEND
RXTHRU	EQU	*
	LDKL	A1,RCTHRU	THROUGHPUT ERROR
	RF	RXTEND
RXMNOP	EQU	*
	LD	A1,/FFFE
	ANS	A1,DWTST,A6	RESET MODEM OPERABLE BIT 
	LDKL	A1,RCMNOP	MODEM NOT OPERABLE
* 
RXTEND	EQU	*
	CF	A15,CLRTIM	CLEAR REQ. TIMER 
	CF	A15,TENDIO	TERMINATE I/O REQUEST
* 
EXDISP	EQU	*
	ABL	TDISP	ESCAPE TO DISPATCHER 
	EJECT
* 
******************************************************* 
******************************************************* 
* 
* 
*	R E C O V E R Y  A T  P O W E R  O N
* 
* 
******************************************************* 
******************************************************* 
* 
DRDCON	EQU	*
DC17ON	EQU	*
	LDK	A2,0	RESET INDEX 
DRM100	ADK	A2,2 
	CW	A2,DCTAB
	RF(E)	DRM150	ALL LINES PROCESSED 
	LD	A6,DCTAB,A2	GET DWT ADDRESS 
	CM	DWTXST,A6	INDICATE CONTROL STATE
	CF	A15,CLPTIM	STOP PROCEDURE TIMER IF RUNNING
	IFT	IDLELN=1 
	CF	A15,CLIDLE	CLEAR IDLE LINE ACTIVITY TIMER 
	XIF
DRM110	LDKL	A1,/FFFE
	ANS	A1,DWTST,A6	RESET MODEM READY BIT
	CF	A15,CINIT	INIT LINE CU INFO	
	LD	A1,DWTST,A6 
	RB(N)	DRM100	NO REQUEST
	CF	A15,CLRTIM	STOP REQUEST TIMER IF RUNNING
	LDKL	A1,RCMNOP	RETURN CODE BIT 15: MODEM NOT READY 
	CF	A15,TENDIO	COMPLETE REQUEST 
	RB	DRM100	NEXT LINE
DRM150	RTN	A15
	EJECT
* 
******************************************************* 
******************************************************* 
* 
* 
*	P R O C E D U R E  C O N T R O L  P A R T 
* 
* 
******************************************************* 
******************************************************* 
* 
******************************************************* 
* 
*	BMM : BASIC MASTER MODE 
* 
******************************************************* 
* 
BMM	EQU	* 
	LDK	A5,DWTSTB
	ADR	A5,A6	LOAD A5 STACK BASE 
	CF	A5,CSYNCI	START I/P WITH SYNC DEF	
	RB(NA)	BMM	NOT ACCEPTED WAIT FOR TIMEOUT	
BMM100	EQU	*
	CF	A5,READP	READ CHAR
	RF(NZ)	BMM905	SST STATUS OR PARITY ERROR	
	LD	A1,DWTXST,A6	GET OPERATION MODE 
	SUK	A1,1 
	RF(Z)	TRANSM	TRANSMIT MODE/MASTER MODE 
	ABL(P)	RECEIV	RECEIVE MODE/SLAVE MODE
	EJECT
* 
*	CONTROL STATE 
* 
	CWK	A2,ENQ 
	RF(NE)	BMM900	NOT ENQ
BMM150	LD	A1,DWTST,A6	GET REQUEST STATUS
	RB(N)	BMM	NO REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2 
	RB(P)	BMM	NO READ REQUEST
	IFT	IDLELN=1 
	CF	A15,CLIDLE	CLEAR IDLE LINE ACTIVITY TIMER 
	XIF
	LDK	A1,2 
	ST	A1,DWTXST,A6	INDICATE RECEIVE MODE
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
	CF	A5,TRACK0	SEND ACK0	
	RB	BMM	RECEIVE TEXT
	EJECT
* 
*	CHARACTER NOT RECOGNIZED
* 
BMM900	CWK	A2,EOT 
	RF(NE)	BMM910	NOT EOT
	CM	DWTXST,A6	EOT: RESET TO CONTROL STATE 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	CF	A15,CLRTIM	CLEAR TIMER
	LDKL	A1,RCEOT	EOT RECEIVED 
	CF	A15,TENDIO
	RB	BMM 
BMM905	EQU	*	CHECK SST STATUS	
	LDR	A1,A1	ANY SST STATUS	
	RB(NZ)	BMM	YES RESYNC	 
BMM910	EQU	*		
	ANK	A2,/7F		 
	SUK	A2,/7F 
	RB(Z)	BMM	RESYNCHRONIZE ON /FF 
	RB	BMM100	READ NEXT CHAR 
	EJECT
* 
* 
*	TRANSMIT MODE, RECEPTION PART 
* 
* 
TRANSM	EQU	*
	LD	A1,DWTACK,A6	GET TRANSMIT STATUS
	ABI	TRFUNC,A1	SELECT FUNCTION
* 
* 
TRFUNC	DATA	TR200	0:ACK EXPECTED
	DATA	TR400	2: TTD SEQUENCE 
	DATA	TR420	4: WACK SEQUENCE
	DATA	TR100	6: BID SEQUENCE 
	DATA	TR200	8: ACK EXPECTED AFTER TRANSMIT TIME OUT 
	EJECT
* 
* 
*	BID SEQUENCE
* 
* 
TR100	EQU	* 
	CWK	A2,ENQ 
	RF(E)	TR140	ENQ RECEIVED 
	CWK	A2,DLE 
	RB(NE)	BMM900	NOT ACK OR WACK
	CF	A5,READP	READ SECOND CHAR 
	RB(NZ)	BMM910	PARITY ERROR 
	CWK	A2,ACK0
	RF(NE)	TR120	NOT PROPER ACK
	CF	A15,CLPTIM	ACK 0 : STOP PROCEDURE TIMER 
	ABL	WR110	START TRANSMISSION 
*   NOT ACK RECEIVED
TR120	CWK	A2,WACK 
	RB(NE)	BMM900	NOT WACK 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	ABL	TRENQB	BID AGAIN 
*   ENQ RECEIVED
TR140	EQU	*	. 
	CF	A15,CLPTIM	CLEAR BID-TIMER (PROCEDURE)
	LDKL	A1,RCRENQ	ENQ RECEIVED
	CF	A15,TENDIO	COMPLETE WRITE, RC BIT 11
	RB	BMM150	BID ACCEPTED 
	EJECT
* 
* 
*	TRANSMIT MODE: ACK EXPECTED 
* 
* 
TR200	CWK	A2,DLE
	RF(E)	TR250	DLE RECEIVED 
	CWK	A2,NAK 
	RB(NE)	BMM900	NOT ACK, WACK , RVI OR NAK 
	CF	A15,CLPTIM	NAK: STOP PROCEDURE TIMER
	ABL	TRTEXT	RETRANSMIT TEXT 
TR210	EQU	* 
	LDKL	A1,RCTHRU	THROUGHPUT ERROR
TR220	EQU	* 
	CF	A5,TREOT	SEND EOT 
	CM	DWTXST,A6	INDICATE CONTROL STATE
	LDR	A1,A4	RETURN CODE
	ABL	RXTEND	GO FOR COMPLETION OF REQUEST
*   DLE RECEIVED
TR250	CF	A5,READP 
	RB(NZ)	BMM910	PARITY ERROR 
	CW	A2,DWTRSN,A6	CHECK ACK
	RF(NE)	TR280	NOT PROPER ACK
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LDKL	A4,RCCMPL	RETURN CODE - OK
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A1,ECBBA,A8	GET BUFFER ADDRESS
	LC	A1,1,A1	GET CONTROL CHARACTER 
	ANK	A1,/FF 
	RB(Z)	TR220	ETX SENT: SEND EOT AND COMPLETE REQUEST
	LDKL	A4,RCCMPL	RETURN CODE - OK
	CF	A15,TENDIO	COMPLETE WRITE REQUEST, RC = 0 
TR255	CF	A5,CHALTI	STOP RECEIVER
TR260	LDR	A1,A6	DWT ADDRESS 
	CF	A15,SETIME	START TIMER
	DATA	TRTTD,TIMTTD
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	LDK	A1,2 
	ST	A1,DWTACK,A6	INDICATE TTD SEQUENCE
	ABL	TDISP	GO TO DISPATCHER 
*   NOT ACK RECEIVED
TR280	CWK	A2,RVI
	RF(E)	TR320	RVI RECEIVED 
	CWK	A2,WACK
	RF(E)	TR340	WACK RECEIVED
TR285	EQU	* 
	XRK	A2,EXCACK	CHANGE ACK TYPE
	CW	A2,DWTRSN,A6
	RB(NE)	BMM900	NO ACK AT ALL
TR290	EQU	* 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LD	A1,DWTACK,A6	ACK AFTER TRANSMIT TIME OUT? 
	RF(Z)	TR295	NO, IMPROPER ACK - SEND ENQ
	ABL	TRTEXT	YES, RETRANSMIT TEXT
TR295	EQU	* 
	ABL	TRENQ	IMPROPER ACK: SEND ENQ 
*   RVI RECEIVED
TR320	CF	A15,CLPTIM	STOP PROCEDURE TIMER
	LDKL	A1,RCRRVI	INDICATE RVI RECEIVED 
	CF	A15,TENDIO	COMPLETE WRITE REQUEST, RC BIT 10
	RB	TR255	GO TO TTD SEQUENCE
*   WACK RECEIVED 
TR340	CF	A15,CLPTIM	STOP PROCEDURE TIMER
	LDKL	A4,RCCMPL	RETURN CODE - OK
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A1,ECBBA,A8	GET BUFFER ADDRESS
	LC	A1,1,A1	GET CONTROL CHARACTER 
	ANK	A1,/FF 
	RB(Z)	TR220	ETX SENT: SEND EOT AND COMPLETE REQUEST
	LDKL	A1,RCCMPL	WACK RECEIVED; RETURN CODE - OK 
	CF	A15,TENDIO	COMPLETE REQUEST, RC = 0 
	LDK	A1,4 
	ST	A1,DWTACK,A6	INDICATE WACK SEQUENCE 
	ABL	TRENQ	SEND ENQ 
	EJECT
* 
* 
*	TTD SEQUENCE
* 
* 
TR400	EQU	* 
	CWK	A2,NAK 
	ABL(NE)	BMM900	NOT NAK 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
TR410	EQU	* 
	LD	A1,DWTST,A6	CHECK IF WRITE REQUEST
	RB(N)	TR260	NO REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,6 
	ABL(Z)	WR110	WRITE REQUEST 
	RB	TR260	NO WRITE REQUEST
	EJECT
* 
* 
*	WACK SEQUENCE 
* 
* 
TR420	EQU	* 
	CWK	A2,DLE 
	ABL(NE)	BMM900	NOT DLE 
	CF	A5,READP	READ CHAR AFTER DLE
	ABL(NZ)	BMM910	PARITY ERROR
	CWK	A2,WACK
	RF(NE)	TR440	NOT WACK
	CF	A15,CLPTIM	WACK: STOP PROCEDURE TIMER 
	CM	DWTENQ,A6	SEND ENQ:S AS LONG AS 
			WACK:S ARE RECEIVED
	IM	DWTWAC,A6	COUNT WACK:S
	LD	A1,DWTWAC,A6
	CWK	A1,WACCNT
	ABL(L)	TRENQ	NOT COUNT OUT; SEND ENQ 
	LDKL	A4,RCRTRY	COUNT OUT 
	ABL	TR220	SEND EOT AND COMPLETE REQUEST
TR440	CW	A2,DWTRSN,A6 
	RB(NE)	TR285	IMPROPER ACK
	CF	A15,CLPTIM	EXPECTED ACK: STOP TIMER 
	LDK	A1,2 
	ST	A1,DWTACK,A6	INDICATE NOW IN TTD SEQUENCE 
	RB	TR410	CHECK IF WRITE IS TO BE DONE
	EJECT
* 
* 
*	RECEIVE MODE
* 
* 
RECEIV	EQU	*
	CWK	A2,ENQ 
	ABL(E)	REC400	ENQ RECEIVED: SEND LAST RESPONSE 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	ABL(NE)	BMM900	NOT DLE 
	CF	A5,READP	READ CHAR
	XIF
	CWK	A2,SOH		 
	RF(E)	REC098	TREAT SOH AS STX	 
	CWK	A2,STX 
	ABL(NE)	BMM900	NOT STX 
REC098	EQU	*		
	LDK	A7,0	STX: RESET BCC
	LDK	A3,0 
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A4,ECBBA,A8	GET BUFFER ADDRESS
REC100	CF	A5,READP	READ CHAR
	ABL(NZ)	REC200	PARITY ERROR	 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RF(NE)	REC120	TRANSPARANT TEXT 
	CF	A5,READP	READ CONTROL CHAR. - DLE PRECEEDING
	XIF
	CWK	A2,SYN 
	RB(E)	REC100	DELETE SYN
	CWK	A2,ENQ 
	ABL(E)	REC220	TTD REC. SEND NAK	 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RF(E)	REC120	2:ND DLE RECEIVED 
	XIF
	LD	A1,DWTST,A6 
	ABL(N)	REC251	NO READ REQ	 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2 
	ABL(P)	REC251	NO READ REQ	 
	CF	A5,ACBPAR	ACC BLOCK PARITY	 
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	CWK	A2,GS	GROUP SEPARATOR	 
	RF(E)	REC140	YES	
	XIF			 
REC110	EQU	*		
	CWK	A2,US	UNIT SEPARATOR	
	RF(E)	REC14A	YES	
REC115	EQU	*		
	CWK	A2,ETB 
	RF(E)	REC150	ETB RECEIVED
	CWK	A2,ETX 
	RF(E)	REC160	ETX RECEIVED
	IFT	TRANSP=1 
	RF	REC200	ILLEGAL CHAR SEND NAK
REC120	EQU	*
	LD	A1,DWTST,A6 
	RF(N)	REC250	NO READ REQUEST 
	CF	A5,ACBPAR	ACCUMULATE CRC
	XIF
REC125	EQU	*		
	CW	A3,ECBRL,A8	CHECK LENGTH
	ABL(NL)	REC250	BUFFER OVERFLOW	
	IFT	TRANSP=0		 
	IFT	CODE=1 
	LC	A2,TASCII,A2	CONVERT FROM EBCDIC TO ASCII 
	XIF
	SCR	A2,A4	STORE CHAR IN BUFFER 
	ADK	A3,1	INCR COUNTER
	ADK	A4,1	INCR POINTER
	IFT	TRANSP=0		 
	IFT	COMPRS=0		 
	CWK	A2,GS	GROUP SEPARATOR	 
	RF(E)	REC140	YES SKIP TRANSL OF SPACE #	 
	XIF			 
	RB	REC100	NEXT CHAR
	IFT	TRANSP=0		 
*   GS RECEIVED DECOMPRESS SEQ : ...GS SC ... WHERE SC= NO OF SPACES	 
REC140	EQU	*		
	CF	A5,READP	READ SPACE COUNT CHAR	 
	RF(NZ)	REC200	PARITY ERROR	
	CWK	A2,SYN		 
	RB(E)	REC140	DELETE SYN IF IT IS THERE	
	CF	A5,ACBPAR	ACC BLOCK PARITY	 
	IFT	COMPRS=0		 
	CW	A3,ECBRL,A8	CHECK LENGTH	 
	RF(NL)	REC250	BUFFER OVERFLOW	 
	SCR	A2,A4	STORE CHAR TO USER	
	ADK	A3,1	INCR LENTGH	
	ADK	A4,1	INCR POINTER	 
	RB	REC100	GET NEXT CHAR	 
	XIF			 
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	LDR	A1,A2	CHECK CHAR FOR SPACE COUNT	
	ANK	A1,SPCCHB	SPACE COUNT CHAR BIT SET ?	
	RF(Z)	REC146	NO IGNORE SEQUENCE	 
	LDR	A1,A2	CHECK COUNT VALUE	 
	ANK	A1,SPCCHM	MASK OFF IRRELEVANT	 
	CWK	A1,SPCMIN	TOO SMALL ?	 
	RF(L)	REC146	YES IGNORE SEQUENCE	
	NGR	A1,A1	NO OF SPACES TO INSERT NEG	
	LDK	A2,SPCASC	ASCII SPACE TO INSERT	 
REC142	EQU	*		
	CW	A3,ECBRL,A8		 
	RF(NL)	REC250	BUFFER OVERFLOW	 
	SCR	A2,A4	STORE CHAR	
	ADK	A3,1	INCR COUNTER	 
	ADK	A4,1	INCR POINTER	 
	ADK	A1,1	INCR INSERT COUNT	
	RB(N)	REC142	INSERT MORE SPACES	 
	RB	REC100	END OF DECOMPRESS GET NEXT CHAR 	
*			SPACE COUNT CHAR INCORRECT	 
REC146	EQU	*	RESTORE CHARS	 
	CW	A3,ECBRL,A8		 
	RF(NL)	REC250	BUFFER OVERFLOW	 
	LDK	A1,GS		
	IFT	CODE=1	
	LC	A1,TASCII,A1	CONVERT EBCDIC TO ASCII	 
	XIF			 
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	SCR	A1,A4	RESTORE GS	
	ADK	A3,1	INCR COUNTER	 
	ADK	A4,1	INCR POINTER	 
	RB	REC125	STORE 2ND CHAR	
	XIF			 
*   US RECEIVED CHECK BCC/CRC		 
REC14A	EQU	*		
	IFT	IUSUSE=1		 
	IFT	CODE=1		 
	LC	A2,TASCII,A2	CONVERT EBCDIC TO ASCII	 
	XIF			 
	IFT	IUSUSE=1		 
	CW	A3,ECBRL,A8	END OF BUFFER	
	RF(NL)	REC253	BUFFER OVERFLOW	 
	SCR	A2,A4	STORE CHAR TO BUFFER	
	ADK	A3,1	INCR COUNTER	 
	ADK	A4,1	INCR POINTER	 
	XIF			 
	ST	A7,DWTIUS,A6	SAVE BCC/CRC	
	CF	A5,RDBPAR	READ BLOCK PARITY AND CHECK IT	 
	RF(NZ)	REC200	PARITY ERROR	
	LD	A7,DWTIUS,A6	RELOAD BCC/CRC	
REC14C	EQU	*		
	CF	A5,READP		
	RF(NZ)	REC200	PARITY ERROR	
	CWK	A2,SYN		 
	RB(E)	REC14C	DELETE SYNC	
	IFT	TRANSP=1		 
	CF	A5,READP	FIND DLE STX	
	CWK	A2,DLE		 
	RF(NE)	REC200	NO DLE STX ERROR THEN	 
	XIF			 
	CF	A5,ACBPAR	ACCUMULATE BLOCK PARITY	
	CWK	A2,STX		 
	ABL(E)	REC100	IGNORE STX	
	RB	REC115	HANDLE CHAR	 
*   ETB RECEIVED
REC150	EQU	*
	LDKL	A4,RCETB	PRESET FOR ETB RECEPTION 
	LDK	A1,2 
	ST	A1,DWTXST,A6	RESET RECEIVE MODE 
	RF	REC170
*   ETX RECEIVED
REC160	EQU	*
	LDKL	A4,RCETX	PRESET FOR ETX RECEPTION 
	LDK	A1,3 
	ST	A1,DWTXST,A6	SET RECEIVE MODE. ETX RECEIVED 
REC170	EQU	*
	CF	A5,RDBPAR	READ BLOCK PARITY=10
	RF(NZ)	REC220	BCC ERROR
	IFT	SALCUZ=1		 
	IFT	CODE=0		 
	CF	A5,CHALTI	HALT I/P TO CHECK PARITY	 
	ANK	A2,SBPARI	CHAR PARITY IN BLOCK	
	RF(NZ)	REC220	CHAR PARITY ERROR	 
	XIF			 
	ST	A3,ECBEL,A8	STORE EFFECTIVE LENGTH
	CF	A15,CLRTIM	STOP REQUEST TIMER IF RUNNING
	LDR	A1,A4	STORE RETURN CODE
	CF	A15,TENDIO	COMPLETE READ REQUEST
	LDK	A1,EXCACK
	XRS	A1,DWTRSN,A6	CHANGE ACK TO BE SENT 
REC190	EQU	*
	CF	A5,CHALTI	STOP RECEIVER 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START WACK TIMER 
	DATA	REC500,TIMWAC 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	LDK	A1,1 
	ST	A1,DWTACK,A6	SET WACK DELAY INDICATOR 
			WAIT FOR NEXT READ TO SEND ACK 
	ABL	TDISP	GO TO DISPATCHER 
*   PARITY ERROR FIND END OF BLOCK		
REC200	CF	A5,READP	PARITY ERROR RECEIVED
	RB(NZ)	REC200	PARITY ERROR 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RB(NE)	REC200	NOT DLE
	CF	A5,READ 
	XIF
	CWK	A2,US	UNIT SEPARATOR	
	RF(NE)	REC205	NO	
	CF	A5,RDBPAR	READ AND CHECK BLOCK PARITY	
	RB	REC200		
REC205	EQU	*		
	CWK	A2,ETB 
	RF(E)	REC210	ETB RECEIVED
	CWK	A2,ETX 
	RB(NE)	REC200	NOT ETB/ETX
REC210	EQU	*		
	CF	A5,RDBPAR	READ BLOCK PARITY	
REC220	CF	A5,TRNAK	SEND NAK 
	ABL	BMM
*   BUFFER OVERFLOW FIND END OF BLOCK		 
REC250	EQU	*
	CF	A5,READP	NO REQUEST/BUFFER OVERFLOW 
	RB(NZ)	REC250	PARITY ERROR 
REC251	EQU	*		
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RB(NE)	REC250	NOT DLE
	CF	A5,READ 
	XIF
	CWK	A2,US	UNIT SEPARATOR	
	RF(NE)	REC255	NO	
REC253	EQU	*		
	CF	A5,RDBPAR	READ AND SKIP BLOCK PARITY	 
	RB	REC250	GET NEXT CHAR	 
REC255	EQU	*		
	CWK	A2,ETB 
	RF(E)	REC260	ETB RECEIVED
	CWK	A2,ETX 
	RB(NE)	REC250	NOT ETB/ETX
REC260	EQU	*		
	CF	A5,RDBPAR	READ BLOCK PARITY	
	CF	A15,CLRTIM	CLEAR TIMER POINTER	 
	LDKL	A4,RCINCL	PRESET FOR BUFFER OVERFLOW
	ABL	TR220	SEND EOT AND COMPLETE REQUEST
	EJECT
* 
* 
*	ENQ RECEIVED: REPEAT LAST ACKNOWLEDGMENT
* 
* 
REC400	LD	A1,DWTLRS,A6	GET LAST RESPONSE
	CWK	A1,NAK 
	RB(E)	REC220	NAK SENT
	CWK	A1,RVI 
	RF(E)	REC420	RVI SENT
	CWK	A1,WACK
	RF(NE)	REC410	WACK NOT SENT:= ACK 0/1
	LD	A1,DWTST,A6 
	RB(N)	REC190	NOT YET ANY REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2 
	RF(Z)	REC410	READ REQUEST
	SUK	A1,/22-/02 
	ABL(Z)	RVI300	SEND RVI AND COMPLETE REQUEST
	RB	REC190
REC410	EQU	*
	CF	A5,TRACK	SEND ACK 0/1 
	ABL	BMM	WAIT FOR NEXT MESSAGE
REC420	EQU	*
	CF	A5,TRRVI	SEND RVI 
	ABL	BMM	CONTINUE RECEPTION 
* 
* 
	EJECT
* 
* 
*	WACK DELAY TIME OUT 
* 
* 
REC500	EQU	*
	LDR	A6,A1	RESTORE DWT ADDRESS
	CF	A15,CLPTIM	CLEEAR POINTER	
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
	CF	A5,TRWACK	SEND WACK 
	ABL	BMM	WAIT FOR ENQ 
	EJECT
* 
* 
*	TRANSMIT TEXT BLOCK 
* 
* 
TRTEXT	EQU	*
	IM	DWTRTR,A6	COUNT RETRANSMISSIONS 
	LD	A1,DWTRTR,A6
	CWK	A1,RTRCNT
	ABL(G)	TR210	COUNT OUT, SEND EOT 
	CF	A5,WRSYN	START TRANSMITTER AND SEND SYN 
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE
	XIF
	LDK	A2,STX 
	CF	A5,WRITEP	SEND STX
	LDK	A7,0	RESET BCC 
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LDK	A3,0	RESET CHAR COUNTER
	LD	A4,ECBBA,A8	LOAD BUFFER ADDRESS 
	ADK	A4,2	SKIP FIRST WORD IN BUFFER 
	LD	A3,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A3,1	SKIP FIRST BYTE 
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	CM	DWTCMP,A6	CLEAR SPACE COMPRESS CTNL 	 
	XIF			 
TRT100	EQU	*
	SUK	A3,1	DECREMENT LENGTH
	RF(NP)	TRT120	ALL TRANSMITTED
	LCR	A2,A4	GET CHAR FROM BUFFER 
	ADK	A4,1	INCR POINTER
	ANK	A2,/FF	MASK TO 8 BITS!!	=3 
	IFT	TRANSP=0 
	ANK	A2,/7F	REMOVE P-BIT	=3 
	CWK	A2,ETB 
	RF(G)	TRT110	NOT ETB IN TEXT 
	CWK	A2,SYN 
	RF(NL)	TRT105	REPLACE SYN BY SPACE 
	CWK	A2,/07	CHECK CODE
	RF(NL)	TRT110	CODE /07 OR GREATER IS OK
TRT105	EQU	*
	LDK	A2,/20	REPLACE INVALID CODE BY SPACE 
	XIF
TRT110	EQU	*
	IFT	TRANSP=0		 
	IFT	COMPRS=0		 
	CWK	A2,GS	GROUP SEPARATOR	 
	RF(E)	TRT117	YES	
	XIF			 
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	CWK	A2,SPCASC	ASCII SPACE	 
	RF(NE)	TRT112	NO  	
	IM	DWTCMP,A6	INCR SPACES	
	LD	A1,DWTCMP,A6	CHECK IF MAX NO OF SPACES	 
	CWK	A1,SPCMAX		
	RB(L)	TRT100	NOT MAX GET NEXT CHAR	
	CF	A5,TRCOMP	TRANSMIT COMPRESSED SPACES	 
	RB	TRT100	COMPRESSED MODE ENDED	 
TRT112	EQU	*	CHAR /= SPACE	 
	LD	A1,DWTCMP,A6	COMPRESS MODE ?	 
	RF(Z)	TRT114	NO	 
	CF	A5,TRCOMP	TRANSMIT COMPRESSED SPACES	 
TRT114	EQU	*	COMPRESS ENDED	
	XIF			 
	IFT	TRANSP=0		 
	IFT	CODE=1 
	LC	A2,TEBCDI,A2	CONVERT FROM ASCII TO EBCDIC 
	XIF
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RF(NE)	TRT115	NOT DLE
	CF	A5,WRBCCN	INSERT ONE DLE. NO CRC-CAL
	LDK	A2,DLE 
	XIF
TRT115	EQU	*
	CF	A5,WRITEP	SEND CHAR 
	RB	TRT100	NEXT CHAR
	IFT	TRANSP=0		 
	IFT	COMPRS=0		 
*   GROUP SEPARATOR, TRANSMIT SPACE COUNT	
TRT117	EQU	*		
	CF	A5,WRITEP	TRANSMIT GS	
	SUK	A3,1	DECR BUFF POINTER	
	RF(NP)	TRT120	END OF BUFFER	 
	LCR	A2,A4	GET CHAR	
	ADK	A4,1	INCR POINTER	 
	ANK	A2,/7F	CLEAN CHAR	 
	ORK	A2,/40	SET SPACE CHAR BIT	 
	CF	A5,WRITEP	TRANSMIT SPACE COUNT	 
	RB	TRT100	GET NEXT CHAR TO TRANSMIT	 
	XIF			 
TRT120	EQU	*
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE. NO CRC-CAL
	XIF
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A1,ECBBA,A8	GET BUFFER ADDRESS
	LC	A1,1,A1	GET CONTROL CHARACTER 
	LDK	A2,ETX 
	ANK	A1,/FF 
	RF(Z)	TRT130	WRITE LAST
	LDK	A2,ETB 
TRT130	EQU	*		
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	LD	A1,DWTCMP,A6	COMPRESS MODE STILL?	
	RF(Z)	TRT132	NO	 
	CF	A5,TRCOMP	TRANSMIT COMPRESSED SPACES	 
TRT132	EQU	*		
	XIF			 
	CF	A5,WRITEP	SEND ETB/ETX	 
	IFT	CODE=1 
	LDR	A3,A7	SAVE CRC 
	LDR	A2,A7
	ANK	A2,/FF 
	CF	A5,WRITE	SEND 1ST CRC CHARACTER 
	ECR	A7,A3	PREPARE FOR SENDING 2ND CRC CHAR 
	XIF
	LDR	A2,A7
	ANK	A2,/FF 
	CF	A5,OUTEND	TERMINATE OUTPUT
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START ACK TIMER
	DATA	TRT200,TIMACK 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	CM	DWTACK,A6	INDICATE ACK EXPECTED 
	ABL	BMM
	EJECT
* 
* 
*	TIME OUT ON TEXT TRANSMISSION 
* 
* 
TRT200	LDR	A6,A1	RESTORE DWT ADDRESS
	CF	A15,CLPTIM	CLEAR POINTER	 
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	LDK	A1,8 
	ST	A1,DWTACK,A6	INDICATE TRANSMIT TIME OUT 
	ABL	TRENQ	SEND ENQ 
	IFT	TRANSP=0		 
	IFT	COMPRS=1		 
	EJECT			 
*				 
*				 
*	SEND SPACES COMPRESSED ...... GS SC .... IF MIN NO OF SPACES 	
*				 
TRCOMP	EQU	*		
	LD	A1,DWTCMP,A6	GET NO OF SPACES IN STRING	
	SC	A2,DWTCMP,A6	SAVE NEXT CHAR IF ANY	 
	CWK	A1,SPCMIN	NO OF SPACES LESS THAN MIN	
	RF(NL)	TRCO20	NO	
TRCO10	EQU	*	 
	LDK	A2,SPACE	SEND APPROPRIATE SPACE	 
	CF	A5,WRITEP	SEND IT	
	LDK	A1,0	CLEAN FIRST	
	LC	A1,DWTCMP+1,A6	DECR SPACE COUNT	
	SUK	A1,1	ALL SPACES SENT	
	RF(Z)	TRCRTN	YES EXIT	 
	SC	A1,DWTCMP+1,A6	SAVE COUNT	
	RB	TRCO10	SEND NEXT SPACE	 
TRCO20	EQU	*	NO OF SPACES >MIN SEND: GS SC 	
	LDK	A2,GS		
	CF	A5,WRITEP	SEND GS	
	LDK	A2,0	CLEAN FIRST	
	LC	A2,DWTCMP+1,A6	NO OF SPACES 	 
	ORK	A2,SPCCHB	FORM SPACE COUNT CHAR	 
	CF	A5,WRITEP	SEND IT	
TRCRTN	EQU	*		
	LDK	A2,0	CLEAN FIRST	
	LC	A2,DWTCMP,A6	RELOAD SAVED CHAR	 
	CM	DWTCMP,A6	CLEAR COMPRESSED MODE	
	RTN	A5	RETURN TO CALLER 	
	XIF			 
	EJECT
* 
* 
*	SEND ENQ IN BID SEQUENCE
* 
* 
TRENQB	CF	A5,WRENQ	SEND ENQ 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START BID TIMER
	DATA	TRE200,TIMBID 
TRE100	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	ABL	BMM
* 
* 
*	BID TIME OUT
* 
* 
TRE200	LDR	A6,A1	RESTORE DWT ADDRESS
	CF	A15,CLPTIM	CLEAR TIMER LINK	
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	LD	A1,DWTENQ,A6
	CWK	A1,ENQCNT
	RB(L)	TRENQB	NOT COUNT OUT: BID AGAIN
TRE210	EQU	*
	LDKL A4,RCNCON	NO CONNECTION ESTABLISHED 
	ABL	TR220	SEND EOT 
	EJECT
* 
* 
*	SEND PROCEDURE ENQ
* 
* 
TRENQ	EQU	* 
	LD	A1,DWTENQ,A6	GET ENQ COUNTER
	CWK	A1,ENQCNT
	RB(G)	TRE210	ENQ COUNT OUT: SEND EOT 
	CF	A5,WRENQ	SEND ENQ 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START TIMER
	DATA	TRE300,TIMENQ 
	RB	TRE100
* 
* 
*	TIME OUT ON PROCEDURE ENQ 
* 
* 
TRE300	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	RB	TRENQ	SEND ENQ AGAIN
* 
* 
	EJECT
* 
* 
*	TRANSMIT TTD
* 
* 
TRTTD	EQU	* 
	LDR	A6,A1	RESTORE DWT ADDRESS
	CF	A15,CLPTIM	CLEAR TIMER LINK	
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	LDK	A1,3 
	ST	A1,DWTACK,A6	RESPONSE STATE = 3 DURING TTD - NAK
	CF	A5,WRSYN	START TRANSMITTER AND SEND SYN 
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE
	XIF
	LDK	A2,STX 
	CF	A5,WRITEP	SEND STX
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE
	XIF
	CF	A5,WRENQ5	SEND ENQ
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START TIMER
	DATA	TRT500,TIMENQ 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	ABL	BMM
* 
* 
*	NO RESPONSE ON TTD SEQUENCE 
* 
* 
TRT500	LDR	A6,A1	RESTORE DWT ADDRESS
	CF	A15,CLPTIM	CLEAR TIMER POINTER	 
	LDK	A5,DWTSTB	LOAD STACK BASE	 
	ADR	A5,A6
	ABL	TR410	CHECK IF WRITE REQUEST PRESENT 
	EJECT
* 
* 
*	WRSYN : START TRANSMITTER IF 2-WIRE LINE
*	        AND SEND SYN
* 
* 
WRSYN	EQU	* 
	CF	A5,CHALTI	HALT RECEIVER IF ACTIVE 
	CF	A5,CSYNCO	START O/P WITH SYNC DEF	
	LDR	A1,A6	DWT ADDRESS
	STR	A4,A15	SAVE A4 ON STACK
	CF	A15,SETIME	START MODEM TRANSMIT TIMER 
	DATA	WROUT,TIMWRT
	ST	A4,DWTMTI,A6	SAVE TIMWR POINTER 
	LDR*	A4,A15	GET A4 FROM STACK
	CF	A5,READ 	WAIT FOR INTERRUPT 
	LDK	A2,SYN 
	CF	A5,WRITE	SEND SYN 
	LDK	A2,SYN 
	CF	A5,WRITE	SEND SYN 
	LDK	A2,SYN 
	CF	A5,WRITE	SEND SYN 
	RTN	A5 
	EJECT
* 
* 
*	WROUT: TRANSMIT TIME OUT
*	       = MODEM ERROR
* 
* 
WROUT	EQU	* 
	LDR	A6,A1	RESTORE DWT ADDRESS
	CF	A15,CLMTIM	CLEAR TIMER POINTER	 
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	CF	A5,CDISC	DISCONNECT MODEM FROM LINE	
	CM	DWTSAV+4,A6	CLEAR STACK POINTER 
	ABL	RXMNOP	MODEM NOT OPERABLE
	EJECT
* 
* 
*	TREOT : SEND SINGLE EOT 
* 
* 
TREOT	EQU	* 
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
	LDK	A2,EOT 
OUTEND	EQU	*
	CF	A15,CLMTIM	STOP MODEM TRANSMIT TIMER
	CF	A5,WRITEP	SEND CHARACTER
	LDK	A2,PAD 
	CF	A5,WRITE	SEND PAD 
	LDK	A2,PAD 
	CF	A5,WRITE
	CF	A5,CHALTO	STOP O/P	 
	IFT	IDLELN=1 
	CF	A15,STIDLE	START IDLE LINE ACTIVITY TIMER 
	XIF
	RTN	A5 
* 
* 
*	WRENQ : SEND SINGLE ENQ 
* 
* 
WRENQ	EQU	* 
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
WRENQ5	EQU	*
	IM	DWTENQ,A6	COUNT ENQ:S SENT
	LDK	A2,ENQ 
	RB	OUTEND
	EJECT
* 
* 
*	TRNAK : SEND SINGLE NAK 
* 
* 
TRNAK	EQU	* 
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
	LDK	A2,NAK 
	ST	A2,DWTLRS,A6	SAVE LAST RESPONSE 
	RB	OUTEND
* 
	EJECT
* 
*	TRACK : SEND ACK-0 OR ACK-1 
* 
* 
TRACK	EQU	* 
	LD	A3,DWTRSN,A6	GET  PROPER ACK TO BE SENT 
TRA100	EQU	*
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
	LDK	A2,DLE 
	CF	A5,WRITE	SEND DLE 
	LDR	A2,A3
	ST	A2,DWTLRS,A6	SAVE LAST RESPONSE 
	RB	OUTEND
* 
* 
*	TRWACK : SEND WACK
* 
* 
TRWACK	EQU	*
	LDK	A3,WACK
	RB	TRA100
	EJECT
* 
* 
*	TRACK0 : SEND ACK 0 
* 
* 
TRACK0	LDK	A3,ACK0
	ST	A3,DWTRSN,A6	STORE PROPER ACK 
	RB	TRA100
* 
* 
*	TRRVI : SEND RVI
* 
* 
TRRVI	LDK	A3,RVI
	RB	TRA100
	EJECT			 
*				 
*				 
*	CINIT : INITIALIZE LINE CONTROL UNIT INFO	
*				 
CINIT	EQU	*		 
	CM	DWTLCI,A6	CLEAR I/P ACTIVE IND	 
	CM	DWTLCO,A6	CLEAR OUTP. ACT. FLAG 
	ADKL	A15,4	INCREMENT STACK POINTER	
	ABR*	A15	RETURN TO CALLER	 
	EJECT
* 
*	CSYNCI : SEND SYNC PATTERN FOR INPUT DATA	
* 
* 
CSYNCI	EQU	*		
	LD	A2,PFPOST		=1 
	ABL(NZ)	TDISP	WAIT FOR POWER UP	=1 
	CF	A5,CHALTI	STOP I/P
	ST	A5,DWTLCI,A6	SET I/P ACT. IND.	=3 
	ADK	A5,4	ADD RETURN OFFSET FOR ABR 
	IFT	SALCUZ=1		 
	LDK	A2,PARITY	CHAR PARITY FUNCTION FOR LC	 
	EX	DWTCSI,A6	STARTY I/O	 
	LDK	A2,SYN	SYNC PATTERN	 
	EX	DWTOSI,A6	SEND I/P SYNC PATTERN TO LC	
	XIF			 
	IFF	SALCUZ=1 
	LDKL	A2,CBCRSP+SYN	SYNC PATTERN	 
	EX	DWTCSI,A6	SEND I/P SYNC PATTERN TO LC	
	XIF	 
	ABR*	A5	RETURN TO CALLER WITH CR SET	
*				 
*				 
*	CSYNCO : START TRANSMITTER WITH SYNC DEF	 
*				 
CSYNCO	EQU	*		
	LD	A2,PFPOST		=1 
	ABL(NZ)	TDISP	WAIT FOR POWER UP	=1 
	IFT	SALCUZ=1		 
	LDK	A2,PARITY	CHAR PARITY TYPE CHECK BY CU	
	EX	DWTCSU,A6	CIO START	
	RF(A)	CSYNC2	ACCEPTED ->	
	EX	DWTSSU,A6	TRY TO READ STATUS THEN	
	RF(A)	CSYNC1	ACCEPTED ->	
	ABL	BMM	NOT ACCEPTED TIMEOUT REQUEST	
CSYNC1	EQU	*		
	LDK	A2,PARITY	RETRY CIO	 
	EX	DWTCSU,A6	DO IT	
CSYNC2	EQU	*		
	LDK	A2,SYN	SYNC PATTERN	 
	EX	DWTOSU,A6	DEFINE SYNC	
	ST	A5,DWTLCO,A6	SET OUTP. ACT. FLAG
	XIF			 
	IFF	SALCUZ=1		 
	EX	DWTCSU,A6	START TRANSMITTER	
	XIF			 
	RTN	A5		 
	EJECT
* 
* 
*	CHALTI : HALT INPUT CHANNEL 
* 
* 
CHALTI	EQU	*		
	IFT	SALCUZ=1		 
	LDK	A2,CBSTOP	STOP FUNCTION BIT	 
	XIF			 
	EX	DWTCHI,A6	HALT I/P
	CM	DWTLCI,A6	CLEAR I/P ACTIVE IND	 
	EX	DWTSSI,A6	SST INPUT 
** LOGG 
	IFF	LOGG=0		 
	CF	A5,LOGSST	LOGG I/P SST	 
	XIF			 
	ADK	A5,4	INCR STACK POINTE	
	ABR*	A5	RETURN TO CALLER	
*				 
*				 
*	CHALTO : HALT O/P CHANNNEL		
*				 
CHALTO	EQU	*		
	IFT	SALCUZ=1		 
	LDK	A2,CBSTOP	STOP FUNCTION	 
	EX	DWTCHU,A6	STOP CU	
	LD	A2,DWTLCO,A6	.
	RF(Z)	CHLTO1	OUTP. NOT ACTIVE
	CM	DWTLCO,A6	CLEAR OUTP. ACT. FLAG 
	CF	A5,READ	WAIT FOR INTERRUPT	 
CHLTO1	EQU	*	.	=5 
	XIF			 
	IFF	SALCUZ=1		 
	EX	DWTCHU,A6	HALT CU	
	XIF			 
	ADK	A5,4	INCREMENT STACK POINTER	
	EX	DWTSSU,A6	GET STATUS	 
	ABR*	A5	RETURN TO CALLER	
	EJECT			 
*				 
*				 
*	CCALL : ACTIVATE CU TO ACCEPT CALL	 
*				 
CCALL	EQU	*		 
	LD	A2,PFPOST		=1 
	ABL(NZ)	TDISP	WAIT FOR POWER UP	=1 
	CM	DWTLCI,A6	CLEAR I/P ACTIVE FLAG	
	ADK	A5,4	INCREMENT STACK POINTER	
	IFT	SALCUZ=1		 
	LDK	A2,CBDISC		
	EX	DWTCHI,A6		 
	XIF			 
	IFF	SALCUZ=1		 
	LDK	A2,0		 
	EX	DWTCSI,A6		 
	XIF			 
	ABR*	A5		
*				 
*				 
*	CDISC : DISCONNECT MODEM FROM  LINE	
*				 
CDISC	EQU	*		 
	CM	DWTLCI,A6	CLEAR I/P ACTIVE FLAG	
	ADK	A5,4	INCREMENT STACK POINTER	
	IFT	SALCUZ=1		 
	LDK	A2,CBDISC		
	EX	DWTCHI,A6		 
	EX	DWTCHU,A6	DISC O/P	 
	XIF			 
	IFF	SALCUZ=1		 
	EX	DWTCHI,A6	HALT I/P
	EX	DWTSSI,A6	. 
	EX	DWTCHU,A6	HALT O/P
	EX	DWTSSU,A6	. 
	LDK	A2,0		 
	EX	DWTCSI,A6		 
	XIF			 
	ABR*	A5	RETURN TO CALLER	
	EJECT			 
* 
* 
*	CLEAR PROCEDURE TIMER IF RUNNING
* 
* 
CLPTIM	LD	A1,DWTPTI,A6	GET TIMER POINTER
	RF(Z)	CLPRTN	NO TIMER RUNNING
	CM*	DWTPTI,A6	STOP TIMER 
	CM	DWTPTI,A6	CLEAR TIMER POINTER 
CLPRTN	EQU	*
	IFT	CPU852=1 
	ADKL	A15,4 
	ABR*	A15	RETURN
	XIF
	IFT	CPU852=0 
	RTN	A15
	XIF
* 
* 
*	CLEAR REQUEST TIMER IF RUNNING
* 
* 
CLRTIM	EQU	*	=2 
	LD	A2,DWTRTI,A6	GET TIMER POINTER	=2 
	RB(Z)	CLPRTN	NO TIMER RUNNING
	CM*	DWTRTI,A6	STOP TIMER 
	CM	DWTRTI,A6	CLEAR TIMER POINTER 
	RB	CLPRTN
* 
	EJECT
* 
* 
*	CLEAR MODEM TRANSMIT TIMER IF RUNNING 
* 
* 
CLMTIM	EQU	*
	LD	A1,DWTMTI,A6	GET TIMER POINTER
	RB(Z)	CLPRTN	NO TIMER RUNNING
	CM*	DWTMTI,A6	STOP TIMER 
	CM	DWTMTI,A6	CLEAR TIMER POINTER 
	RB	CLPRTN
	IFT	IDLELN=1 
	EJECT
************************************************************* 
* 
* LINE ACTIVITY:
*      A TIMER IS STARTED WHENEVER THE LINE IS IDLE (NOT ACTIVE)
*      WHEN TIMEOUT, THE RTS (REQUEST TO SEND) IS RISED A MOMENT
*      ENOUGH TO PREVENT THE MODEM TO DISCONNECT THR LINE 
* 
**************************************************************
* 
* START IDLE TIMER
* 
STIDLE	EQU	*
	LDR	A1,A6
	CF	A15,SETIME	SET IDLE TIMER 
	DATA	TRIDLE,TIMIDL 
	ST	A4,DWTITI	SAVE TIMER BLOCK POINTER
	RTN	A15
* 
* IDLE TIMOUT - STOP RECEIVER - RISE RTS - START RECEIVER 
* 
TRIDLE	EQU	*
	LDR	A6,A1	RELOAD DWT-ADDRESS 
	CF	A15,CLIDLE	CLEAR IDLE TIMER 
	CF	A15,STIDLE	RE-START IDLE TIMER
	CF	A5,CHALTI	HALT RECEIVER	=6
	CF	A5,CSYNCO	* RISE RTS	=6 
	CF	A5,CHALTO	* JUST A MOMENT	=6
	CF	A5,CSYNCI	RE-START RECEIVER	=6
	ABL	EXDISP 
* 
* CLEAR IDLE TIMER
* 
CLIDLE	EQU	*
	LD	A1,DWTITI,A6	GET TIMER BLOCK POINTER
	RF(Z)	CLIRTN	NOT RUNNING 
	CM*	DWTITI,A6	* CLEAR TIME & 
	CM	DWTITI,A6	* BLOCK POINTER 
CLIRTN	EQU	*
	RTN	A15
	XIF
	EJECT
* 
* 
*	SST SEQUENCE FOR INPUT CHANNEL
* 
* 
SSTIN	EQU	* 
	LD	A3,DWTSAV,A6	RELOAD REGS	 
	LD	A4,DWTSAV+2,A6		
	LD	A5,DWTSAV+4,A6		
	LD	A7,DWTSAV+6,A6		
	LD	A8,DWTSAV+8,A6		
	EX	DWTSSI,A6	SST INSTRUCTION 
	RF(NA)	SST205	NOT ACCEPTED	
**LOGG
	IFF	LOGG=0 
				
	CF	A5,LOGSST	LOGG INPUT SST
	XIF
	LDR	A1,A2
	ANK	A1,SBERR+SBCALL	ERROR OR CALL BITS SET ?	
	RF(Z)	SST204	MODEM WORKING RETURN TO CALLER	 
	LDR	A1,A2	RELOAD SST STATUS
	ANK	A1,SBCALL	INCOMING CALL ?
	RF(Z)	SST150	NOT CALLING INDICATOR 
	LD	A1,DWTST,A6	CALLING INDICATOR 
	ABL(N)	BMM	NO REQUEST
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,/31 
	ABL(NZ)	BMM	NOT ACCEPT CALL REQUEST
	ABL	ACC150	CALL RECEIVED - COMPLETE REQ. 
SST150	EQU	*
	IFT	SALCUZ=1		 
	IFT	CODE=0		 
	LDR	A1,A2	MOVE STATUS	 
	ANK	A1,SBPARI	CHAR PARITY ERROR ?	 
	RF(NZ)	SST205	YES	 
	XIF			 
	LDR	A1,A2	MOVE STATUS	 
	ANK	A1,SBNOOP		
	RF(NZ)	SST200	YES	 
	LD	A1,DWTLCI,A6	CARRIER OFF: I/P ACTIVE ?	 
	ABL(Z)	EXDISP	NO IGNORE CARRIER IF 	 
			I/P IS NOT ACTIVE	 
	RF(P)	SST205	YES BUT NO DATA YET	
SST200	EQU	*		
	CM	DWTLCI,A6	CLEAR I/P ACTIVE FLAG	
	CM	DWTSAV+4,A6	CLEAR STACK POINTER 
	ABL	RXMNOP	MODEM NOT OPERABLE	=2 
SST204	EQU	*		
	LDKL	A2,/100	IND SST STATUS	Z
SST205	EQU	*		
	LDR	A5,A5	.
	ABL(Z)	TDISP	IGNORE INT. IF STACKP. CLEARED
	ADK	A5,4	INCREMENT RETURN OFFSET	
	LDR	A1,A2	SET CR FOR CALLER	 
	ABR*	A5	RETURN TO CALLER WITH CR SET	
	EJECT
* 
* 
*	WRITEP : GENERATE PARITY AND SEND CHARACTER 
* 
* 
WRITEP	EQU	*
	IFT	CODE+SALCUZ=0		
	ECR	A1,A2
	ORK	A2,/80 
WRP100	EQU	*
	SLL	A1,1 
	RB(P)	WRP100 
	RF(Z)	WRP110 
	XRK	A2,/80 
	RB	WRP100
WRP110	EQU	*
	XIF
	RF	WRITE 
* 
* 
*	WRITE : TRANSMIT ONE CHARACTER
* 
* 
WRITE	EQU	* 
	IFT	CODE=0 
	XRR	A7,A2	ACCUMULATE BCC 
	XIF
	IFT	CODE=1 
	CF	A5,ACBPAR	ACCUMULATE CRC
	XIF
WRBCCN	EQU	*
	EX	DWTOTR,A6	PERFORM OTR INSTRUCTION 
**LOGG
	IFF	LOGG=0 
	RF(NA)	WRIT10
	CF	A5,LOGOUT	LOGG OUTPUT CHARACTER 
	XIF
WRIT10	EQU	*
	RF	READ	SAVE REGISTERS 
	EJECT
* 
* 
*	READP : READ CHARACTER AND CHECK PARITY 
*	        ON PARITY ERROR CR NOT ZERO 
* 
* 
READP	EQU	* 
	CF	A5,READ	READ CHARACTER
	LDR	A1,A1	ANY SST STATUS	
	RF(NZ)	REPEXI	YES	 
	IFT	CODE+SALCUZ=0		
	ECR	A3,A2
	LDR	A1,A2
REP10	EQU	* 
	SLL	A3,1 
	RF(Z)	REP20
	RB(NN)	REP10 
	XRK	A1,/80 
	RB	REP10 
REP20	EQU	* 
	LD	A3,DWTSAV,A6	RESTORE A3 
	XRK	A1,/80 
	ANK	A2,/7F 
	ANK	A1,/80 
	XIF
	IFT	SALCUZ=1		 
	IFT	CODE=0		 
	ANK	A1,0	SET CR AS FROM READP	 
	XIF			 
	IFT	CODE=1 
	ANK	A1,0	SET CR TO ZERO

	XIF
REPEXI	EQU	*		
	ADK	A5,4	INCR STACK POINTER	 
	LDR	A1,A1	SET CR	
	ABR*	A5
	EJECT
* 
*	READ : SAVE REGISTER A3-A5,A7,A8
*	       GO TO DISPATCHER 
* 
READ	EQU	*
	ST	A3,DWTSAV,A6
	ST	A4,DWTSAV+2,A6
	ST	A5,DWTSAV+4,A6
	ST	A7,DWTSAV+6,A6
	ST	A8,DWTSAV+8,A6
	ABL	EXDISP	GO TO DISPATCHER
	IFT	CODE=0		 
	EJECT			 
*				 
*				 
*	CALCULATION OF BCC		
*	A2= CHARACTER||=4 
*	A7= ACCUMULATED CRC		 
ACBPAR	EQU	*		
	XRR	A7,A2	ACC CHAR 	 
	RTN	A5		 
*				 
*				 
*	READ AND CHECK BCC		
*				 
RDBPAR	EQU	*		
	CF	A5,READ	READ CHAR	
	RF(NZ)	RDBP01	PARITY ERROR	
	ADK	A5,4	INCR RETURN STACK POINTER	
	XRR	A7,A2		
	ANK	A7,/7F		 
	RF	RDBP02		
RDBP01	EQU	*	PARITY ERROR	
	ADK	A5,4	SET CR AND INCR STACK POINT	
RDBP02	EQU	*		
	ABR*	A5	RETURN TO CALLER	
	XIF			 
	IFT	CODE=1 
	EJECT
* 
* 
*	CALCULATION OF CRC
* 
*	A2 = CHARACTER
*	A7 = ACCUMULATED CRC
* 
* 
ACBPAR	EQU	*		
	ST	A1,CRCSAV 
	ST	A2,CRCSAV+2 
	ST	A3,CRCSAV+4 
	LDK	A1,8 
CRC100	LDR	A3,A7
	SRL	A7,1 
	XRR	A3,A2
	SRL	A2,1 
	ANK	A3,1 
	RF(Z)	CRC110 
	XRKL	A7,/A001
CRC110	SUK	A1,1 
	RB(NZ)	CRC100
	LD	A1,CRCSAV 
	LD	A2,CRCSAV+2 
	LD	A3,CRCSAV+4 
	RTN	A5 
CRCSAV	RES	3
	EJECT
* 
* 
*	READ AND CHECK CRC
* 
*	ON RETURN CR=0 IF CRC IS OK 
* 
* 
RDBPAR	EQU	*		
	CF	A5,READ	READ 1ST CRC CHAR 
	XRR	A7,A2	CHECK WITH ACCUMULATED 
	CF	A5,READ	READ 2ND CRC CHAR 
	ECR	A7,A7
	ADK	A5,4 
	XRR	A2,A7	CHECK CRC AND SET CR 
	ABR*	A5	RETURN 
	XIF
	EJECT
******************************************************* 
* 
*	INTERRUPT HANDLER , CHLC RECEIVER 
* 
******************************************************* 
* 
IHLCIN	EQU	*
IH1701	EQU	*
	ST	P,INTSAV
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	XIF
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1- A8
	XIF
	LDKL	A6,DW1701	LOAD DWT ADDRESS
	INR	A2,0,DAMI01	GET CHARACTER FROM LINR
IHI100	EQU	*
	ABL(NA)	SSTIN
**LOGG
	IFF	LOGG=0 
	LD	A5,DWTSAV+4,A6
	CF	A5,LOGIN	LOGG INPUT CHARACTER 
	XIF
	LDR	A1,A2	MOVE CHAR TO FORM FLAG	
	ORKL	A1,/FF00	SET FLAG FOR CARRIER ON	 
	ST	A1,DWTLCI,A6	SET I/P CARR FLAG	 
IHI110	EQU	*
	LD	A3,DWTSAV,A6
	LD	A4,DWTSAV+2,A6
	LD	A7,DWTSAV+6,A6
	LD	A8,DWTSAV+8,A6
	LD	A5,DWTSAV+4,A6	RELOAD STACK POINTER 
	ABL(Z)	TDISP	IGNORE INT IF CLEARED 
	ADK	A5,4	INCR STACK POINT
	LDKL	A1,0	SET CR=0 
	ABR*	A5	RETURN WITH CR 
	IFF	NLINE=1
	EJECT
* 
* 
* 
IH1703	EQU	*
	ST	P,INTSAV
	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	LDKL	A6,DW1702	LOAD DWT ADDRESS
	INR	A2,0,DAMI02	GET CHARACTER FROM LINE
	RB	IHI100
	IFF	NLINE=2
* 
* 
* 
IH1705	EQU	*
	ST	P,INTSAV
	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	LDKL	A6,DW1703	LOAD DWT ADDRESS
	INR	A2,0,DAMI03	GET CHARACTER FROM LINE
	RB	IHI100
	IFF	NLINE=3
* 
* 
* 
IH1707	EQU	*
	ST	P,INTSAV

	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	LDKL	A6,DW1704	LOAD DWT ADDRESS
	INR	A2,0,DAMI04	GET CHARACTER FROM LINE
	RB	IHI100
	XIF
	EJECT
******************************************************* 
* 
*	INTERRUPT HANDLER , CHLC TRANSMITTER
* 
******************************************************* 
* 
* 
* 
IHLCUT	EQU	*
IH1702	EQU	*
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE REGISTERSA 
	XIF
	IFT	CPU852=0 
	MSR	8,A15	SAVE REGISTERS 
	XIF
	LDKL	A6,DW1701	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	IFF	NLINE=1
	EJECT
* 
* 
* 
IH1704	EQU	*
	ST	P,INTSAV
	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	LDKL	A6,DW1702	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	IFF	NLINE=2
* 
* 
* 
IH1706	EQU	*
	ST	P,INTSAV
	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	LDKL	A6,DW1703	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	IFF	NLINE=3
* 
* 
* 
IH1708	EQU	*
	ST	P,INTSAV
	CF	A15,SAVE8	SAVE A1-A8 ON A15 STACK 
	LDKL	A6,DW1704	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	XIF
	EJECT
* 
*	ILLEGAL INTERRUPTS
* 
	IFF	NLINE=4
IH1707	EQU	*
IH1708	EQU	*
	IFF	NLINE=3
IH1705	EQU	*
IH1706	EQU	*
	IFF	NLINE=2
IH1703	EQU	*
IH1704	EQU	*
	XIF
	ST	P,INTSAV
	LDK	A1,/5	INDICATE ILLEGAL INTERRUPT 
	ABL	ILLINT	ILLEGAL INTERRUPT ROUTINE 
	EJECT
* 
* 
*	DCTAB: LINE CONFIGURATION TABLE 
* 
* 
DCTAB	EQU	* 
	DATA	DCTABE-DCTAB	TABLE LENGTH 
	DATA	DW1701
	IFF	NLINE=1
	DATA	DW1702
	IFF	NLINE=2
	DATA	DW1703
	IFF	NLINE=3
	DATA	DW1704
	XIF
DCTABE	EQU	*
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 01 
* 
* 
DW1701	EQU	*
	DATA	DAMU01	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	IFT	MMUPAG=1 
	DATA	0	USER ECB
	DATA	ECBDC1	MMU ECB
	XIF
DWTTIM	EQU	*-DW1701	REQUEST TIMER VALUE 
	DATA	0 
DWTRTI	EQU	*-DW1701 
	DATA	0	REQUEST TIMER POINTER 
DWTPTI	EQU	*-DW1701 
	DATA	0	PROCEDURE TIMER POINTER 
DWTMTI	EQU	*-DW1701 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	IFT	IDLELN=1 
DWTITI	EQU	*
	DATA	0	IDLE ACT. TIMER POINTER 
	XIF
DWTSAV	EQU	*-DW1701 
	RES	5	SAVE AREA FOR A3-A5,A7,A8
DWTXST	EQU	*-DW1701 
	DATA	0	PROCEDURE STATUS: 0= CONTROL STATE
			                  1= TRANSMISSION MODE 
			                  2= RECEIVE MODE
			                  3= RECEIVE MODE, ETX REC.
DWTACK	EQU	*-DW1701 
	DATA	0	RESPONSE STATE
			0= ACK EXPECTED
			1= WACK SEQ. DELAY (REC) 
			2= TTD SEQ. DELAY (TRANS)
			3= TTD SEQ. WAIT FOR NAK (TRANS) 
			4= WACK SEQ. (TRANS) 
			6= BID SEQ.
			8= ACK EXP. AFTER TRANSMIT TIME OUT
DWTENQ	EQU	*-DW1701 
	DATA	0	ENQ COUNTER 
DWTRSN	EQU	*-DW1701 
	DATA	0	ACK TO BE SENT/RECEIVED 
DWTWAC	EQU	*-DW1701 
	DATA	0	WACK COUNTER
DWTRTR	EQU	*-DW1701 
	DATA	0	RETRANSMISSION COUNTER
DWTLRS	EQU	*-DW1701 
	DATA	NAK	LAST SENT RESPONSE
DWTIUS	EQU	*-DW1701		 
	DATA	0	BCC/CRC SAVE	 
	IFT	COMPRS=1		 
DWTCMP	EQU	*-DW1701		 
	DATA	0	SPACE COMPRESS WORK	
	XIF			 
	RES	10	A5 STACK
DWTSTB	EQU	*-DW1701-2	STACK BASE
DWTLCI	EQU	*-DW1701		 
	DATA	0	LINE CU I/P ACTIVE IND	 
DWTLCO	EQU	*-DW1701	. 
	DATA	0	OUTP. ACT. IND. 
DWTOTR	EQU	*-DW1701 
	OTR	A2,0,DAMU01
DWTSSI	EQU	*-DW1701 
	SST	A2,DAMI01
DWTSSU	EQU	*-DW1701 
	SST	A2,DAMU01
DWTCSI	EQU	*-DW1701 
	CIO	A2,1,DAMI01
DWTCSU	EQU	*-DW1701 
	CIO	A2,1,DAMU01
DWTCHI	EQU	*-DW1701 
	CIO	A2,0,DAMI01
DWTCHU	EQU	*-DW1701 
	CIO	A2,0,DAMU01
	IFT	SALCUZ=1		 
DWTOSI	EQU	*-DW1701		 
	OTR	A2,1,DAMI01		
DWTOSU	EQU	*-DW1701		 
	OTR	A2,1,DAMU01		
	XIF			 
	IFT	MMUPAG=1 
ECBDC1	EQU	*
	DATA	0 
	DATA	DCBUF1
	DATA	0,0,0,0 
DCBUF1	RES	TBUFL+1
	XIF
**LOGG
	IFF	LOGG=0 
LOGPNT	EQU	*-DW1701 
	DATA	LGST01
LOGSTA	EQU	*-DW1701 
LGST01	EQU	*
	RES	LOGG 
LOGEND	EQU	*-DW1701-4 
SAVE2	EQU	*-DW1701
	DATA	0 
SAVE3	EQU	*-DW1701
	DATA	0 
	XIF
* 
	IFF	NLINE=1
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 02 
* 
* 
DW1702	EQU	*
	DATA	DAMU02	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	IFT	MMUPAG=1 
	DATA	0	USER ECB
	DATA	ECBDC2	MMU ECB
	XIF
	IFF	NLINE=1		
	DATA	0	REQUEST TIMER VALUE 
	DATA	0	REQUEST TIMER POINTER 
	DATA	0	PROCEDURE TIMER POINTER 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	IFT	IDLELN=1 
	DATA	0	IDLE ACT. TIMER POINTER 
	XIF
	IFF	NLINE=1
	RES	5	SAVE AREA FOR A3-A5,A7,A8
	DATA	0	PROCEDURE STATUS
	DATA	0	RESPONSE STATUS 
	DATA	0	ENQ COUNTER 
	DATA	0	ACK TO BE SENT/RECEIVED 
	DATA	0	WACK COUNTER
	DATA	0	RETRANSMISSION COUNTER
	DATA	NAK	LAST SENT RESPONSE
	DATA	0	BCC/CRC SAVE AREA	
	IFT	COMPRS=1		 
	DATA	0	SPACE COMPRESS WORK AREA	 
	XIF			 
	IFF	NLINE=1		
	RES	10	A5 STACK
	DATA	0	LINE CU I/P ACTIVE IND	 
	DATA	0	OUTP. ACT. IND. 
	OTR	A2,0,DAMU02
	SST	A2,DAMI02
	SST	A2,DAMU02
	CIO	A2,1,DAMI02
	CIO	A2,1,DAMU02
	CIO	A2,0,DAMI02
	CIO	A2,0,DAMU02
	IFT	SALCUZ=1		 
	OTR	A2,1,DAMI02		
	OTR	A2,1,DAMI02		
	XIF			 
	IFF	NLINE=1		
	IFT	MMUPAG=1 
ECBDC2	EQU	*
	DATA	0 
	DATA	DCBUF2
	DATA	0,0,0,0 
DCBUF2	RES	TBUFL+1
	XIF
	IFF	NLINE=1		
**LOGG
	IFF	LOGG=0 
	DATA	LGST02
LGST02	EQU	*
	RES	LOGG 
	DATA	0 
	DATA	0 
	XIF
* 
	IFF	NLINE=1
	IFF	NLINE=2
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 03 
* 
* 
DW1703	EQU	*
	DATA	DAMU03	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	IFT	MMUPAG=1 
	DATA	0	USER ECB
	DATA	ECBDC3	MMU ECB
	XIF
	IFF	NLINE=1		
	IFF	NLINE=2		
	DATA	0	SET REQUEST TIMER VALUE 
	DATA	0	REQUEST TIMER POINTER 
	DATA	0	PROCEDURE TIMER POINTER 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	IFT	IDLELN=1 
	DATA	0	IDLE ACT. TIMER POINTER 
	XIF
	IFF	NLINE=1
	IFF	NLINE=2
	RES	5	SAVE AREA FOR A3-A5,A7,A8
	DATA	0	PROCEDURE STATUS
	DATA	0	RESPONSE STATUS 
	DATA	0	ENQ COUNTER 
	DATA	0	ACK TO BE SENT/RECEIVED 
	DATA	0	WACK COUNTER
	DATA	0	RETRANSMISSION COUNTER
	DATA	NAK	LAST SENT RESPONSE
	DATA	0	BCC/CRC SAVE AREA	
	IFT	COMPRS=1		 
	DATA	0	SPACE COMPRESS WORK AREA	 
	XIF			 
	IFF	NLINE=1		
	IFF	NLINE=2		
	RES	10	A5 STACK
	DATA	0	LINE CU I/P ACTIVE IND	 
	DATA	0	OUTP. ACT. IND. 
	OTR	A2,0,DAMU03
	SST	A2,DAMI03
	SST	A2,DAMU03
	CIO	A2,1,DAMI03
	CIO	A2,1,DAMU03
	CIO	A2,0,DAMI03
	CIO	A2,0,DAMU03
	IFT	SALCUZ=1		 
	OTR	A2,1,DAMI03		
	OTR	A2,1,DAMU03		
	XIF			 
	IFF	NLINE=1		
	IFF	NLINE=2		
	IFT	MMUPAG=1 
ECBDC3	EQU	*
	DATA	0 
	DATA	DCBUF3	 
	DATA	0,0,0,0 
DCBUF3	RES	TBUFL+1
	XIF
	IFF	NLINE=1		
	IFF	NLINE=2		
**LOGG
	IFF	LOGG=0 
	DATA	LGST03
LGST03	EQU	*
	RES	LOGG 
	DATA	0 
	DATA	0 
	XIF
* 
	IFF	NLINE=1
	IFF	NLINE=2
	IFF	NLINE=3
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 04 
* 
* 
DW1704	EQU	*
	DATA	DAMU04	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	IFT	MMUPAG=1 
	DATA	0	USER ECB
	DATA	ECBDC4
	XIF
	IFF	NLINE=1		
	IFF	NLINE=2		
	IFF	NLINE=3		
	DATA	0	SET REQUEST TIMER VALUE 
	DATA	0	REQUEST TIMER POINTER 
	DATA	0	PROCEDURE TIMER POINTER 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	IFT	IDLELN=1 
	DATA	0	IDLE ACT. TIMER POINTER 
	XIF
	IFF	NLINE=1
	IFF	NLINE=2
	IFF	NLINE=3
	RES	5	SAVE AREA FOR A3-A5,A7,A8
	DATA	0	PROCEDURE STATUS
	DATA	0	RESPONSE STATUS 
	DATA	0	ENQ COUNTER 
	DATA	0	ACK TO BE SENT/RECEIVED 
	DATA	0	WACK COUNTER
	DATA	0	RETRANSMISSION COUNTER
	DATA	NAK	LAST SENT RESPONSE
	DATA	0	BCC/CRC SAVE AREA	
	IFT	COMPRS=1		 
	DATA	0	SPACE COMPRESS WORK AREA	 
	XIF			 
	IFF	NLINE=1		
	IFF	NLINE=2		
	IFF	NLINE=3		
	RES	10	A5 STACK
	DATA	0	LINE CU I/P ACTIVE IND	 
	DATA	0	OUTP. ACT. IND. 
	OTR	A2,0,DAMU04
	SST	A2,DAMI04
	SST	A2,DAMU04
	CIO	A2,1,DAMI04
	CIO	A2,1,DAMU04
	CIO	A2,0,DAMI04
	CIO	A2,0,DAMU04
	IFT	SALCUZ=1		 
	OTR	A2,1,DAMI04		
	OTR	A2,1,DAMU04		
	XIF			 
	IFF	NLINE=1		
	IFF	NLINE=2		
	IFF	NLINE=3		
	IFT	MMUPAG=1 
ECBDC4	EQU	*
	DATA	0 
	DATA	DCBUF4
	DATA	0,0,0,0 
DCBUF4	RES	TBUFL+1
	XIF
	IFF	NLINE=1		
	IFF	NLINE=2		
	IFF	NLINE=3		
**LOGG
	IFF	LOGG=0 
	DATA	LGST04
LGST04	EQU	*
	RES	LOGG 
	DATA	0 
	DATA	0 
	XIF
* 
	EJECT
* 
* 
*	DUMMY DWT 
* 
* 
	IFF	NLINE=4
DW1704	EQU	*
	IFF	NLINE=3
DW1703	EQU	*
	IFF	NLINE=2
DW1702	EQU	*
	XIF
	DATA	0	DUMMY DWT 
	DATA	0	STATUS BUSY 
	EJECT
* 
* 
*	INTERRUPT LOGGING ROUTINE 
* 
*	LOG LABELING BIT0-7 
*	INPUT CHARACTER MARKED  /11 
*	OUTPUT CHARACTER MARKED /00 
*	INPUT STATUS MARKED    /1F
*	OUTPUT STATUS MARKED   /0F - NOT USED 
* 
	IFF	LOGG=0 
LOGSST	ST	A2,SAVE2,A6 
	ORKL	A2,/1F00
	RF	LOG10 
LOGOUT	ST	A2,SAVE2,A6 
	ORKL	A2,/0000
	RF	LOG10 
LOGIN	CWK	A2,/FF
	RF(E)	LOGE10 
	ST	A2,SAVE2,A6 
	ORKL	A2,/1100
LOG10	ST	A3,SAVE3,A6
	LD	A3,LOGPNT,A6
	STR	A2,A3
	ADK	A3,2 
	SUR	A3,A6
	CWK	A3,LOGEND
	RF(L)	LOGEXI 
	LDKL	A3,LOGSTA 
LOGEXI	EQU	*
	ADR	A3,A6
	ST	A3,LOGPNT,A6
	LD	A2,SAVE2,A6 
	LD	A3,SAVE3,A6 
LOGE10	RTN	A5 
	XIF
* 
* 
	END

Full view