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

⟦eb3b6bd71⟧

    Length: 68510 (0x10b9e)
    Notes: pts_type(SC)
    Names: »DRSU01.SC«

Derivation

└─⟦a16d9b08d⟧ Bits:30009712 Philips computer tape "TOSS11"
    └─⟦this⟧ »UPD3/DRSU01.SC« 
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
    └─⟦this⟧ »TOSSWORK/DRSU01.SC« 

PTS(SC)

	IDENT DRSU01 	REL 11.0 81-08-31 870105041100 

			=5, SEND ETX AFTER ETB TO REM. DR-DEVICE 
			REL 11.0 81-05-25
			=4, LOOPT & POW-ON CORR;NEW COND ASS 
			REL 11.0 81-02-17
			=3, HANG UP ON REMOTE RECOVERY 
			REL 11.0 81-02-16
			=2, STATUS HANDLING FOR TP CHANGED 
			REL 11.0 81-01-26
			=1, REMOTE RECOVERY PROBLEM
			PRR 11.0 80-12-02
* 
************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRSU01 = DRIVER CHANNEL UNIT FOR LOCAL
*            AND REMOTE TERMINALS 
*            CONNECTED TO SUM 
* 
* 
* 
* 
************************************************
* 
*   THIS IS THE DRIVER TO CHANNEL UNITS FOR LOCAL AND REMOTE TERMINALS
*   CONNECTED TO SELECTOR UNIT (SUM). 
* 
*   THE DRIVER IS CALLED FROM TERMINAL DEVICE DRIVERS.
* 
*   THE DRIVER HAS SEPARATED ENTRIES FOR LOCAL AND FOR
*   REMOTE TERMINALS. 
* 
*   AT OUTPUT A WORD WITH DEVICE ADDRESS AND CHARACTER IS 
*   SENT TO CHANNEL UNIT. 
* 
*   AT INTERRUPT AN INPUT WORD IS READ TO REGISTER A2.
*   THE WORD IS EXAMINED AND SUITABLE ACTIONS ARE CARRIED OUT.
* 
*   CONTROL WORK TABLES FOR THE CHANNELS ARE
*   INCLUDED IN THE DRIVER. 
	EJECT
* 
* 
* 
*   NORMAL REGISTER USAGE IN THE DRIVER:- 
* 
*   A1 = RETURN CODE
*   A2 = INPUT WORD 
*   A3 = LINE NUMBER * 2
*   A4 = DEVICE NUMBER * 2
*   A5 = CWT-ADDRESS
*   A6 = DWT-ADDRESS
*   A7 = LOCAL/REMOTE INDICATION: 
*           0 IF LOCAL CONNECTION 
*           ADJUSTED CWT-ADDRESS IF REMOTE CONNECTION 
*   A8 = ECB-ADDRESS
* 
* 
* 
	EJECT
* 
*************** 
*    ENTRIES  * 
*************** 
* 
* 
	ENTRY	CHLT1	INTERRUPT FROM FIRST CHANNEL UNIT LOCAL
	ENTRY	CHLT2	INTERRUPT FROM SECOND CHANNEL UNIT LOCAL 
	ENTRY	CHLT3	INTERRUPT FROM THIRD CHANNEL LOCAL 
	ENTRY	CHLT4	INTERRUPT FROM FOURTH CHANNEL LOCAL
	ENTRY	CHRT1	INTERRUPT FROM FIRST CHANNEL UNIT REMOTE 
	ENTRY	CHRT2	INTERRUPT FROM SECOND CHANNEL UNIT REMOTE
	ENTRY	CHRT3	INTERRUPT FROM THIRD CHANNEL REMOTE
	ENTRY	CHRT4	INTERRUPT FROM FOURTH CHANNEL REMOTE 
	ENTRY	CHLTON	START OF CHLT AND CHRT
	ENTRY	CHTAB	CHANNEL TABLE
	ENTRY	DWREMU	DWT-DUMMY FOR LOOP-TESTING OF REMOTE CHANNELS 
	ENTRY	LOCHAN	NUMBER OF LOCAL CHANNEL UNITS 
	ENTRY	RECHAN	NUMBER OF REMOTE CHANNEL UNITS
	ENTRY	REMFC	REMOTE TEST FILE CODE
	ENTRY	SUMLOG	LOGG AREA FOR LOCAL AND REMOTE TERM.
* 
	ENTRY	LTCHRI	CHARACTER INPUT (LOCAL) 
	ENTRY	LTSTBL	START OF OUTPUT BLOCK (LOCAL) 
	ENTRY	LTCHRO	CHARACTER OUTPUT (LOCAL)
	ENTRY	LTENBL	END OF OUTPUT BLOCK (LOCAL) 
	ENTRY	LTDISP	LOCAL DISPATCHER (LOCAL)
* 
	ENTRY	RTCHRI	CHARACTER INPUT (REMOTE)
	ENTRY	RTSTBL	START OF OUTPUT BLOCK (REM0TE)
	ENTRY	RTCHRO	CHARACTER OUTPUT (REMOTE) 
	ENTRY	RTENBL	END OF OUTPUT BLOCK (REMOTE)
	ENTRY	RTDISP	LOCAL DISPATCHER (REMOTE) 
* 
	EJECT
* 
* 
**************************************
*    EXTERNAL TOSS MODULE ENTRIES    *
**************************************
* 
* 
	EXTRN	SAVE8	SAVE REGISTERS A1-A8 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	SETIMP	SET TIME
* 
	EXTRN	INTLT1	INTERRUPT TABLE FOR LOCAL CHANNEL 1 
	EXTRN	INTLT2	INTERRUPT TABLE FOR LOCAL CHANNEL 2 
	EXTRN	INTLT3	INTERRUPT TABLE FOR LOCAL CHANNEL 3 
	EXTRN	INTLT4	INTERRUPT TABLE FOR LOCAL CHANNEL 4 
	EXTRN	INTRT1	INTERRUPT TABLE FOR REMOTE CHANNEL 1
	EXTRN	INTRT2	INTERRUPT TABLE FOR REMOTE CHANNEL 2
	EXTRN	INTRT3	INTERRUPT TABLE FOR REMOTE CHANNEL 3
	EXTRN	INTRT4	INTERRUPT TABLE FOR REMOTE CHANNEL 4
* 
	EXTRN	LENDER	I/O REQUEST ERROR 
	EXTRN	LENDIS	END I/O AND DISPATCH
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
	EXTRN	IHRET8	RESTORE A1-A8 WITHOUT ENABLE
* 
	EXTRN	NDSAV8	SAVE A3-A5, A7-A8 IN DWT
	EXTRN	NDGET8	GET A3-A5, A7-A8 IN DWT 
	EXTRN	NDREDW	CALL RECOVERY FOR DEVICE
	EXTRN	NDRETO	SET OK & RETURN TO DEVICE DRIVER
	EXTRN	NDREP	GET REGISTERS & RETURN TO DEV. DRIVER
* 
	EJECT
* 
* 
*********************** 
*    DWT PARAMETERS   * 
*********************** 
* 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTOCH	LAST OUTPUT CHARACTER 
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	DWTADR	ADDRESS TO ADDRESS-BLOCK
	EXTRN	DWTST	STATUS 
	EXTRN	DWTOTQ	OUTPUT QUEUE
	EXTRN	DWTSB2	STACK BASE 2 IN DWT 
	EXTRN	DWTLD1	TIMER POINTER 
	EXTRN	DWTCP2	CHANNEL PARAMETERS 2
	EXTRN	DWTDEV	TERMINAL DEVICE STATUS
	EXTRN	INTADR	INTERRUPT ADDRESS DISPLACEMENT
	EXTRN	RECADR	RECOVERY ADDRESS DISPLACEMENT 
* 
	EJECT
* 
* 
********************
*    CONSTANTS     *
********************
* 
* 
NOERR	EQU	1	RETURN CODE NOT OPERABLE
LRCERR	EQU	/02	RETURN CODE LRC-ERROR
TIMERR	EQU	/08	RETURN CODE SOFTWARE TIME-OUT
OUTERR	EQU	/10	RETURN CODE OUTPUT ERROR 
DEVECH	EQU	/2000	MASK ECHO MODE 
DEWDRQ	EQU	/80	MASK DEVICE WITHOUT DATA REQUEST 
DEVINP	EQU	/40	MASK INPUT DEVICE
INDARQ	EQU	/20	MASK INPUT DATA REQUESTED
RECTRI	EQU	/10	FLAG RECOVERY TRIAL
LRCSEN	EQU	/08	FLAG LRC-SENDING 
LMPQUE	EQU	/04	FLAG LAMP CODE QUEUED
KBLAMP	EQU	/08	MASK KB-LAMPS ON VDU OUTPUT
TIME	EQU	5	TIME BEFORE TIME-OUT FOR SYNC
STX	EQU	/82	START OF TEXT 
ETB	EQU	/97	END OF TRANSMISSION BLOCK 
ETX	EQU	/03	END OF TEXT 
ESCKB	EQU	/1C	ESCAPE CODE DATA TO KB
DUMMSP	EQU	/3	SPECIAL DUMMY TO GET DATA REQUEST 
			FIRST WHEN PRINTERBUFFER IS EMPTY
DRQTIM	EQU	30	TIME TO NEXT ACK FOR PRINTERS 
	EJECT
* 
*************************************** 
*    CONDITIONAL ASSEMBLY             * 
*************************************** 
* 
* 
*   A LOGG FUNCTION OF EVERY INPUT AND OUTPUT CHARACTER 
*   MAY BE INCLUDED TO THE DRIVER  BY SETTING X:A=1 
* 
X:A	EQU	1 
LOGING	EQU	X:A
* 
* 
*    BY SETTING X:B TO 0,1,2,3 OR 4 THIS DRIVER HANDLES 
*    UP TO FOUR LOCAL CHANNELS. 
* 
X:B	EQU	1 
LOCHAN	EQU	X:B
* 
* 
*    ACKUMULATORS FOR NAK, RETRANSMISSION FAULT AND 
*    UNDEFINED CONTROL CHARACTERS ARE UPDATED IN
*    THE DRIVER. THIS FUNCTION CAN BE EXCLUDED FROM 
*    DRIVER BY SETTING X:C = 0. 
* 
X:C	EQU	1 
ACKMUL	EQU	X:C
* 
* 
*    BY SETTING X:D TO 0,1,2,3 OR 4 THIS DRIVER HANDLES 
*    UP TO FOUR REMOTE CHANNEL CARDS. 
* 
X:D	EQU	0 
RECHAN	EQU	X:D
* 
* 
	EJECT
* 
*   REMFC IS  " REMOTE TEST FILE CODE " 
*   STANDARD IS /15 
* 
X:E	EQU	/15 
REMFC	EQU	X:E 
* 
* 
*   BY SETTING X:F = 0 THE SOFTWARE TIME-OUT HANDLING 
*   FOR MISSING DATA REQUESTS FROM PRINTERS CAN BE EXCLUDED.
*   THE EXCLUSION IS ONLY POSSIBLE IF THE DRIVER IS ADAPTED 
*   FOR ONLY LOCAL TERMINALS (RECHAN=0).
* 
X:F	EQU	1	U	=4
SOFTIM	EQU	X:F	U	=4 
* 
* 
*   IF X:G = 1 THE DRIVER CAN HANDLE OUTPUT TO KEYBOARD LAMPS 
*   WHEN KEYBOARD IS CONNECTED DIRECTLY TO VDU. 
* 
X:G	EQU	1	U	=4
KBDIR	EQU	X:G	U	=4
* 
* 
*   A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*   SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	1
* 
* 
*   THIS DRIVER CAN BE ADAPTED TO MEMORY MANAGEMENT UNIT
*   BY SETTING MMUPAG TO 1. 
* 
MMUPAG	EQU	0	U	=4 
* 
	EJECT
* 
*************************** 
*    CWT-DISPLACEMENTS    * 
*************************** 
* 
*   LOCAL AND REMOTE TERMINALS
* 
* 
CWTLDW	EQU	0	LAST OUTPUT DWT
CWTLOW	EQU	2	LAST OUTPUT WORD 
CWTITA	EQU	4	ADDRESS TO INTERRUPT TABLE 
CWTINR	EQU	6	INR
CWTOTR	EQU	8	OTR
CWTCIS	EQU	10	CIO-START 
CWTRTC	EQU	12	RETRANSMISSION COUNTER
CWTEQ	EQU	14	QUEUE
	IFT	ACKMUL=1 
CWTADD	EQU	18	ACKUMULATORS
ACKTIM	EQU	24	PRINTER TIME-OUT ACKUMULATOR
CWTTP	EQU	26	TIMER POINTER
	XIF
	IFT	ACKMUL=0 
CWTTP	EQU	18	TIMER POINTER
	XIF
* 
*   ONLY REMOTE TERMINALS 
* 
* 
CWSYNC	EQU	CWTTP+2	SYNC CHARACTER 
LRCDWT	EQU	CWTTP+4	DWT-S OF GOING LRC-PROCESSES 
LRCACK	EQU	CWTTP+8	LRC-ACKUMULATORS 
CWTRST	EQU	CWTTP+12	CHANNEL STATUS WORD (LOOP-TESTS)
CWTBLK	EQU	CWTTP+14	BLOCK SENDING INDICATOR 
* 
	EJECT
***************************************************** 
*    C W T L T 1                                    * 
***************************************************** 
* 
*    CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 1 
* 
DWA1	EQU	/03	DEVICEADDRESS
* 
CWTLT1	EQU	*	TABLE ENTRY
* 
	IFF	LOCHAN=0 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTLT1	ADDRESS TO INTERRUPT TABLE 
	INR	A2,0,DWA1	INR
	OTR	A2,0,DWA1	OTR
	CIO	A2,1,DWA1	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE 
	DATA	0	QUEUE 2 
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	RETR. FAULT-ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	EJECT
* 
* 
***************************************************** 
*    C W T L T 2                                    * 
***************************************************** 
* 
*    CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 2 
* 
CWTLT2	EQU	*
* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
* 
* 
* 
DWA2	EQU	/13	DEVICE ADDRESS 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTLT2	INTERRUPT TABLE
	INR	A2,0,DWA2	INR
	OTR	A2,0,DWA2	OTR
	CIO	A2,1,DWA2	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE 
	DATA	0	SECOND QUEUE
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	RETR. FAULT-ACKUMULATOR 
	DATA	0	UNDEFINED- INTERRUPT-ACKUMULATOR
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	EJECT
* 
* 
***************************************************** 
*    C W T L T 3                                    * 
***************************************************** 
* 
*    CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 3 
* 
CWTLT3	EQU	*
* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	IFF	LOCHAN=2 
* 
* 
* 
DWA3	EQU	/23	DEVICE ADDRESS 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTLT3	INTERRUPT TABLE
	INR	A2,0,DWA3	INR
	OTR	A2,0,DWA3	OTR
	CIO	A2,1,DWA3	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE 
	DATA	0	SECOND QUEUE
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	RETR. FAULT-ACKUMULATOR 
	DATA	0	UNDEFINED- INTERRUPT-ACKUMULATOR
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	EJECT
* 
* 
***************************************************** 
*    C W T L T 4                                    * 
***************************************************** 
* 
*    CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 4 
* 
CWTLT4	EQU	*
* 
	IFT	LOCHAN=4 
* 
* 
* 
DWA4	EQU	/33
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTLT4	INTERRUPT TABLE
	INR	A2,0,DWA4	INR
	OTR	A2,0,DWA4	OTR
	CIO	A2,1,DWA4	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE 
	DATA	0	SECOND QUEUE
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	RETR. FAULT-ACKUMULATOR 
	DATA	0	UNDEFINED- INTERRUPT-ACKUMULATOR
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	EJECT
******************************* 
*    C W T R T 1              * 
******************************* 
*    CONTROL WORK TABLE FOR REMOTE CHANNEL NO. 1
*    CONNECTED TO FIRST CHRT
* 
CWTRT1	EQU	*
* 
	IFF	RECHAN=0 
* 
DWA5	EQU	/1	DEVICE ADDRESS
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT1	INTERRUPT TABLE
	INR	A2,0,DWA5	INR
	OTR	A2,0,DWA5	OTR
	CIO	A2,1,DWA5	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	IFF	RECHAN=0 
	DATA	0	TIMER POINTER 
	DATA	/7055	SYNC CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BIT  0: BLOCKSENDING RUNNING
			BIT 15: BLOCKSENDING ALLOWED 
	XIF
	EJECT
********************************
*    C W T R T 2               *
********************************
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 
*    CONNECTED TO FIRST CHRT
* 
CWTRT2	EQU	*
* 
	IFF	RECHAN=0 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT1	INTERRUPT TABLE
	INR	A2,0,DWA5	INR
	OTR	A2,1,DWA5	OTR
	CIO	A2,1,DWA5	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	IFF	RECHAN=0 
	DATA	0	TIMER POINTER 
	DATA	/7255	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
	XIF
	EJECT
********************************
*     C W T R T 3              *
********************************
* 
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 
*    CONNECTED TO SECOND CHRT 
* 
CWTRT3	EQU	*
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
* 
DWA6	EQU	/11	DEVICE ADDRESS 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT2	INTERRUPT TABLE
	INR	A2,0,DWA6	INR
	OTR	A2,0,DWA6	OTR
	CIO	A2,1,DWA6	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	DATA	0	TIMER POINTER 
	DATA	/7055	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
	XIF
	EJECT
********************************
*    C W T R T 4               *
********************************
* 
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 
*    CONNECTED TO SECOND CHRT 
* 
CWTRT4	EQU	*
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT2	INTERRUPT TABLE
	INR	A2,0,DWA6	INR
	OTR	A2,1,DWA6	OTR
	CIO	A2,1,DWA6	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
	XIF
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	DATA	0	TIMER POINTER 
	DATA	/7255	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
* 
	XIF
	EJECT
********************************
*     C W T R T 5              *
********************************
* 
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 
*    CONNECTED TO THIRD CHRT

* 
CWTRT5	EQU	*
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
* 
DWA7	EQU	/21	DEVICE ADDRESS 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT3	INTERRUPT TABLE
	INR	A2,0,DWA7	INR
	OTR	A2,0,DWA7	OTR
	CIO	A2,1,DWA7	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
	DATA	0	TIMER POINTER 
	DATA	/7055	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
	XIF
	EJECT
********************************
*    C W T R T 6               *
********************************
* 
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 
*    CONNECTED TO THIRD CHRT
* 
CWTRT6	EQU	*
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT3	INTERRUPT TABLE
	INR	A2,0,DWA7	INR
	OTR	A2,1,DWA7	OTR
	CIO	A2,1,DWA7	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
	XIF
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
	DATA	0	TIMER POINTER 
	DATA	/7255	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
	XIF
	EJECT
********************************
*     C W T R T 7              *
********************************
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 
*    CONNECTED TO FOURTH CHRT 
* 
CWTRT7	EQU	*
* 
	IFT	RECHAN=4 
* 
DWA8	EQU	/31	DEVICE ADDRESS 
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT4	INTERRUPT TABLE
	INR	A2,0,DWA8	INR
	OTR	A2,0,DWA8	OTR
	CIO	A2,1,DWA8	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
	XIF
* 
	IFT	RECHAN=4 
	DATA	0	TIMER POINTER 
	DATA	/7055	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
	XIF
	EJECT
********************************
*    C W T R T 8               *
********************************
* 
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 
*    CONNECTED TO FOURTH CHRT 
* 
CWTRT8	EQU	*
* 
	IFT	RECHAN=4 
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT WORD
	DATA	INTRT4	INTERRUPT TABLE
	INR	A2,0,DWA8	INR
	OTR	A2,1,DWA8	OTR
	CIO	A2,1,DWA8	CIO-START
	DATA	0	RETRANSMISSION COUNTER
	DATA	0	QUEUE TERMINAL 1
	DATA	0	QUEUE TERMINAL 2
* 
	IFT	ACKMUL=1 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	BLOCK ERROR ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
	XIF
* 
	IFT	RECHAN=4 
	DATA	0	TIMER POINTER 
	DATA	/7255	SYNC-CHARACTER
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
	DATA	1	BLOCK SENDING INDICATOR 
* 
	XIF
* 
	EJECT
************************************************* 
*    C H T A B                                  * 
************************************************* 
* 
*   THIS TABLE HOLDS ADDRESSES OF CONTROLLER WORK 
*   TABLES CWT TO CHANNEL UNITS FOR LOCAL OR REMOTE 
*   TERMINALS.
* 
* 
* 
CHTAB	EQU	* 
	DATA	CHTABE-*	TABLE LENGTH 
* 
	IFT	LOCHAN=0 
	DATA	0 
	DATA	0 
	DATA	0 
	DATA	0 
	XIF
* 
	IFT	LOCHAN=1 
	DATA	CWTLT1	 
	DATA	0 
	DATA	0 
	DATA	0 
	XIF
* 
	IFT	LOCHAN=2 
	DATA	CWTLT1
	DATA	CWTLT2
	DATA	0 
	DATA	0 
	XIF
* 
	IFT	LOCHAN=3 
	DATA	CWTLT1
	DATA	CWTLT2
	DATA	CWTLT3
	DATA	0 
	XIF
	IFT	LOCHAN=4 
	DATA	CWTLT1
	DATA	CWTLT2
	DATA	CWTLT3
	DATA	CWTLT4
	XIF
* 
	IFT	RECHAN=1 
	DATA	CWTRT1
	DATA	CWTRT2
	XIF
* 
	IFT	RECHAN=2 
	DATA	CWTRT1
	DATA	CWTRT2
	DATA	CWTRT3
	DATA	CWTRT4
	XIF
* 
	IFT	RECHAN=3 
	DATA	CWTRT1
	DATA	CWTRT2
	DATA	CWTRT3
	DATA	CWTRT4
	DATA	CWTRT5
	DATA	CWTRT6
	XIF
* 
	IFT	RECHAN=4 
	DATA	CWTRT1
	DATA	CWTRT2
	DATA	CWTRT3
	DATA	CWTRT4
	DATA	CWTRT5
	DATA	CWTRT6
	DATA	CWTRT7
	DATA	CWTRT8
	XIF
CHTABE	EQU	*	END OF TABLE 
* 
	EJECT
* 
* 
************************************
*    D W R E M U                   *
************************************
* 
*    DUMMY TABLE USED WHEN LOOP-TESTING OF
*    REMOTE CHANNELS ARE NEEDED.
* 
DWREMU	EQU	*
	IFF	RECHAN=0 
	DATA	0 
	DATA	/8000	STATUS
	DATA	0,0 
	DATA	AREM	POINTER TO ADDRESS-BLOCK 
	DATA	0,0,0 
	IFT	MMUPAG=1	U	=4
	DATA	0	SAVE AREA USER ECB ADDRESS	=4 
	DATA	DEVECB	MMU ECB ADDRESS	=4 
DEVECB	DATA	0,0,0,0,0,0	MMU ECB	=4
	XIF		U	=4
	IFF	RECHAN=0	U	=4
	EJECT
* 
* 
*    L O O P - T E S T   S E C T I O N
* 
* 
*    ORDER /00: TEST REMOTE CHANNEL CONNECTION
* 
*    CHANNEL TO TEST IS GIVEN IN CONTROL WORD OF ECB. 
*    THE REQUEST IS COMPLETED WITH FOLLOWING BITS 
*    IN RETURN CODE OF ECB: 
* 
*    BIT 9:  CHANNEL UNIT NOT IN ACTIVE STATUS
* 
* 
*    BIT 14: ACK NOT RECEIVED AFTER OUTPUT
* 
*    BIT 15: SYNC NOT RECEIVED AFTER OUTPUT 
	IFT	MMUPAG=1	U	=4
	DATA	-2	DEVICE INDEX	=4
	XIF		U	=4
	IFF	RECHAN=0	U	=4
AREM	DATA	LOPTST
	DATA	0	ABORT ROUTINE ADDRESS 
	DATA	IHLOP	INTERRUPT HANDLER 
LOPTST	EQU	*
	LD	A2,10,A8	GET CHANNEL NUMBER 
	ANK	A2,/FF 
	RF(E)	DISIIE 
	CWK	A2,RECHAN+RECHAN	CHANNEL 1-8 ? 
	RF(G)	DISIIE 
	SLL	A2,1 
	LD	A2,CHTAB+8,A2	GET CWT-ADDRESS 
	RF(E)	DISIIE 
	LDR	A7,A7	WRONG ORDER ?
	RF(E)	LOPT10	NO
DISIIE	ABL	LENDER	I/O REQUEST ERROR 
LOPT10	EQU	*
	LD	A1,CWTRST,A2	GET CHANNEL LOOP STATUS
	LDR	A5,A2	CWT-ADDRESS
	ANK	A1,/40 
	RF(NE)	IHLP20	CHANNEL UNIT NOT BUSY	=4 
	LDK	A5,/E0	INDICATE REQUEST GOING
	ST	A5,CWTRST,A2	INDICATE LOOP-TESTING
	ABL	TDISP
* 
* 
*    END OF LOOP-TEST 
* 
IHLOP	EQU	* 
	LDR	A5,A1	GET CWT-ADDRESS
	LD	A1,CWTRST,A5	GET CHANNEL LOOP STATUS
	ANK	A1,3 
	XRK	A1,3 
IHLP10	EQU	*
	LDK	A2,0 
	SC	A2,CWTRST+1,A5	RESET RIGHT BYTE IN CHANNEL STATUS 
IHLP20	EQU	*	U	=4 
	ABL	LENDIS 
	XIF
	EJECT
* 
* 
*    C H L T 1 / C H L T 2
* 
*    C H R T 1 / C H R T 2
* 
*    THIS IS THE INTERRUPT HANDLER FOR CHLT AND CHRT
* 
*    WHEN INTERRUPT FROM A CHANNEL UNIT OCCURS
*    DRIVER FIRST RELATES INTERRUPT TO A CWT. 
*    THEN DRIVER GETS THE INTERRUPT MESSAGE,
*    LOGGS IT AND DETERMINES INPUT WORD TO GET
*    DEVICE NUMBER , LINE NUMBER AND TYPE OF
*    INTERRUPT. 
* 
*    FOLLOWING TYPES OF INTERRUPT ARE RELEVANT
* 
*    D = DEVICE ADDRESS     C = CHARACTER 
* 
*    ACK       OUTPUT ACKNOWLEDGED      D = 0  C = 7
*    NAK       OUTPUT ERROR             D = 0  C = 5
*    OER       TIME OUT                 D = 0  C = 0
*    SER       POWER ON                 D = 0  C = 3
*    DRI       DATA REQUEST IMMEDIATE   SIGN BIT SET
*    ABC+      BLOCK TR. ACKNOWLEDGED   D = 0  C = 8
*    ABC-L     LRC ERROR IN BLOCK       D = 0  C = A
*    ABC-V     VRC ERROR IN BLOCK       D = 0  C = C
*    ABC-LV    LRC O VRC ERROR IN BLOCK D = 0  C = E
*    DRD       DATA REQUEST DELAYED     D # 0  C = 0
*                          LOCAL CHAR. MAY BE DIFFERENT FROM  ZERO
*    STD       STATUS MESSAGE           D # 0  C # 0
*    DIN       DATA INPUT               D # 0 
	EJECT
* 
*    C H L T 1
* 
*    INTERRUPT FROM CHLT1 
* 
CHLT1	EQU	* 
	IFF	LOCHAN=0 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFF	LOCHAN=0 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFF	LOCHAN=0 
	LDK	A7,2	INDICATE CHLT1
	RF	CLT010
	XIF
* 
* 
*    C H L T 2
* 
*    INTERRUPT FROM CHLT2 
* 
CHLT2	EQU	* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	LDK	A7,4	INDICATE CHLT2
	RF	CLT010
	XIF
* 
* 
*    C H L T 3
* 
*    INTERRUPT FROM CHLT3 
* 
CHLT3	EQU	* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	IFF	LOCHAN=2 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	IFF	LOCHAN=2 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFF	LOCHAN=0 
	IFF	LOCHAN=1 
	IFF	LOCHAN=2 
	LDK	A7,6	INDICATE CHLT3
	RF	CLT010
	XIF
* 
* 
*    C H L T 4
* 
*    INTERRUPT FROM CHLT4 
* 
CHLT4	EQU	* 
	IFT	LOCHAN=4 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	LOCHAN=4 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	LOCHAN=4 
	LDK	A7,8	INDICATE CHLT4
	RF	CLT010
* 
	XIF
* 
	EJECT
* 
* 
*    C H R T 1
*    INTERRUPT FROM CHRT1 
* 
CHRT1	EQU	* 
	IFF	RECHAN=0 
	ST	P,INTSAV
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFF	RECHAN=0 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFF	RECHAN=0 
	LDK	A7,10	INDICATE CHRT1 
	RF	CLT010
	XIF
* 
*    C H R T 2
* 
*    INTERRUPT FROM CHRT2 
* 
CHRT2	EQU	* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	LDK	A7,14	INDICATE CHRT2 
	RF	CLT010
	XIF
* 
* 
*    C H R T 3
* 
*    INTERRUPT FROM CHRT3 
* 
CHRT3	EQU	* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFF	RECHAN=0 
	IFF	RECHAN=1 
	IFF	RECHAN=2 
	LDK	A7,18	INDICATE CHRT3 
	RF	CLT010
	XIF
* 
* 
*    C H R T 4
* 
*    INTERRUPT FROM CHRT4 
* 
CHRT4	EQU	* 
	IFT	RECHAN=4 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	RECHAN=4 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	RECHAN=4 
	LDK	A7,22	INDICATE CHRT4 
	XIF
* 
	EJECT
* 
*    COMMON PART FOR ALL INTERRUPTS 
* 
CLT010	LD	A5,CHTAB,A7	GET CWT-ADDRESS 
* 
* 
	EX	CWTINR,A5	EXECUTE INR-INSTRUCTION 
	IFF	RECHAN=0	U	=4
	ABL(NA)	TDISP
	XIF		U	=4
* 
	IFT	LOGING=1 
* 
CLT012	CF	A15,LOGG	** LOGG OF INPUT CHARACTER **
* 
	XIF
	EJECT
* 
*    DETERMINE TYPE OF INTERRUPT. 
*    MOREOVER, IF REMOTE, GET THE RIGHT CHANNEL 
*    OF CHRT AND START OR RESTART SYNC-TIMER. 
* 
	IFF	RECHAN=0	U	=4
	SUK	A7,10
			U	=4 
	IFF	LOCHAN=0 
	RF(NN)	CLT014	REMOTE INTERRUPT 
	LDK	A7,0	INDICATE LOCAL INTERRUPT
	RF	CLT018
CLT014	EQU	*
	XIF
	IFF	RECHAN=0 
	LDR	A3,A2
	SLC	A3,6	REMOTE FIRST OR SECOND CHANNEL ?
	RF(NN)	CLT015	FIRST
	LD	A5,CHTAB+12,A7	GET CWT-ADDRESS SECOND CHANNEL OF CHRT 
CLT015	CF	A15,RESTSY	START OR RESTART SYNC-TIMER
	ANK	A3,/2	FIRST OR SECOND TERMINAL ? 
	LDR	A7,A5
	ADR	A7,A3
	LD	A3,CWTRST,A5	LOOP TEST MODE ? 
	ABL(N)	CLT170	YES
	XIF
CLT018	LDK	A1,0	RESET RETURN CODE 
	LDR	A3,A2	DATA REQUEST IMMEDIATE ? 
	IFF	RECHAN=0 
	ABL(N)	CLT050
	XIF
	ANKL	A3,/7000	DEVICE ADDRESS ? 
	ABL(NE)	CLT100	YES, DIN, STD OR DRD
	EJECT
* 
* 
*    DETERMINE TYPE OF CONTROL CHARACTER
* 
	LDR	A3,A2
	ANK	A3,/FF	DELETE DEVICE AND LINE NUMBER 
	RF(E)	CLT030	OER 
	SUK	A3,7 
	RF(E)	CLT050	ACK 
	ADK	A3,2 
	ABL(E)	CLT080	NAK
	ADK	A3,2 
	ABL(E)	CLT100	POWER ON 
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	LOCAL ?
	RF(NZ)	CLT022	NO 
	XIF
	IFF	LOCHAN=0 
	SUK	A3,/18	RETRANSMISSION FAULT ?
	RF(NE)	CLT025	NO, UNDEFINED INTERRUPT
* 
	IFT	ACKMUL=1 
	IM	CWTADD+2,A5	UPDATE RETRANSM. FAULT ACKUMULATOR
	XIF
	IFF	LOCHAN=0 
	RF	EXIIT 
	XIF
* 
	IFF	RECHAN=0 
CLT022	EQU	*
	LC	A4,LRCACK,A7
	LDK	A6,/80	ABC-ANSWER ALLOWED ?
	TM	A6,A4 
	RF(E)	EXIIT	NO 
	XRK	A4,/80	YES, RESET BIT
	SC	A4,LRCACK,A7	AND STORE
	LD	A6,LRCDWT,A7	LRC-DEVICE ? 
	RF(E)	EXIIT
	ANK	A4,/7F 
	RF(Z)	CLT046	YES 
	CF	A15,RESLRC	RESET LRC- AND BLOCKSEND. INDICATORS 
	LDR	A4,A6	DWT-ADDRESS
	CF	A15,QUESEC	CHECK QUEUE
	LD	A4,DWTST,A6	STATUS WORD	=5
	SUK	A3,5 
	RF(E)	CLT043	ABC+	=5 
	IFT	ACKMUL=1 
* 
	IM	CWTADD+2,A5	UPDATE ERROR ACKUMULATOR
	XIF
	IFF	RECHAN=0 
* 
	SUK	A3,4	VRC-ERROR ? 
	RF(E)	CLT042	YES 
	LDK	A1,LRCERR	INDICATE LRC-ERROR 
	SUK	A3,2	LRC-ERROR IN BLOCK ?
	RF(E)	CLT033	YES 
	ADK	A3,4 
	RF(E)	CLT033	LRC- OR VRC-ERROR IN BLOCK
	XIF
CLT025	EQU	*
	IFT	ACKMUL=1 
	IM	CWTADD+4,A5	UPDATE UNDEF. INTERRUPT ACKUMULATOR 
	XIF
	EJECT
* 
*    RESOLVE QUEUE AND EXAMINE RECOVERY BIT.
*    RETURN TO DEVICE DRIVER WITH RETURN CODE : 
*      NOT OPERABLE IF SEVEN NAK OR ECHO OR 
*                   OUTPUT ERROR (OER) TWO TIMES
*      OUTPUT ERROR IF FIRST OER OR UNDEFINED 
*                   INTERRUPT 
* 
CLT030	EQU	*
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(Z)	CLTQUE	NO
	XIF
	IFF	RECHAN=0 
	LD	A6,LRCDWT,A7
	CWR*	A6,A5	LRC-DEVICE ?	=3 
	RF(NE)	CLTQUE
	CF	A15,RESLRC	RESET LRC- AND BLOCKSEND. INDICATORS 
	XIF
CLTQUE	CF	A15,QUEUE	RESOLVE QUEUE 
	ANK	A2,/FF	CLEAN CHARACTER	=5
	SUK	A2,5	SEVEN NAK ? 
	RF(Z)	CLT045	YES 
CLT031	LD	A2,DWTST,A6	GET STATUS WORD 
	LDR	A3,A2
	ANKL	A2,DEVECH+RECTRI	ECHO AND RECOVERY BIT
	RF(NE)	CLT045
	ORK	A3,RECTRI	INDICATE RECOVERY TRIAL DONE 
	ST	A3,DWTST,A6	STORE 
CLT032	LDK	A1,OUTERR	INDICATE OUTPUT ERROR
CLT033	EQU	*
	ABL	CLT107	RETURN TO DEVICE DRIVER 
	IFF	RECHAN=0 
	EJECT
* 
*    ABC-  VRC-ERROR
* 
*    IF BLOCKSENDING SAME PROCEDURE AS FOR THE OTHER
*    ERRORS OF TYPE ABC-. 
*    IF OUTPUT TO PRINTERS WITH LRC-CONTROL SAME
*    PROCEDURE AS FOR ABC+. 
* 
CLT042	EQU	*
			U	=5 
	ANK	A4,DEWDRQ	BLOCK SENDING ?
	RB(NZ)	CLT031	YES
			U	=5 
* 
*    ABC+  VRC-ERROR
* 
*    SEND ETX TO REMOTE PRINTERS WITH DATA REQUEST
*    RETURN TO DEV. DRIVER IF OTHER DEVICE TYPE 
* 
CLT043	EQU	*	U	=5 
	ANK	A4,DEWDRQ	DEV WITHOUT DATA REQUEST ?	=5
	RB(NZ)	CLT033	YES, RETURN TO DEVICE DRIVER	=5
	LDK	A2,ETX	SEND ETX FOR REMOTE	=5
	CF	A15,OUTLIN	PRINTERS WITH DATA REQUEST	=5
	RF	EXIIT	GO TO DISPATCHER	=5 
	XIF
	EJECT
* 
*    POWER ON 
* 
*    RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE 
*    ON ACTUAL LINE EXCEPT THOSE OCCUPYING CHANNEL UNIT 
*    OR THOSE IN ECHO MODE. 
* 
CHPOWO	EQU	*
	LDR*	A2,A5	GET CHANNEL OCCUPYING DEVICE
	CM	CWTRTC,A5	RESET RETRANSMISSION COUNTER
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(Z)	CPO010	NO
	XIF
	IFF	RECHAN=0 
			U	=1 
	CM	LRCDWT,A7	RESET LRC-DEVICE POINTER	=1 
	LDK	A7,1	U	=1
	ANS	A7,CWTBLK,A5	RESET BLOCKSENDING RUN. IND.	=1 
	XIF
CPO010	LDR	A3,A6	DEVICE COUNTER 
			U	=4 
	LDR	A1,A8	SET ADDRESS POINTER
CPO020	EQU	*
	LDR*	A6,A1	GET DWT-ADDRESS 
	RF(E)	CPO030 
	SRC	A6,1 
	RF(N)	CPO030 
	SLC	A6,1 
			U	=4 
	LDKL	A7,/FFFF-RECTRI-LRCSEN
	ANS	A7,DWTST,A6	RESET RECOVERY BIT AND LRC-BIT	=1
	LD	A7,DWTST,A6	STATUS WORD	=4
	ANK	A7,DEVINP	INPUT DEVICE ?	=4
	RF(NE)	CPO023	YES	=4 
	LC	A7,DWTST,A6 
	ANK	A7,/20	ECHO MODE ? 
	RF(NE)	CPO030	YES
CPO023	EQU	*	U	=4 
	CWR	A6,A2	DEVICE WAITING FOR CHANNEL ANSWER
	RF(E)	CPO030	YES 
CPO025	EQU	*
	LDK	A4,3	RECOVERY CAUSE: POWER ON
	CF	A15,NDREDW	CALL RECOVERY ROUTINE
CPO030	EQU	*
	ADK	A1,2 
	SUK	A3,2	ALL DEVICES THREATED? 
	RB(NE)	CPO020	NO TAKE NEXT 
EXIIT	RF	EXIT 
	EJECT
* 
*    INDICATE NOT OPERABLE BEFORE GOING TO DRIVER 
* 
CLT045	EQU	*
	LDKL	A1,/FFFF-RECTRI 
	ANS	A1,DWTST,A6	RESET RECOVERY BIT 
	LDK	A1,NOERR	INDICATE NOT OPERABLE 
	ABL	CLT107	RESET TIMER AND FINISH
CLT046	EQU	*
	ABL	CLT110 
	EJECT
* 
*    A C K , D R I
*    FIRST RESOLVE QUEUE AND THEN EXAMINE LAST
*    OUTPUT DWT. IF NOT DEFINED UPDATE ERROR
*    ACKUMULATOR AND GO TO DISPATCHER. IF SYNC-ACK
*    DROP IT. 
*    NORMAL ACK OR DRI WILL RESULT IN A RESETTING OF
*    RECOVERY BIT IN DWT. THEN A SIMULATION OF DATA 
*    REQUEST FOR DEVICES WITHOUT DATA REQUEST IS CARRIED
*    OUT. FOR DEVICES WITH DATA REQUEST FUNCTION A TIMER
*    HANDLING ANSWERS FROM DEVICE IS AFFECTED AND THEN
*    IF DRI A BRANCH IS MADE TO THE DATA REQUEST SECTION. 
*    IF ACK WE HAVE TO WAIT FOR A DRD.
CLT050	EQU	*
	IFF	RECHAN=0 
	LC	A3,CWTLOW,A5	LAST OUTPUT WORD 
	ANK	A3,/F0	KEEP DEVICE NUMBER
	XIF
	CF	A15,QUEUE	RESOLVE QUEUE 
	LDKL	A4,/FFFF-RECTRI 
	ANS	A4,DWTST,A6	RESET RECOVERY BIT IN STATUS WORD
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(Z)	CLT052	NO
	XIF
	IFF	RECHAN=0 
	LDK	A4,2 
	ORS	A4,CWTRST,A5	INDICATE ACK IN CHANNEL STATUS
	LDR	A8,A3	OBC-ACK ?
	RF(NE)	CLT052	NO 
	LDKL	A3,/8000
	ORS	A3,LRCACK,A7	INDICATE ABC ALLOWED
	RF	CLT055
	XIF
CLT052	EQU	*
	LD	A3,DWTST,A6	DEVICE STATUS 
	ANK	A3,DEWDRQ	DEVICE WITHOUT DATA REQUEST ?
	RF(Z)	CLT055	NO
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RB(Z)	CLT046	NO, RETURN TO DEV. DRIVER 
	XIF
	IFF	RECHAN=0 
	CW	A6,LRCDWT,A7
	ABL(NE)	CLT110 
	XIF
	IFT	RECHAN=0 
	RB	CLT046	RETURN TO DEVICE DRIVER
	XIF
	EJECT
* 
* 
*    PRINTER TIMING AND TIMING FOR MISSING BLOCK CONTROL CHARACTERS 
* 
CLT055	EQU	*
	IFF	SOFTIM+RECHAN=0	U	=4 
	INH
	LD	A3,DWTLD1,A6	ADDRESS TO TIMER BLOCK 
	RF(E)	CLT060 
* 
*    RESTART TIMER
* 
	LDKL	A3,-DRQTIM	RESTART TIMER
	ST*	A3,DWTLD1,A6 
	RF	CLT068
* 
*    START TIMER
* 
CLT060	EQU	*
	LDR	A1,A6	PARAMETER
	LDKL	A4,DWTLD1	TIMER POINTER 
	ADR	A4,A6	ADD DWT-ADDRESS
	CF	A15,SETIMP	GET TIMER BLOCK
	DATA	DRQTUT,DRQTIM	ADDRESS TO TIME-OUT ROUTINE AND DELAY 
CLT068	EQU	*
	IFF	RECHAN=0 
	LDR	A8,A8	OBC-ACK ?
	RF(E)	EXIT	YES 
	LDK	A1,0 
	LD	A4,DWTST,A6	DEVICE STATUS 
	ANK	A4,DEWDRQ	DEVICE WITHOUT DATA REQUEST ?
	RB(NZ)	CLT046	YES, RETURN TO DEVICE DRIVER 
	LDR	A2,A2	DATA REQUEST IMMEDIATE ? 
	ABL(N)	CLT110	YES	=2 
	XIF
EXIT	ABL	TDISP	DISPATCHER EXIT
	IFF	SOFTIM+RECHAN=0	U	=4 
	EJECT
* 
*    TIME-OUT ROUTINE HANDLING MISSING DATA REQUESTS
*    FROM PRINTERS AND , FOR REMOTLY CONNECTED DEVICES
*    USING THE LRC-FUNCTION , MISSING BLOCK CONTROL 
*    CHARACTERS (ABC) FROM SELECTOR UNIT. 
* 
DRQTUT	EQU	*
	LDR	A6,A1	GET DWT-ADDRESS
	CM	DWTLD1,A6	RESET POINTER TO TIMER BLOCK
	LD	A3,DWTST,A6 
	RB(N)	EXIT 
	SLL	A3,2	ECHO MODE ? 
	RF(N)	DRQT10	YES 
	LDK	A2,/83 
	CC	A2,DWTOCH,A6
	RB(E)	EXIT	U	=2
			U	=2 
DRQT10	EQU	*
* 
	IFT	ACKMUL=1 
	CF	A15,GETCWT	GET CWT-ADDRESS
	IM	ACKTIM,A5	INCREMENT ACKUMULATOR 
	XIF
* 
	IFF	SOFTIM+RECHAN=0	U	=4 
	LDK	A1,TIMERR	INDICATE SOFTWARE TIME-OUT 
	IFF	RECHAN=0 
	SLL	A3,6	DEVICE STATUS 
	RF(NN)	DRQT20	DEVICE WITH DATA REQUEST 
	LDK	A1,LRCERR	INDICATE LRC-ERROR 
DRQT20	EQU	*
	XIF
	IFF	SOFTIM+RECHAN=0	U	=4 
	ABL	CLT107	RETURN TO DEVICE DRIVER 
	XIF		U	=4
	EJECT
* 
*    N A K
* 
*    ERROR ACKUMULATOR AND RETRANSMISSION COUNTER IS
*    UPDATED. LAST OUTPUT CHARACTER IS RETRANSMITTED
*    BY CHANNEL DRIVER SIX TIMES AND IF STILL NO SUCCESS
*    RETURN CODE NOT OPERABLE IS SENT TO DEVICE DRIVER. 
* 
CLT080	EQU	*
	LDR*	A6,A5	GET LAST OUTPUT DWT 
	RB(E)	EXIT 
* 
	IFT	ACKMUL=1 
* 
	IM	CWTADD,A5	UPDATE ERROR ACKUMULATOR
* 
	XIF
* 
	IFF	RECHAN=0 
	CWK	A6,1	SYNC BEFORE NAK?
	RB(E)	EXIT	YES 
	XIF
	IM	CWTRTC,A5	INCREMENT RETRANSMISSION COUNTER
	LD	A4,CWTRTC,A5	GET COUNTER
	SUK	A4,7	SEVEN TIMES ? 
	ABL(E)	CLT030
	LD	A2,CWTLOW,A5	GET LAST OUTPUT WORD 
	EX	CWTOTR,A5	EXECUTE OTR-INSTR.
	IFT	LOGING=1 
	CF	A15,LOGG	**    LOGG INPUT CHARACTER    ** 
	XIF
			U	=4 
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE?
	RF(Z)	CLT090	NO
	XIF
	IFF	RECHAN=0 
	ANK	A2,/FF 
	XRS	A2,LRCACK,A7	UPDATE LRC-ACKUMULATOR
	CF	A15,RESTSY	START OR RESTART SYNC-TIMER
	XIF
CLT090	ABL	TDISP
	EJECT
* 
* 
*    DATA INPUT AND DATA REQUEST
* 
*    ALWAYS:          GET DWT-ADDRESS FROM INTERRUPT TABLE
* 
*    DATA INPUT:      IF INPUT REQUESTED FROM DEVICE, RETURN TO 
*                     DEVICE DRIVER.
*                     IF INPUT NOT REQUESTED, GO TO INTERRUPT 
*                     ROUTINE OF DEVICE DRIVER. 
* 
*    DATA REQUEST:
* 
*     LOCAL DEVICES:  STORE PRINTER STATUS IN DWTDEV AND
*                     RETURN TO DEVICE DRIVER.
*     REMOTE DEVICES: RETURN TO DEVICE DRIVER.
* 
*    STATUS MESSAGE (ONLY FOR REMOTE DEVICES):
*                     GO TO INTERRUPT ROUTINE OF DEVICE DRIVER. 
* 
* 
CLT100	EQU	*
	LDR	A3,A2
	SRL	A3,8 
	LDR	A4,A3
	ANK	A3,/E	2 * LINE NUMBER FOR LOCAL CONN.
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	LOCAL ?
	RF(Z)	CLT103	YES 
	XIF
	IFF	RECHAN=0 
	ANK	A3,/02	MASK CHANNEL NUMBER 
	SLL	A3,1	TO CORRECT POSITION 
	CWR	A7,A5	TERMINAL 2 ON CHANNEL ?
	RF(E)	CLT103	NO
	ADK	A3,2	YES, ADD TERMINAL NUMBER
	XIF
CLT103	EQU	*
	SRL	A4,3 
	ANK	A4,/E	2 * DEVICE NUMBER
	IFF	RECHAN=0 
	CWK	A4,/E	SYNC-INPUT ? 
	RF(E)	CLT150	YES 
			LOOP SWITCH SET
	XIF
	LD*	A8,CWTITA,A5	ADDRESS TO INTERRUPT TABLE
	RB(Z)	EXIT	
	CW	A3,-2,A8	WITHIN TABLE ? 
	RB(NL)	EXIT	NO 
	ADR	A8,A3
	LDR*	A8,A8	ADDRESS TO TERMINAL SECTION 
	RB(Z)	EXIT	NOT DEFINED 
	LD	A6,-2,A8	GET ID-WORD
	SUR	A6,A4
	RB(NP)	EXIT	UNDEFINED INTERRUPT
	LDR	A4,A4	NO DEVICE NUMBER ? 
	ABL(E)	CHPOWO	POWER ON 
	ADR	A8,A4	ADDRESS TO DWT-ADDRESS 
	LDR*	A6,A8	GET DWT-ADDRESS 
	RB(E)	EXIT 
	ANK	A2,/FF	CLEAN CHARACTER 
	LD	A3,DWTST,A6	DEVICE STATUS 
	ANK	A3,DEVINP+INDARQ	MASK INPUT DEV. AND INPUT REQ.
	SUK	A3,DEVINP
	RF(Z)	CLT115	INPUT DEV. BUT NO INPUT REQUESTED 
	RF(P)	CLT108	INPUT DEV. WITH INPUT REQUESTED 
	LD	A3,DWTST,A6	DEVICE STATUS 
	ANK	A3,DEWDRQ	DEVICE WITHOUT DATA REQUEST ?
	RB(NZ)	EXIT	YES
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(NZ)	CLT120	YES
	XIF
	IFT	LOCHAN=0 
	RF	CLT120
	XIF
	IFF	LOCHAN=0 
	SC	A2,DWTDEV+1,A6	SAVE PRINTER STATUS	=2 
	RF	CLT110
	XIF
* 
* 
CLT107	EQU	*
	IFF	SOFTIM+RECHAN=0	U	=4 
	CF	A15,RESTIM	RESET TIMER
	XIF		U	=4
	RF	CLT110
CLT108	EQU	*
	LDKL	A7,/FFFF-INDARQ 
	ANS	A7,DWTST,A6	RESET FLAG 'INPUT REQUESTED' 
* 
*   RETURN TO DEVICE DRIVER 
*       (USED BY ALL DEVICES FOR RETURN)
* 
CLT110	EQU	*
	ABL	NDREP	RETURN TO DEVICE DRIVER
* 
*   GO TO INTERRUPT ROUTINE OF DEVICE DRIVER
* 
CLT115	EQU	*
	LD	A1,DWTADR,A6	ADDRESS BLOCK
	LD	A1,INTADR,A1	INTERRUPT ENTRY DEFINED ?
	RB(Z)	CLT090	NO, SKIP CHARACTER
	LDR	A5,A6	DWT ADDRESS
	ADKL	A5,DWTSB2	STACK BASE
	ABR	A1	DEVICE DRIVER INTERRUPT ENTRY 
* 
	IFF	RECHAN=0 
	EJECT
* 
*   REMOTE DATA REQUEST AND STATUS MESSAGE
* 
CLT120	LDR	A7,A2	REMOTE DATA REQUEST ?
	ANK	A7,/FF 
			U	=2 
	RB(NZ)	CLT115	NO, STATUS MESSAGE	=2
	CWR*	A6,A5	DRD BEFORE ANSWER ? 
	ABL(E)	EXIT	YES
			U	=2 
	LC	A3,DWTOCH,A6	LAST OUTPUT CHARACTER	=5 
	ANK	A3,/7F	CLEAN	=5
	SUK	A3,ETX	LAST OUTPUT = ETX ?	=5
	RB(Z)	CLT107	YES, RESET TIMER AND RETURN	=5
	RB	CLT110
			U	=2 
	EJECT
* 
* 
*    TFU IN LOOP MODE 
* 
CLT150	EQU	*
	LDK	A4,1 
	CWR*	A4,A5	SYNC SENT ? 
	RF(NE)	CLT154
	LDKL	A4,/8001	INDICATE LOOP MODE AND SYNC-ACK RECEIVED 
CLT152	EQU	*
	ORS	A4,CWTRST,A5 
CLT154	ABL	EXIT 
	EJECT
* 
*    LOOP MODE
* 
CLT170	EQU	*
	LDR	A3,A2
	ANK	A3,/FF 
	SUK	A3,3	POWER ON ?
	RF(E)	CLT179	YES 
	LDR*	A4,A5	GET LAST OUTPUT DWT 
	LDR*	A6,A5 
	SUK	A4,1	SYNC ?
	RF(E)	CLT178	YES 
	LDK	A1,NOERR	INDICATE NOT OPERABLE 
CLT177	RB	CLT110
CLT178	EQU	*
	SUK	A3,4	ACK ? 
	RF(NE)	EXITA	NO
	LDK	A4,2	INDICATE ACK RECEIVED 
	RB	CLT152
* 
*    POWER ON 
* 
CLT179	EQU	*
	LDK	A3,/E3 
	ANS	A3,CWTRST,A5	RESET LOOP TEST BIT 
	ABL	CLT100 
	XIF
	EJECT
* 
*    QUEUE
* 
*    GET LAST OUTPUT DWT AND SET CHANNEL FREE.
*    IF LOCAL DEVICE CHECK OUTPUT QUEUE AND SEND
*    IF SOMETHING THERE.
*    IF REMOTE DEVICE CHECK QUEUE OF CHANNEL'S OTHER
*    TERMINAL AND SEND IF SOMETHING THERE. IF NOTHING I 
*    IN THAT QUEUE, CHECK QUEUE OF INTERRUPTING TERMINAL
*    AND SEND IF SOMETHING THERE. 
* 
QUEUE	EQU	* 
	LDR*	A4,A5	GET LAST OUTPUT DWT 
	CM	CWTRTC,A5	RESET RETRANSMISSION COUNTER
	CMR	A5	SET CHANNEL FREE
* 
QUESEC	EQU	*	SECOND ENTRY IN SUBROUTINE 
	STR	A2,A15	SAVE A2 ON STACK
			U	=4 
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDK	A1,0	INDICATE READY FOR LOCAL	=4 
	LDR	A7,A7	LOCAL ?
	RF(Z)	QUEU01	YES 
	XIF
	IFF	RECHAN=0 
	LDK	A1,1	INDICATE FIRST TRIAL
	CWR	A7,A5	REMOTE TERMINAL 2 ?
	RF(E)	QUEU20	NO
	XIF
QUEU01	LDKL	A8,CWTEQ	QUEUE FIRST TERMINAL 
QUEU03	ADR	A8,A5	ADD CWT-TABLE-ADDRESS
QUEU04	EQU	*
	LDR*	A6,A8	QUEUE EMPTY ? 
			U	=4 
	IFT	RECHAN=0	U	=4
	RF(E)	QUEU05	YES	=4
	XIF		U	=4
	IFF	RECHAN=0 
	RF(E)	QUEU10	YES	=4
	IFF	LOCHAN=0 
	LDR	A7,A7	 
	RF(Z)	QUEU06	PREVENT HANG UP 
	XIF
	IFF	RECHAN=0 
	CWR	A6,A4	SAME DEVICE IN QUEUE ? 
	RF(E)	QUEU06	YES 
	LD	A2,CWTBLK,A5
	RF(N)	QUEU05	BLOCK SENDING RUNNING 
	XIF
QUEU06	EQU	*	 
	LD	A2,DWTOTQ,A6	TAKE DWT OUT OF QUEUE
	STR	A2,A8	SET NEXT DWT FIRST IN QUEUE
	LC	A2,DWTOCH,A6	GET LAST OUTPUT CHARACTER
	CF	A15,OUTLIN	SEND IT
QUEU05	LDR*	A2,A15	RELOAD A2
	CWR	A6,A4	DEVICE ALREADY IN OUTPUT QUEUE ? 
	RF(E)	QUEU30 
	LDR	A6,A4	GET LAST OUTPUT DWT
	RF(E)	QUEU30	UNDEFINED INTERRUPT 
	IFF	RECHAN=0 
	CWK	A6,1	SYNC ANSWER ? 
	RF(E)	QUEU30	YES 
			U	=4 
	LDK	A1,0 
	XIF		U	=4
	ABL	RTNA15 
	IFF	RECHAN=0	U	=4
QUEU10	LDR	A1,A1	READY ?
	RB(E)	QUEU05 
	LDK	A1,0 
			U	=4 
	CWR	A7,A5	TERMINAL 2 REMOTE ?
	RB(E)	QUEU01	NO
QUEU20	LDKL	A8,CWTEQ+2	NEXT QUEUE 
	RB	QUEU03
	XIF
QUEU30	ADKL	A15,4 
	RF	LTDISP
	IFF	RECHAN=0 
	EJECT
* 
* 
*    RESTSY = SUBROUTINE TO START OR RESTART
*             A TIMER FOR SYNC-SENDING
* 
RESTSY	EQU	*
	STR	A4,A15 
	LD	A4,CWTTP,A5	TIMER POINTER ZERO? 
	RF(NE)	RESY20
	LDR	A1,A5
	LDK	A4,CWTTP	TIMER POINTER 
	ADR	A4,A5	ADD CWT-ADDRESS
	CF	A15,SETIMP	SET TIMER
	DATA	SYNCUT,TIME 
	RF	RESY30
RESY20	LDKL	A4,-TIME
	ST*	A4,CWTTP,A5	RESTART TIME 
RESY30	LDR*	A4,A15	RELOAD A4
	ADKL	A15,2 
	LDR*	P,A15 
	EJECT
* 
* 
*    TIME-OUT ROUTINE FOR SYNC-SENDING
*    IF NOTHING HAPPENS ON A LINE IN 500 MS 
*    SYNC-CHARACTER IS SENT.
* 
SYNCUT	EQU	*
	CM	CWTTP,A1	RESET TIMER POINTER
	LDR	A5,A1
	LD	A2,CWSYNC,A1	GET SYNC CHARACTER 
	XRKL	A2,/800	CHANGE TERMINAL NUMBER
	ST	A2,CWSYNC,A1	STORE
	LDK	A6,1 
SYNC02	EX	CWTOTR,A1	OUTPUT
	RF(A)	SYNC04	ACCEPTED
	RF(U)	EXITA
	CF	A15,RESTSY	RESTART SYNC TIMER 
	RF	EXITA 
SYNC04	EQU	*
	STR	A6,A1	STORE "1" AS LAST OUTPUT DWT 
* 
	IFT	LOGING=1 
* 
	CF	A15,LOGG	LOGG OF OUTPUT CHARACTER 
	XIF
* 
	IFF	RECHAN=0 
	LDR	A3,A2
	SLL	A3,4 
	RF(NN)	SYNC05
	ADK	A5,2 
SYNC05	EQU	*
	ANK	A2,/FF 
	XRS	A2,LRCACK,A5	UPDATE LRC-ACKUMULATOR
	LD	A4,CWTRST,A1	LOOP MODE ?
	LDR	A3,A4
	ANK	A4,/80 
	RF(E)	EXITA	NO 
	ANK	A3,/60 
	RF(E)	SYNC20	THIRD SYNC
	SUK	A3,/20 
	RF(NE)	SYNC10	FIRST SYNC 
	LDK	A3,/20	SECOND SYNC 
SYNC10	XRS	A3,CWTRST,A1	CHANGE COUNTER
EXITA	ABL	TDISP	DISPATCH
SYNC20	LDKL	A6,DWREMU	SET DWT-ADDRESS 
	LD	A7,DWTOR,A6	ORDER 
	ANK	A7,/FF 
	LD	A8,DWTECB,A6	ECB-ADDRESS
	LD	A3,DWTADR,A6	ADDRESS TO ADDRESSBLOCK
	ENB
	ABI	INTADR,A3	GO TO INTERRUPT HANDLER
	XIF
	EJECT
* 
*   CHARACTER INPUT 
* 
LTCHRI	EQU	*
RTCHRI	EQU	*
	LDK	A2,INDARQ
	ORS	A2,DWTST,A6	SET INPUT REQUESTED IN DWT 
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	RF	LTDISP	LOCAL DISPATCHER 
* 
*   CHARACTER OUTPUT
* 
LTCHRO	EQU	*
RTCHRO	EQU	*
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	CF	A15,OUTLIN	SEND CHARACTER 
* 
*   LOCAL DISPATCHER
* 
LTDISP	EQU	*
RTDISP	EQU	*
	ABL	TDISP	GO TO DISPATCHER 
* 
*   START OF A BLOCK  (REMOTE)
* 
RTSTBL	EQU	*
	IFF	RECHAN=0 
	SUK	A2,/03	BLOCK LENGTH < 3
	RF(N)	LTSTBL	YES, SEND WITHOUT LRC 
	LD	A2,DWTST,A6	DEVICE STATUS 
	ANKL	A2,DEVECH+LRCSEN	ECHO MODE OR LRC RUNNING ? 
	RF(NZ)	LTSTBL	YES, SEND WITHOUT LRC
	LDK	A2,STX	LOAD STX
	RB	RTCHRO	SEND 
	XIF
* 
*   END OF A BLOCK  (REMOTE)
* 
RTENBL	EQU	*
	IFF	RECHAN=0 
	LD	A2,DWTST,A6	DEVICE STATUS 
	ANK	A2,LRCSEN	LRC-SENDING ?
	RF(Z)	LTENBL	NO
	LDK	A2,ETB	LOAD ETB
	RB	RTCHRO	SEND 
	XIF
* 
*   END OF A BLOCK  (LOCAL) 
* 
LTENBL	EQU	*
	IFF	SOFTIM+RECHAN=0	U	=4 
	LD	A2,DWTST,A6	DEVICE STATUS 
	ANK	A2,DEWDRQ	DEVICE WITHOUT DATA REQUEST ?
	RF(NZ)	LTEN20	YES
	CF	A15,RESTIM	RESET PRINTER TIMING 
LTEN20	EQU	*
	XIF		U	=4
* 
*   START OF A BLOCK  (LOCAL) 
* 
LTSTBL	EQU	*
	ABL	NDRETO	SET OK & RETURN TO DEVICE DRIVER
* 
	EJECT
* 
*    G E T C W T
* 
*    SUBROUTINE TO GET CWT-ADDRESS
*    AND INDICATION OF LOCAL/REMOTE-CONNECTION
*    IF BOTH CONNECTION TYPES ARE USED
* 
*    ON ENTRY:
*       A6 = DWT-ADDRESS
* 
*    ON EXIT: 
*       A5 = CWT-ADDRESS
*       A7 = 0 IF LOCAL CONNECTION
* 
GETCWT	EQU	*
	LDR*	A5,A6	CHANNEL PARAMETERS
	ANK	A5,/F
	SLL	A5,1	DOUBLE INDEX
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR*	A7,A6	CHANNEL PARAMETERS
	ANKL	A7,/0100	REMOTE CONNECTION ?
	RF(Z)	GET010	NO
	XIF
	IFF	RECHAN=0 
	LC	A7,DWTCP2,A6	CHANNEL PARAMETERS 2 
	SRL	A7,1 
	ANK	A7,1	CHANNEL NUMBER
	ORR	A5,A7	COMBINE WITH CH. UNIT INDEX
	ADK	A5,4	ADJUST FOR LOCAL
	SLL	A5,1	GET CHTAB DISPLACEMENT
	LDR	A7,A5	INDICATE REMOTE CONNECTION 
	XIF
GET010	LD	A5,CHTAB+2,A5	GET CWT-ADDRESS 
GETRTN	ADKL	A15,2	ADJUST STACK POINTER	=4 
	LDR*	P,A15	RETURN	=4 
	IFF	SOFTIM+RECHAN=0	U	=4 
	EJECT
* 
* 
*    R E S T I M
* 
*    SUBROUTINE TO RESET TIMER FOR SUPERVISION
*    OF MISSING DATA REQUESTS AND MISSING BLOCK 
*    CONTROL CHARACTERS.
* 
*    ON ENTRY:
*       A6=DWT-ADDRESS
* 
RESTIM	EQU	*
	INH
	STR	A7,A15	SAVE A7 ON STACK
	LD	A7,DWTLD1,A6	GET TIMER POINTER
	RF(Z)	REST20	TIMER ALREADY RESET 
	CM*	DWTLD1,A6	RESET TIMER
	CM	DWTLD1,A6	RESET TIMER POINTER 
REST20	LDR*	A7,A15	RELOAD A7
			U	=4 
	RB	GETRTN	RETURN	=4
	XIF		U	=4
	IFF	RECHAN=0 
	EJECT
* 
* 
*    R E S L R C
* 
*    SUBROUTINE TO RESET LRC-DEVICE POINTER,
*    BLOCKSENDING RUNNING INDICATOR AND LRC-SENDING BIT.
* 
*    ON ENTRY:
*       A5 = CWT-ADDRESS
*       A6 = DWT-ADDRESS
*       A7 = TERMINAL ADJUSTED CWT-ADDRESS
* 
RESLRC	EQU	*
	STR	A4,A15	SAVE A4 ON STACK
	CM	LRCDWT,A7	RESET LRC-DEVICE POINTER
	LDKL	A4,/FFFF-LRCSEN 
	ANS	A4,DWTST,A6	RESET LRC-SENDING BIT
	LDK	A4,1 
	ANS	A4,CWTBLK,A5	RESET BLOCKSENDING RUNNING IND. 
	LDR*	A4,A15	RELOAD A4
	RB	GETRTN	RETURN	=4
	XIF
	EJECT
* 
*    O U T L I N
* 
*    OUTLIN = SUBROUTINE TO SEND ONE CHARACTER VIA
*             CHANNEL UNIT
* 
* 
*    GET CWT-ADDRESS AND IF CHANNEL UNIT FREE SEND CHARACTER. 
*    RUNNING LRC-PROCESS CAN STOP OUTPUT FROM OTHER 
*    DEVICES ON SAME LINE. IF CHANNEL UNIT NOT FREE 
*    QUEUE OUTPUT 
* 
OUTLIN	EQU	*
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	KBDIR=1	U	=4 
	LDKL	A8,0	RESET REG FOR INDICATION 
	XIF		U	=4
	ANK	A2,/FF 
	CF	A15,GETCWT	GET CWT-ADDRESS
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	LOCAL ?
	RF(Z)	OUL100	YES 
	XIF
	IFF	RECHAN=0 
	LC	A3,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANK	A3,1	SECOND TERMINAL IN CHANNEL
	SLL	A3,1 
	LDR	A7,A5	GET CWT-ADDRESS
	ADR	A7,A3	TERMINAL ADJUSTED CWT-ADDRESS
	XIF
	EJECT
* 
*    IF UNIT NOT FREE QUEUE OUTPUT. 
*    IF REMOTE DEVICE AND LRC-PROCESS ALREADY 
*    RUNNING ON TERMINAL FOR ANOTHER DEVICE,
*    QUEUE THIS NEW OUTPUT IF LRC-CONTROL ON
*    IT IS WANTED.
*    ELSE SEND CHARACTER. 
* 
OUL100	INH
	LDR*	A3,A5	CHANNEL UNIT FREE ? 
	RF(NE)	OUL800	NO 
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(Z)	OUL400	NO
	XIF
	IFF	RECHAN=0 
	LDR	A3,A2
	SUK	A3,/82	STX ? 
	RF(NE)	OUL200	NO 
	EJECT
* 
*    S T X
* 
	LD	A3,LRCDWT,A7	LRC-PROCESS RUNNING ?
	RF(NE)	OUL175	YES
	LDK	A2,LRCSEN
	ORS	A2,DWTST,A6	INDICATE LRC-SENDING 
	LDK	A2,0 
	ST	A6,LRCDWT,A7	SET LRC-DEVICE 
	CM	LRCACK,A7	RESET LRC-ACKUMULATOR AND 
			INDICATE FIRST OBC 
OUL150	LD	A4,DWTCP2,A6	CHANNEL PARAMETERS 2 
	LDK	A3,0	SET DEVICE NUMBER TO ZER0 
	RF	OUL505
OUL175	CWR	A3,A6	SAME LRC-DEVICE ?
	RF(NE)	OUL800	QUEUE OUTPUT 
	RF	OUL350
OUL200	SUK	A3,/15	ETB ? 
	RF(NE)	OUL300	NO 
	EJECT
* 
*    E T B
* 
	SC	A2,LRCACK,A7	INDICATE LAST OBC
	LC	A2,LRCACK+1,A7	GET LRC-ACKUMULATOR
	RB	OUL150
* 
*    OTHER OUTPUT 
* 
OUL300	LD	A8,DWTCP2,A6	CHANNEL PARAMETERS 2 
	CW	A6,LRCDWT,A7	SAME DEVICE SENDING WITH LRC 
	RF(Z)	OUL350	YES 
	LD	A3,CWTBLK,A5
	RF(NN)	OUL500	BLOCKSENDING NOT RUNNING 
	RF	OUL800	BLOCKSENDING RUNNING, QUEUE

OUL350	LD	A3,DWTST,A6	DEVICE STATUS 
	ANK	A3,DEWDRQ	DEVICE WITHOUT DATA REQUEST ?
	RF(Z)	OUL500	DEVICE WITH DRD 
	LD	A3,CWTBLK,A5
	RF(Z)	OUL500 
	ORKL	A2,/8000	INDICATE BLOCKSENDING
	RF	OUL500
	XIF
	EJECT
* 
* 
*    GET DEVICE ADDRESS AND WORK STATION ADDRESS
*    FROM CHANNEL PARAMETERS AND PUT INTO OUTPUT WORD 
* 
OUL400	EQU	*	U	=4 
	IFT	KBDIR=1	U	=4 
	LD	A8,DWTCP2,A6	CHANNEL PARAMETERS 2	=4
	XIF		U	=4
OUL500	EQU	*
	LD	A3,DWTCP2,A6	CHANNEL PARAMETERS 2 
	LDR	A4,A3
	ANK	A3,/7	DEVICE ADDRESS 
	SRC	A3,4	TO CORRECT PLACE
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	LOCAL ?
	RF(NZ)	OUL505	NO 
	XIF
	IFF	LOCHAN=0 
	ANKL	A4,/0700	WS-ADDRESS 
	SLC	A4,1	TO CORRECT PLACE
	IFF	RECHAN=0 
	RF	OUL508
	XIF
	IFF	RECHAN=0 
OUL505	EQU	*
	ANKL	A4,/0200	REMOTE CHANNEL NUMBER
	ORR	A3,A4	COMBINE WITH DEVICE ADDRESS
	LC	A4,DWTCP2,A6	LEFT BYTE OF CH. PAR. 2
	ANK	A4,1	REMOTE TERMINAL NUMBER
	SRC	A4,5	TO CORRECT PLACE
	XIF
OUL508	EQU	*
	ORR	A3,A4	COMBINE DEV.ADDR. AND WS-ADDR. 
	IFT	KBDIR=1	U	=4 
	ANKL	A8,KBLAMP	KB-LAMPS ON VDU-OUTPUT ?
	RF(NZ)	OUL900	YES, PUT LAMP CODE FIRST IN QUEUE
	XIF		U	=4
OUL510	ORR	A2,A3	OUTPUT WORD IN A2
	EJECT
* 
*   SEND CHARACTER AND SET CHANNEL BUSY 
* 
	IFF	RECHAN=0	U	=4
	LDK	A1,25	LOOP COUNTER FOR OTR 
	XIF		U	=4
OUL515	EX	CWTOTR,A5	OTR 
	RF(A)	OUL520	ACCEPTED
	IFT	RECHAN=0	U	=4
	RF(R)	OUL800	QUEUE	=4
	XIF		U	=4
	IFF	RECHAN=0	U	=4
	RF(U)	OUL518	UNKNOWN 
	SUK	A1,1	MORE TRIES ?
	RB(NZ)	OUL515	YES
	RF	OUL800	QUEUE
	XIF		U	=4
OUL518	ADKL	A15,20	RESET STACK
	LDK	A1,NOERR	SET NOT OPERABLE
	ABL	NDREP	GET REGISTERS AND RETURN TO DEV.DRIVER 
OUL520	EQU	*
* 
	IFT	LOGING=1 
* 
	CF	A15,LOGG	** LOGG OF OUTPUT CHARACTER ** 
* 
	XIF
* 
	STR	A6,A5	SET CHANNEL BUSY 
	ST	A2,CWTLOW,A5	STORE LAST OUTPUT WORD 
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(Z)	OUL550	NO
	XIF
	IFF	RECHAN=0 
	EJECT
* 
*    INDICATE BLOCKSENDING RUNNING IF STX TO DEVICE WITHOUT DATA REQUEST. 
*    UPDATE LRC-ACKUMULATOR AND SYNC-TIMER
* 
	ANKL	A3,/7000	MASK DEVICE ADDRESS
	RF(NZ)	OUL540	NORMAL CHARACTER 
	LD	A3,DWTST,A6	DEVICE STATUS 
	ANK	A3,DEWDRQ	DEVICE WITHOUT DATA REQUEST ?
	RF(Z)	OUL540	DEVICE WITH DRD 
	LD	A3,CWTBLK,A5	BLOCK SENDING INDICATOR
	RF(Z)	OUL540	BLOCKSENDING NOT ALLOWED
	LDK	A3,/80 
	SC	A3,CWTBLK,A5	INDICATE BLOCKSENDING RUNNING
OUL540	EQU	*
	ANK	A2,/FF 
	XRS	A2,LRCACK,A7	UPDATE LRC-ACKUMULATOR
	CF	A15,RESTSY	START OR RESTART SYNC-TIMER
	XIF
* 
*    SAVE LAST OUTPUT CHARACTER IN DWT AND RETURN 
* 
OUL550	EQU	*	U	=4 
	IFT	KBDIR=1	U	=4 
	LDR	A8,A8	KB-LAMPS ON VDU-OUTPUT ?	=4
	RF(NZ)	OUL700	YES
	XIF		U	=4
OUL600	SC	A2,DWTOCH,A6	SET LAST OUTPUT CHARACTER
OUL700	EQU	*
	IFT	CPU852=1 
	ABL	IHRET8	RESTORE A1-A8 AND RETURN
	XIF
* 
	IFT	CPU852=0 
	MLR	8,A15	RESTORE A1-A8 FROM STACK...
	INH		
	ADKL	A15,2	...ADJUST STACK POINTER...
	LDR*	P,A15	...AND RETURN 
	XIF
* 
	EJECT
* 
*    NORMALLY DWT-ADDRESS IS PUT LAST IN OUTPUT QUEUE 
* 
OUL800	EQU	*
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(NZ)	OUL805	YES
	XIF
	IFF	LOCHAN=0 
	LDR	A7,A5	CWT-ADDRESS
	XIF
OUL805	LD	A4,CWTEQ,A7	GET QUEUE POINTER 
	RF(E)	OUL820 
OUL810	CWR	A6,A4
	RB(E)	OUL600	DWT ALREADY IN QUEUE
	LD	A3,DWTOTQ,A4
	RF(E)	OUL830 
	LDR	A4,A3	FOLLOW THE THREAD
	RB	OUL810
OUL820	ST	A6,CWTEQ,A7	QUEUE DWT 
	RF	OUL840
OUL830	ST	A6,DWTOTQ,A4	QUEUE DWT
OUL840	CM	DWTOTQ,A6	SET END OF THREAD 
	RB	OUL600
	IFT	KBDIR=1	U	=4 
	EJECT
* 
*    KEYBOARD LAMPS ON VDU OUTPUT 
*    (KEYBOARD CONNECTED TO VDU INSTEAD OF SUM) 
* 
*    PUT LAMP CODE FIRST IN OUTPUT QUEUE
*    LOAD ESCAPE CODE FOR DATA TO KEYBOARD
*    IN OUTPUT REGISTER 
* 
OUL900	EQU	*
	LD	A4,DWTST,A6	DEVICE STATUS 
	LDKL	A1,/FFFF-LMPQUE 
	ANS	A1,DWTST,A6	RESET BIT 'LAMP CODE QUEUED' 
	ANK	A4,LMPQUE
	RB(NZ)	OUL510	LAMP CODE ALREADY QUEUED 
	LDR	A1,A5	CWT-ADDRESS
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	LDR	A7,A7	REMOTE ? 
	RF(Z)	OUL910	NO
	XIF
	IFT	KBDIR=1	U	=4 
	IFF	RECHAN=0 
	LDR	A1,A7	TERMINAL ADJUSTED CWT-ADDRESS
	XIF
	IFT	KBDIR=1	U	=4 
OUL910	LD	A4,CWTEQ,A1	OUTPUT QUEUE
	RF(Z)	OUL920	QUEUE EMPTY 
	CWR	A6,A4
	RB(E)	OUL600	THIS DWT ALREADY IN QUEUE 
OUL920	ST	A4,DWTOTQ,A6	MOVE QUEUE LINK
	ST	A6,CWTEQ,A1	QUEUE LAMP CODE 
	SC	A2,DWTOCH,A6	STORE LAMP CODE IN DWT 
	LDK	A1,LMPQUE
	ORS	A1,DWTST,A6	SET BIT 'LAMP CODE QUEUED' 
	LDK	A2,ESCKB	ESCAPE CODE FOR DATA TO KB
	RB	OUL510
	XIF		U	=4
	EJECT
* 
* 
*   C H L T O N 
* 
*   SUBROUTINE TO RESET CWT AND PERFORM CIO-START OF EVERY
*   CHLT IN SYSTEM. THE SUBROUTINE IS ENTERED FROM 'PFINIT' 
* 
* 
* 
CHLTON	EQU	*
	LD	A4,CHTAB
CON010	SUK	A4,2	ALL TREATED ? 
	RF(NZ)	CON020	NO TAKE NEXT 
RTNA15	ADKL	A15,2	RETURN AND ENABLE 
	ENB
	LDR*	P,A15 
CON020	EQU	*
	INH
	LD	A5,CHTAB,A4	LOAD CWT-ADDRESS
	RB(Z)	CON010 
	IFF	RECHAN=0 
	IFF	LOCHAN=0 
	CWK	A4,/A	LOCAL ?
	RF(L)	CON030	YES 
	XIF
	IFF	RECHAN=0 
CON025	EQU	*
	LDK	A3,/40	INDICATE CHANNEL NOT BUSY 
	EX	CWTCIS,A5	EXECUTE CIO-START 
	RF(U)	CON027 
	LDK	A3,0	INDICATE CHANNEL BUSY 
	CF	A15,RESTSY	START OR RESTART SYNC-TIMER
CON027	EQU	*
	ST	A3,CWTRST,A5	INDICATE C.U. PRESENT OR NOT 
	RF	CON035
	XIF
CON030	EQU	*
	EX	CWTCIS,A5	EXECUTE CIO-START 
CON035	EQU	*
	LDR*	A6,A5	GET LAST DWT
	RB(Z)	CON010 
	IFF	RECHAN=0 
	CWK	A6,1	SYNC ?
	RB(E)	CON010 
	XIF
	CMR	A5	RESET LAST OUTPUT 
	LDK	A2,/00	DUMMY 
	CF	A15,OUTLIN	SEND IT
	RB	CON010
	EJECT
* 
*   L O G G 
* 
*   IF CONDITIONALY ASSEMBLY IS SET EVERY INPUT AND 
*   OUTPUT CHARACTER ARE LOGGED 
* 
* 
	IFT	LOGING=1 
* 
LOGG	STR	A1,A15 
	LD	A1,POINT
	ADK	A1,2 
	CWK	A1,BUFE	BUFE IS MAX LOGG AREA
	RF(NE)	L1
	LDKL	A1,BUF	SET FIRST LOGG ADDRESS 
L1	ST	A1,POINT
	STR	A2,A1	LOGG OF INR OR OTR WORD
	LDR*	A1,A15
	ADKL	A15,2 
	LDR*	P,A15	RETURN
* 
* 
	XIF
SUMLOG	EQU	*
	IFT	LOGING=1 
POINT	DATA	BUF-2	LOGG POINTER 
* 
	IFT	RECHAN=0 
BUF	RES	200	LOGG AREA 
	XIF
	IFT	LOGING=1 
	IFF	RECHAN=0 
BUF	RES	1000	LOGG AREA
	XIF
BUFE	EQU	*
* 
	END

Full view