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

⟦fabc7a287⟧

    Length: 67890 (0x10932)
    Notes: pts_type(SC)
    Names: »DRRT01.SC«

Derivation

└─⟦6349b94c6⟧ Bits:30009684 Philips computer tape "600308"
    └─⟦this⟧ »M:92D1/DRRT01.SC« 

PTS(SC)

	IDENT DRRT01 	9.2DK 1 79-11-16  870105040920 

			=DK1, BLOCK - LOGGBUFFER 
			80-03-11 
			=9,TIMER RESET,TEST ORDER,INH-A15
			REL 9.1 79-06-26 
			=8, INTERRUPT ADDRESS DISPLACEMENT 
			REL 9.1 79-05-23 
			=7,CLT100 CORRECTED
			REL 9.1 79-04-06 
			=1-6,GEN UPDATE TO 8.2+ STATUS 
			REL 8.2 79-03-22 
			=6,C.U. PRESENT CHECK ERROR
			REL 8.2 79-03-20 
			=5,HANG UP PREVENT 
			REL 8.2 79-03-19 
			=4,TIME OUT ROUTINE ERROR
			REL 8.2 79-03-18 
			=3,DISPL. RECOVERY 
			REL 8.2 79-03-17 
			=2,LOOP TEST ERROR 
			REL 8.2 79-03-16 
			=1,IMPROV. OF TEST ORDER 
			REL 8.2 78-09-15 
* 
************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRRT01 = DRIVER CHANNEL UNIT FOR LOCAL
*            AND REMOTE TERMINALS 
* 
* 
* 
* 
* 
************************************************
* 
*   THIS IS THE DRIVER TO CHANNEL UNITS FOR LOCAL AND REMOTE TERMINALS. 
*   AT INTERRUPT AN INPUT WORD IS READ TO REGISTER A2. IF DATA
*   INPUT OR DATA REQUEST A BRANCH IS MADE TO INTERRUPT HANDLER 
*   FOR ACTUAL DEVICE.
*   IF CONTROL CHARACTER, THIS IS EXAMINED AND NECESSARY ACTIONS
*   ARE CARRIED OUT.
* 
* 
*   THE DRIVER ALSO INCLUDES THE FOLLOWING SUBROUTINES:-
* 
*   - OUTLIN   SEND ONE CHARACTER VIA CHLT
* 
*   - CHLTON   EXECUTE CIO-START ON EVERY CHLT IN SYSTEM
* 
*   - GETCHR   GET ONE CHARACTER FROM ECB-BUFFER
* 
*    CONTROL WORK TABLES FOR THE CHANNELS ARE 
*    INCLUDED IN THE DRIVER.
	EJECT
* 
* 
* 
*   THE FOLLOWING FUNCTIONS ARE ALSO INCLUDED IN THE DRIVER:- 
* 
*   - OUTPUT   SEND ONE CHARACTER, SAVE A3-A5 AND RETURN TO DISPATCHER
* 
*   - STREG    SAVE A3-A5 AND RETURN TO DISPATCHER
* 
*   - LDREG    IF INTERRUPT IS ALLOWED, RESTORE A3-A5 AND RETURN
*              TO USER VIA A5 
* 
*   - LDREGE   RESTORE A3-A5 AND RETURN TO USER VIA A5
* 
* 
* 
*   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 = ORDER
*   A8 = ECB-ADDRESS
* 
* 
* 
	EJECT
* 
*************** 
*    ENTRIES  * 
*************** 
* 
* 
	ENTRY	CHLT1	INTERRUPT FROM FIRST CHANNEL UNIT
	ENTRY	CHLT2	INTERRUPT FROM SECOND CHANNEL UNIT LOCAL 
	ENTRY	CHLT3	INTERRUPT FROM THIRD CHANEL LOCAL
	ENTRY	CHLT4	INTERRUPT FROM FOURtH CHANEL LOCAL 
	ENTRY	CHRT1	INTERRUPT FROM FIRST CHANNEL UNIT REMOTE 
	ENTRY	CHRT2	INTERRUPT FROM SECOND CHANNEL UNIT REMOTE
	ENTRY	CHRT3	INTERRUPT FROM THIRD CHANEL REMOT
	ENTRY	CHRT4	INTERRUPT FROM FOURTH CHANEL REMOTE
	ENTRY	OUTLIN	SEND ONE CHARACTER
	ENTRY	CHLTON	START OF CHLT 
	ENTRY	OUTPUT	SAVE REGISTERS, SEND CHARACTER
	ENTRY	CHTAB	CHANNEL TABLE
			AND GO TO DISPATCHER 
	ENTRY	LDREG	RELOAD REGISTERS AND RETURN
	ENTRY	LDREGE	RETURN FROM ECHO HANDLING 
	ENTRY	LDREGF	RETURN
	ENTRY	STREG	SAVE REGISTERS IN DWT AND DISPATCHER 
	ENTRY	GETCHR	GET ONE CHARACTER FROM ECB-BUFFER 

	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	ECHRTN	RETURN FROM ECHO
	ENTRY	ECHO	ECHO ROUTINE
	ENTRY	ECHEND	END OF ECHO 
	EJECT
* 
* 
**************************************
*    EXTERNAL TOSS MODULE ENTRIES    *
**************************************
* 
* 
	EXTRN	SAVE8	SAVE REGISTERS A1-A8 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	RETUR4	RESTORE A1-A4 
	EXTRN	RETUR8	RESTORE A1-A8 
	EXTRN	SETIME	SET TIMER 
	EXTRN	SETIMP	SET TIME
	EXTRN	INTLT1	INTERRUPT TABLE FOR LOCAL TERMINALS 
	EXTRN	INTLT2	INTERRUPT TABLE FOR CHLT2 
	EXTRN	INTLT3	INTERRUPT FROM CHLT3
	EXTRN	INTLT4	INTERRUPT FROM CHLT4
	EXTRN	INTRT1	INTERRUPT TABLE FOR REMOTE TERMINALS
	EXTRN	INTRT2	INTERRUPT TABLE REMOTE CHANNEL 2
	EXTRN	INTRT3	INTERRUPT TABLE FOR REMOTE CHANEL 3 
	EXTRN	INTRT4	INTERRUPT TABLE FOR REMOTE CHANEL 4 
	EXTRN	DISIOE	I/O REQUEST ERROR 
	EXTRN	DISEND	END I/O AND DISPATCH
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
	EXTRN	TENDIO 
	EXTRN	IHRET8	RESTORE A1-A8 WITHOUT ENABLE
* 
* 
* 
* 
*********************** 
*    DWT PARAMETERS   * 
*********************** 
* 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTOCH	LAST OUTPUT CHARACTER 
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	DWTADR	ADDRESS TO ADDRESS-BLOCK
	EXTRN	DWTST	STATUS 
	EXTRN	DWTWAT	
	EXTRN	DWTOTQ	OUTPUT QUEUE
	EXTRN	DWTA3	SAVE AREA A3 
	EXTRN	DWTA4	SAVE AREA A4 
	EXTRN	DWTA5	SAVE AREA A5 
	EXTRN	DWTSB2	STACK BASE 2 IN DWT 
	EXTRN	DWTTP	TIMER POINTER
	EXTRN	DWTECH	ECHO DEVICE DWT 
	EXTRN	INTADR	INTERRUPT ADDRESS DISPLACEMENT
	EXTRN	RECADR	RECOVERY ADDRESS DISPLACEMENT 
	EXTRN	ECHADR	ECHO ADDRESS DISPLACEMENT 
* 
	EJECT
* 
* 
********************
*    CONSTANTS     *
********************
* 
* 
NOERR	EQU	1	RETURN CODE NOT OPERABLE
TIME	EQU	5	TIME BEFORE TIME-OUT FOR SYNC
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	0
* 
* 
*    BY SETTING X:B TO 1,2,3 OR 4 THIS DRIVER HANDLES ONE 
*    OR UP TO FOUR LOCAL CHANNELS.
* 
X:B	EQU	1 
LOCHAN	EQU	1
* 
* 
*    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	0
* 
* 
*    BY SETTING X:D TO 1,2,3 OR 4 THIS DRIVER HANDLES ONE 
*    OR UP TO FOUR REMOTE CHANNEL CARDS.
* 
X:D	EQU	2 
RECHAN	EQU	1
* 
* 
* 
*   REMFC IS  " REMOTE TEST FILE CODE " 
*   STANDARD IS /15 
* 
X:E	EQU	/15 
REMFC	EQU	/15 
* 
*     ECHO FUNCTION CAN BE EXCLUDED BY
*     SETTING X:F = 0 
* 
X:F	EQU	1 
CECHO	EQU	01
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	0
* 
				DB
* 
*     BY SETTING  BLOCK=1  BLOCKSENDING IS PERMITTED
*     BY SETTING  BLOCK=0  BLOCKSENDING IS NOT PERMITTED
* 
BLOCK	EQU	0		DK1
* 
				DE
	EJECT
***************************************************** 
*    C W T L T 1                                    * 
***************************************************** 
* 
*    CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 1 
* 
DWA1	EQU	/03	DEVICEADDRESS
* 
CWTLT1	EQU	*	TABLE ENTRY
CWTLDW	EQU	*-CWTLT1 
	DATA	0	LAST OUTPUT DWT 
CWTLOW	EQU	*-CWTLT1 
	DATA	0	LAST OUTPUT WORD
CWTITA	EQU	*-CWTLT1 
	DATA	INTLT1	ADDRESS TO INTERRUPT TABLE 
CWTINR	EQU	*-CWTLT1 
	INR	A2,0,DWA1	INR
CWTOTR	EQU	*-CWTLT1 
	OTR	A2,0,DWA1	OTR
CWTCIS	EQU	*-CWTLT1 
	CIO	A2,1,DWA1	CIO-START
CWTRTC	EQU	*-CWTLT1 
	DATA	0	RETRANSMISSION COUNTER
CWTEQ	EQU	*-CWTLT1
	DATA	0	QUEUE 
	DATA	0	QUEUE 2 
CWTADD	EQU	*-CWTLT1 
* 
	IFT	ACKMUL=1 
* 
	DATA	0	NAK-ACKUMULATOR 
	DATA	0	RETR. FAULT-ACKUMULATOR 
	DATA	0	UNDEFINED-INTERRUPT-ACKUMULATOR 
ACKTIM	EQU	*-CWTLT1 
	DATA	0	PRINTER TIMEOUT ACKUMULATOR 
* 
	XIF
* 
	EJECT
* 
* 
***************************************************** 
*    C W T L T 2                                    * 
***************************************************** 
* 
*    CONTROL WORK TABLE FOR LOCAL CHANNEL NO. 2 
* 
CWTLT2	EQU	*
* 
	IFT	LOCHAN=2 
* 
* 
* 
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
* 
	IFT	LOCHAN=3 
* 
* 
* 
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
* 
	IFT	LOCHAN=4 
* 
* 
* 
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	*
* 
	IFT	LOCHAN=3 
* 
* 
* 
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
* 
	IFT	LOCHAN=4 
* 
* 
* 
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
* 
DWA5	EQU	/1	DEVICE ADDRESS
CWTRT1	EQU	*
	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
* 
CWTTP	EQU	*-CWTRT1
	DATA	0	TIMER POINTER 
CWSYNC	EQU	*-CWTRT1 
	DATA	/7055	SYNC CHARACTER
LRCDWT	EQU	*-CWTRT1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 1 
	DATA	0	DWT OF GOING LRC-PROCESS TERMINAL 2 
LRCACK	EQU	*-CWTRT1 
	DATA	0	LRC-ACKUMULATOR TERMINAL 1
	DATA	0	LRC-ACKUMULATOR TERMINAL 2
CWTRST	EQU	*-CWTRT1 
	DATA	0	CHANNEL STATUS WORD (LOOP-TESTS)
CWTBLK	EQU	*-CWTRT1	BLOCK SENDING INDICATOR 
	DATA	0	BIT  0: BLOCKSENDING RUNNING
			BIT 15: BLOCKSENDING ALLOWED 
	EJECT
********************************
*    C W T R T 2               *
********************************
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 2 
*    CONNECTED TO FIRST CHRT
* 
CWTRT2	EQU	*
	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
* 
	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	0	BLOCK SENDING INDICATOR 
	EJECT
********************************
*     C W T R T 3              *
********************************
* 
*    CHANNEL UNIT WORK TABLE FOR REMOTE CHANNEL NO. 1 
*    CONNECTED TO SECOND CHRT 
* 
CWTRT3	EQU	*
* 
	IFT	RECHAN=2 
* 
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
	IFT	RECHAN=3 
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
	IFT	RECHAN=4 
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
	IFT	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	0	BLOCK SENDING INDICATOR 
	XIF
	IFT	RECHAN=3 
	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	0	BLOCK SENDING INDICATOR 
	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	0	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	*
* 
	IFT	RECHAN=2 
	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
	IFT	RECHAN=3 
	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
	IFT	RECHAN=4 
	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
	IFT	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	0	BLOCK SENDING INDICATOR 
* 
	XIF
* 
	IFT	RECHAN=3 
	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	0	BLOCK SENDING INDICATOR 
* 
	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	0	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	*
* 
	IFT	RECHAN=3 
* 
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
	IFT	RECHAN=4 
* 
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
	IFT	RECHAN=3 
	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	0	BLOCK SENDING INDICATOR 
	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	0	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	*
* 
	IFT	RECHAN=3 
	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
	IFT	RECHAN=4 
	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
* 
	IFT	RECHAN=3 
	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	0	BLOCK SENDING INDICATOR 
* 
	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	0	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	0	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	0	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=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
* 
	DATA	CWTRT1
	DATA	CWTRT2
* 
	IFT	RECHAN=3 
	DATA	CWTRT3
	DATA	CWTRT4
	DATA	CWTRT5
	DATA	CWTRT6
* 
	XIF
* 
	IFT	RECHAN=2 
	DATA	CWTRT3
	DATA	CWTRT4
	XIF
* 
	IFT	RECHAN=4 
	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	*
	DATA	0 
	DATA	/8000	STATUS
	DATA	0,0 
	DATA	AREM	POINTER TO ADDRESS-BLOCK 
	DATA	0,0,0 
	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 
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 ?	=2
	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	DISIOE	I/O REQUEST ERROR 
LOPT10	EQU	*
	LD	A1,CWTRST,A2	GET CHANNEL LOOP STATUS
	ANK	A1,/40 
	RF(NE)	IHLP10	CHANNEL UNIT NOT BUSY
	LDK	A5,/E0	INDICATE REQUEST GOING
	ST	A5,CWTRST,A2	INDICATE LOOP-TESTING
	ABL	TDISP
	EJECT
* 
* 
*    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 
	ABL	DISEND 
	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	* 
* 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	LDK	A7,2	INDICATE CHLT1
	RF	CLT010
* 
CHLT2	EQU	* 
* 
* 
* 
* 
*    C H L T 2
* 
*    INTERRUPT FROM CHLT2 
* 
	IFT	LOCHAN=2 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	LOCHAN=2 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	LOCHAN=2 
	LDK	A7,4	INDICATE CHLT2
	RF	CLT010
* 
	XIF
* 
	IFT	LOCHAN=3 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	LOCHAN=3 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	LOCHAN=3 
	LDK	A7,4	INDICATE CHLT2
	RF	CLT010
* 
	XIF
* 
	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,4	INDICATE CHLT2
	RF	CLT010
* 
	XIF
* 
CHLT3	EQU	* 
* 
* 
* 
*    C H L T 3
* 
*    INTERRUPT FROM CHLT3 
* 
	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,6	INDICATE CHLT3
	RF	CLT010
	XIF
* 
* 
	IFT	LOCHAN=3 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	LOCHAN=3 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	LOCHAN=3 
	LDK	A7,6	INDICATE CHLT3
	RF	CLT010
* 
	XIF
* 
CHLT4	EQU	* 
* 
* 
* 
*    C H L T 4
* 
*    INTERRUPT FROM CHLT4 
* 
	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	* 
	ST	P,INTSAV
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	LDK	A7,10	INDICATE CHRT1 
	RF	CLT010
* 
*    C H R T 2
* 
*    INTERRUPT FROM CHRT2 
* 
CHRT2	EQU	* 
	IFT	RECHAN=2 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	RECHAN=2 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	RECHAN=2 
	LDK	A7,14	INDICATE CHRT2 
	RF	CLT010
	XIF
* 
	IFT	RECHAN=3 
	ST	P,INTSAV	STORE LAST INTERRUPT 
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	RECHAN=3 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	RECHAN=3 
	LDK	A7,14	INDICATE CHRT2 
	RF	CLT010
	XIF
* 
	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,14	INDICATE CHRT2 
	RF	CLT010
	XIF
* 
* 
*    C H R T 3
* 
*    INTERRUPT FROM CHRT3 
* 
CHRT3	EQU	* 
	IFT	RECHAN=3 
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	RECHAN=3 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	IFT	RECHAN=3 
	LDK	A7,18	INDICATE CHRT3 
	RF	CLT010
	XIF
* 
	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,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
* 
CLT010	LD	A5,CHTAB,A7	GET CWT-ADDRESS 
* 
	XIF
* 
	EX	CWTINR,A5	EXECUTE INR-INSTRUCTION 
* 
	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. 
* 
	SUK	A7,10
	RF(N)	CLT018	LOCAL INTERRUPT 
	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
CLT018	LDK	A1,0	RESET RETURN CODE 
	LDR	A3,A2	DATA REQUEST IMMEDIATE ? 
	RF(N)	CLT050 
	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 
	LDR	A7,A7	LOCAL ?
	RF(N)	CLTQUE	YES 
	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 
	CM	LRCDWT,A7	RESET LRC-DEVICE POINTER
	LDK	A4,1	RESET BLOCKSENDING RUNNING
	ANS	A4,CWTBLK,A5 
	SUK	A3,5 
	RF(E)	CLT043	ABC+ , GO TO DRIVER 
	IFT	ACKMUL=1 
* 
	IM	CWTADD+2,A5	UPDATE ERROR ACKUMULATOR
	XIF
* 
	SUK	A3,4	VRC-ERROR ? 
	RF(E)	CLT042	YES 
	LDK	A4,1 
	SUK	A3,2 
	RF(E)	CLT033 
	ADK	A3,4 
	RF(E)	CLT033 
	EJECT
* 
*    RESOLVE QUEUE AND EXAMINE RECOVERY BIT.
*    ONE RECOVERY ATTEMPT IS MADE AND THEN
*    RETURN CODE NOT OPERABLE IS SENT TO
*    DEVICE DRIVER. 
CLT030	LDR	A7,A7	REMOTE ? 
	RF(N)	CLTQUE	NO
	LD	A6,LRCDWT,A7
	SUR*	A6,A5	LRC-DEVICE ?
	RF(NE)	CLTQUE
	CM	LRCDWT,A7	RESET LRC-DEVICE POINTER
	LDK	A4,1 
	ANS	A4,CWTBLK,A5	RESET BLOCKSENDING RUNNNING 
CLTQUE	CF	A15,QUEUE	RESOLVE QUEUE 
CLT031	LC	A2,DWTST,A6	GET LEFT BYTE OF STATUS WORD
	LDR	A3,A2
	ANK	A2,/30	ECHO AND RECOVERY BIT 
	RF(NE)	CLT045
	ORK	A3,/10	INDICATE RECOVERY TRIAL DONE
	SC	A3,DWTST,A6	STORE 
CLT032	LDK	A4,0 
CLT033	LDK	A3,2	INDICATE RECOVERY OF DEVICE 
	LDK	A4,1		=3 
	RF	CPO025
	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	LDR*	A4,A6	BLOCK SENDING ? 
	RB(N)	CLT031 
CLT043	ABL	CLT107 
	EJECT
* 
*    POWER ON 
* 
*    RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE 
*    ON ACTUAL LINE EXCEPT THOSE OCCUPYING CHANNEL UNIT 
*    OR THOSE IN ECHO MODE. 
* 
*    ON EXIT TO RECOVERY ROUTINE: 
* 
*    A5 = STACKBASE 
*    A6 = DWT-ADDRESS 
* 
CHPOWO	EQU	*
	LDR*	A2,A5	GET CHANNEL OCCUPYING DEVICE
	CM	CWTRTC,A5	RESET RETRANSMISSION COUNTER
	LDR	A7,A7	REMOTE ? 
	RF(N)	CPO010	NO
	CM	LRCDWT,A7	RESET LRC-DEVICE POINTER
	LDK	A7,1 
	ANS	A7,CWTBLK,A5	RESET BLOCKSENDING RUNNING
CPO010	LDR	A3,A6	DEVICE COUNTER 
	ANK	A3,/FF 
	LDR	A1,A8	SET ADDRESS POINTER
CPO020	ADK	A1,2 
	LDR*	A6,A1	GET DWT-ADDRESS 
	RF(E)	CPO030 
	SRC	A6,1 
	RF(N)	CPO030 
	SLC	A6,1 
	LCR	A7,A6	GET LEFT OF CHANNEL PAR. 
	ANK	A7,1	INPUT DEVICE ?
	RF(NE)	CPO025	YES
	LDKL	A7,/EFFF	RESET RECOVERY BIT 
	ANS	A7,DWTST,A6
	LC	A7,DWTST,A6 
	ANK	A7,/20	ECHO MODE ? 
	RF(NE)	CPO030	YES
	CWR	A6,A2	DEVICE WAITING FOR CHANNEL ANSWER
	RF(E)	CPO030	YES 
CPO025	LD	A7,DWTADR,A6	ADDRESS TO ADDRESS-BLOCK IN A7 
	LD	A7,RECADR,A7	ADDRESS TO RECOVERY ROUTINE IN A7
	RF(E)	CPO030 
	LDKL	A5,DWTSB2	STACK BASE
	ADR	A5,A6
	INH
	CFR	A15,A7	GO TO RECOVERY ROUTINE
CPO030	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	*
	LDK	A1,NOERR	INDICATE NOT OPERABLE 
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	*
	LC	A3,CWTLOW,A5	LAST OUTPUT WORD 
	ANK	A3,/F0	KEEP DEVICE NUMBER
	CF	A15,QUEUE	RESOLVE QUEUE 
	LDKL	A4,/EFFF
	ANS	A4,DWTST,A6	RESET RECOVERY BIT IN STATUS WORD
	LDK	A4,2 
	ORS	A4,CWTRST,A5	INDICATE ACK IN CHANNEL STATUS
	LDR	A8,A3	OBC-ACK ?
	RF(NE)	CLT052
	LDKL	A3,/8000
	ORS	A3,LRCACK,A7	INDICATE ABC ALLOWED
	RF	CLT055
CLT052	EQU	*
	LDR*	A3,A6	DEVICE WITHOUT DATA REQUEST ? 
	RF(NN)	CLT055
	CW	A6,LRCDWT,A7
	ABL(NE)	CLT110 
	EJECT
* 
* 
*    PRINTER TIMING 
* 
CLT055	EQU	*
	INH
	LD	A3,DWTTP,A6	ADDRESS TO TIMER BLOCK
	RF(E)	CLT060 
* 
*    RESTART TIMER
* 
	LDKL	A3,-DRQTIM	RESTART TIMER
	ST*	A3,DWTTP,A6
	RF	CLT068
* 
*    START TIMER
* 
CLT060	EQU	*
	LDR	A1,A6	PARAMETER
	LDKL	A4,DWTTP	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	*
	LDR	A8,A8	OBC-ACK ?
	RF(E)	EXIT	YES 
	LDK	A1,0 
	LDR*	A4,A6	GET CHANNEL PARAMETER 
	RF(N)	CLT110	DEVICE WITHOUT DATA REQUEST 
	LDR	A2,A2	DATA REQUEST IMMEDIATE ? 
	RF(N)	CLT125	YES 
EXIT	ABL	TDISP	DISPATCHER EXIT
	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	DWTTP,A6	RESET POINTER TO TIMER BLOCK 
	LD	A3,DWTST,A6 
	RB(N)	EXIT 
	SLL	A3,2	ECHO MODE ? 
	RF(N)	CLT110	YES 
	LDR*	A5,A6	CHANNEL PARAMETER 
	ANK	A5,/F
	SLL	A5,1	2 * INDEX 
	LDK	A2,/83 
	CC	A2,DWTOCH,A6
	RF(NE)	DRQT10
	SUK	A5,8	LOCAL DEVICE ?	=4 
	RB(N)	EXIT 
	CF	A15,OUTLIN
	RB	EXIT
DRQT10	EQU	*
* 
	IFT	ACKMUL=1 
* 
	LD	A5,CHTAB+2,A5	GET CWT-ADDRESS 
	IM	ACKTIM,A5	INCREMENT ACKUMULATOR 
* 
	XIF
* 
	LD	A7,DWTOR,A6	TEST ORDER ?	=1 
	ANK	A7,/FE	U	=9(=1)
	RB(E)	CLT045	YES, GO TO DEV. INT. HANDLER	=1 
	ABL	CLT032	NO, EXECUTE DEV. RECOVERY	=1
	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
* 
	CWK	A6,1	SYNC BEFORE NAK?
	RB(E)	EXIT	YES 
	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
	STR	A6,A5	SET CHANEL BUSY
	ST	A2,CWTLOW,A5	STORE LAST OUTPUT WORD 
	LDR	A7,A7	REMOTE?
	RF(N)	CLT090	NO
	ANK	A2,/FF 
	XRS	A2,LRCACK,A7	UPDATE LRC-ACKUMULATOR
	CF	A15,RESTSY	START OR RESTART SYNC-TIMER
CLT090	ABL	TDISP
	EJECT
* 
* 
*    DATA INPUT AND DATA REQUEST
* 
*    LOCAL DEVICES: GET DWT-ADDRESS, GET ORDER AND
*    ECB-ADDRESS AND GO TO DEVICE-DEPENDENT INTERRUPT 
*    HANDLER. 
* 
*    REMOTE DEVICES:
* 
*    DATA INPUT:      SAME PROCEDURE AS FOR LOCAL DEVICES 
*    DATA REQUEST:    INPUT WORD IS COMPLEMENTED WITH 
*                     STATUS FROM CHANNEL PARAMETER.
*    STATUS MESSAGE:  NEW STATUS IS STORED IN CHANNEL 
*                     PARAMETER. THEN WAIT-STATUS-INDICATOR 
*                     IS CHECKED TO SEE IF THE DEVICE IS
*                     WAITING FOR A STATUS CHANGE. IF SO
*                     GET ORDER AND ECB-ADDRESS AND GO TO 
*                     DEVICE WITH THE NEW STATUS. IF NO 
*                     WAITING FOR STATUS, CONTROL IS GIVEN
*                     TO DISPATCHER.
* 
* 
CLT100	EQU	*
	LDR	A3,A2
	SRL	A3,8 
	LDR	A4,A3
	ANK	A3,/E	2 * LINE NUMBER
	SRL	A4,3 
	ANK	A4,/E	2 * DEVICE NUMBER
	CWK	A4,/E	SYNC-INPUT ? 
	RF(E)	CLT150	YES 
			LOOP SWITCH SET
	LD*	A8,CWTITA,A5	ADDRESS TO INTERRUPT TABLE
	RB(Z)	EXIT		=7 
	ADR	A8,A3
	LDR*	A8,A8	ADDRESS TO TERMINAL SECTION 
	RB(Z)	EXIT	NOT DEFINED 
	LDR*	A6,A8	GET ID-WORD 
	SUR	A6,A4
	RB(N)	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 
	ANKL	A6,/FFFE
	LCR	A3,A6	GET FIRST BYTE IN CHANNEL PARAMETER
	ANK	A3,1	DATA INPUT ?
	RF(NE)	CLT110	YES
	LDR*	A4,A6	GET CHANNEL PARAMETER 
	RB(N)	EXIT 
	LDR	A7,A7	REMOTE ? 
	RF(NN)	CLT120	YES
CLT105	LC	A3,DWTOCH,A6
	ANK	A3,/7F 
	SUK	A3,DUMMSP
	RF(NE)	CLT110
	LDR*	A3,A6	DEVICE WITHOUT DATA REQUEST	=9
	RF(N)	CLT110	YES, DO NOT TOUCH TIMER POINTER	=9
* 
************************* 
* 
CLT107	EQU	*
	INH
	LD	A7,DWTTP,A6	GET TIMER POINTER 
	RF(E)	CLT110	TIMER ALREADY RESET 
* 
************************* 
* 
	CM*	DWTTP,A6 
	CM	DWTTP,A6
CLT110	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
* 
CLT120	LDR	A7,A2	REMOTE DATA REQUEST ?
	ANK	A7,/FF 
	RF(NE)	CLT130
	CWR*	A6,A5	DRD BEFORE ANSWER ? 
	RB(E)	EXIT	YES 
CLT125	SRL	A4,4 
	ANK	A4,/C
	ORR	A2,A4	STATUS IN A2 
	RB	CLT105
CLT130	EQU	*
	LDR	A3,A4	SAVE OLD STATUS
	ANK	A4,/3F	RESET OLD STATUS
	SLL	A2,4 
	ANK	A2,/C0 
	ORR	A4,A2
	SC	A4,1,A6	STORE NEW STATUS IN DWT 
	LD	A4,DWTST,A6	GET STATUS WORD 
	ANKL	A4,/200	STATUS CHANGE ALLOWED ? 
	RF(E)	CLT154	EG. EXIT
	XRS	A4,DWTST,A6	RESET BIT
	XRR	A3,A2	VOUCHER STATUS CHANGED ? 
	ANK	A3,/80 
	RF(E)	CLT154	EG. EXIT
	ABL	CLT033 
	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
	EJECT
* 
*    POWER ON 
* 
CLT179	EQU	*
	LDK	A3,/E3 
	ANS	A3,CWTRST,A5	RESET LOOP TEST BIT 
	RB	CLT100
	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	* 
	STR	A2,A15	SAVE A2 
	LDR*	A4,A5	GET LAST OUTPUT DWT 
	CM	CWTRTC,A5	RESET RETRANSMISSION COUNTER
	CMR	A5	SET CHANNEL FREE
	LDK	A1,0 
	LDR	A7,A7	LOCAL ?
	RF(N)	QUEU01	YES 
	LDK	A1,1	INDICATE FIRST TRIAL
	CWR	A7,A5	REMOTE TERMINAL 2 ?
	RF(E)	QUEU20	NO
QUEU01	LDKL	A8,CWTEQ	QUEUE FIRST TERMINAL 
QUEU03	ADR	A8,A5	ADD CWT-TABLE-ADDRESS
QUEU04	EQU	*
	LDR*	A6,A8	QUEUE EMPTY ? 
	RF(E)	QUEU10	YES 
	LDR	A7,A7		=5
	RF(N)	QUEU06	PREVENT HANG UP	=5
	LD	A2,CWTBLK,A5
	LD	A2,CWTBLK,A5
	RF(N)	QUEU05	BLOCK SENDING RUNNING 
QUEU06	EQU	*		=5
	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 
	CWK	A6,1	SYNC ANSWER ? 
	RF(E)	QUEU30	YES 
	LDK	A1,0 
	ABL	RTNA15 
QUEU10	LDR	A1,A1	READY ?
	RB(E)	QUEU05 
	LDK	A1,0 
	CWR	A7,A5	TERMINAL 2 REMOTE ?
	RB(E)	QUEU01	NO
QUEU20	LDKL	A8,CWTEQ+2	NEXT QUEUE 
	RB	QUEU03
QUEU30	ADKL	A15,4 
	RF	EXITA 
	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 
	EX	CWTOTR,A1	OUTPUT
	RF(U)	EXITA
	STR	A6,A1	STORE "1" AS LAST OUTPUT DWT 
* 
	IFT	LOGING=1 
* 
	CF	A15,LOGG	LOGG OF OUTPUT CHARACTER 
	XIF
* 
	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 
	RB	CLT177
	EJECT
* 
*   O U T P U T 
* 
*   SEND ONE CHARACTER VIA 'OUTLIN' INDICATE INTERRUPTS 
*   ALLOWED AND SAVE A3-A5 IN DWT.
* 
OUTPUT	EQU	*
	ANK	A2,/FF 
	LDR	A1,A2
	SUK	A1,/82	STX ? 
	RF(E)	OUTP05 
	SUK	A1,/15	ETB ? 
	RF(NE)	OUTP10
OUTP05	LDR*	A1,A6	CHANNEL PARAMETER 
	ANK	A1,/C	REMOTE ? 
	RF(E)	LDRE10	NO
OUTP10	CF	A15,OUTLIN	SEND ONE CHARACTER VIA CHANNEL UNIT
	EJECT
* 
*   S T R E G 
* 
*   INDICATE INTERRUPTS ALLOWED AND SAVE A3-A5 IN DWT 
* 
STREG	EQU	* 
	INH
	LDKL	A1,/100 
	ORS	A1,DWTST,A6	INDICATE INTERRUPTS ALLOWED
	ST	A3,DWTA3,A6	SAVE REGISTER A3
	ST	A4,DWTA4,A6	              A4
	ST	A5,DWTA5,A6	              A5
	RB	EXITA 
	EJECT
* 
*   L D R E G * 
* 
*   IF INTERRUPT ALLOWED RESTORE A3-A5 FROM DWT AND RETURN
*   VIA A5. ELSE GO TO DISPATCHER.
* 
* 
LDREG	EQU	* 
	LD	A3,DWTST,A6 
	ANKL	A3,/100 
	RB(Z)	EXITA
	XRS	A3,DWTST,A6
* 
* 
*   L D R E G E 
* 
*   RESTORE S3-S5 FROM DWT AND RETURN TO USER VIA A5
LDREGF	EQU	*
	LD	A5,DWTA5,A6	                A5
LDREGE	EQU	*
	LD	A3,DWTA3,A6	RELOAD REGISTER A3
	LD	A4,DWTA4,A6	                A4
LDRE10	LD	A7,DWTOR,A6	GET ORDER 
	ANK	A7,/FF 
	LD	A8,DWTECB,A6
	RTN	A5	RETURN VIA A5-STACK 
	EJECT
* 
* 
*    G E T C H R
* 
*    SUBROUTINE TO GET ONE CHARACTER FROM ECB-BUFFER
* 
*    ON ENTRY:
* 
*    A3 = BUFFER INDEX
*    A8 = ECB-ADDRESS 
* 
*    ON EXIT: 
* 
*    A2 = CHARACTER 
*    A1 = 0 IF LAST CHARACTER ELSE # 0
* 
*    IF LAST CHARACTER IS REACHED A3 IS STORED IN ECB EFFECTIVE LENGTH
* 
* 
GETCHR	EQU	*
	LD	A1,4,A8	REQUESTED LENGTH
	SUR	A1,A3
	RF(NP)	GCH010	LAST CHARACTER REACHED 
	LD	A2,2,A8	GET BUFFER ADDRESS
	ADR	A2,A3
	LCR	A2,A2	CHAR. TO A2
	ANK	A2,/FF 
	ADK	A3,1	INCREMENT BUFFER INDEX
	RF	GCH020
GCH010	ST	A3,6,A8	STORE EFFECTIVE LENGTH
GCH020	EQU	*
RTNA15	ADKL	A15,2	RETURN AND ENABLE 
	ENB
	LDR*	P,A15 
	EJECT
* 
* 
*    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
* 
	ANK	A2,/FF 
	LDR*	A7,A6	CHANNEL PARAMETER 
	ANK	A7,/F
	SLL	A7,1	DOUBLE INDEX
	LD	A5,CHTAB+2,A7	GET CWT-ADDRESS 
	SUK	A7,8	REMOTE ?
	RF(N)	OUL100	NO
	LCR	A3,A6	LEFT BYTE IN CHANNEL PARAMETER 
	SRL	A3,2	SECOND TERMINAL IN CHANNEL ?
	ANK	A3,/2
	LDR	A7,A5	GET CWT-ADDRESS
	ADR	A7,A3	TERMINAL ADJUSTED CWT-ADDRESS
	EJECT
OUL100	INH
* 
*    IF UNIT NOT FREE QUEUE OUTPUT. 
*    IF REMOTE DEVICE AND LRC-PROCESS ALREADY 
*    RUNNINGON TERMINAL FOR ANOTHER DEVICE, 
*    QUEUE THIS NEW OUTPUT IF LRC-CONTROL ON
*    IT IS WANTED.
*    ELSE SEND CHARACTER. 
* 
	LDR*	A3,A5	CHANNEL UNIT FREE ? 
	RF(NE)	OUL800	NO 
	LDR	A7,A7	REMOTE ? 
	RF(N)	OUL500 
	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,0 
	ST	A6,LRCDWT,A7	SET LRC-DEVICE 
	CM	LRCACK,A7	RESET LRC-ACKUMULATOR AND 
			INDICATE FIRST OBC 
OUL150	LDR*	A3,A6	GET CHANNEL PARAMETER 
	ANKL	A3,/E00	SET DEVICE NUMBER TO ZERO 
	RF	OUL510
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	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	LDR*	A3,A6	DEVICE WITH DATA REQUEST ?
	RF(NN)	OUL500	DEVICE WITH DRD
	LD	A3,CWTBLK,A5
	RF(Z)	OUL500 
	ORKL	A2,/8000	INDICATE BLOCKSENDING
	LDK	A3,/80 
	SC	A3,CWTBLK,A5	INDICATE BLOCKSENDING RUNNING
	EJECT
* 
* 
*         SEND CHARACTER SECTION. 
*         CHARACTER IS SENT,SYNC-TIMER UPDATED
*         LAST OUTPUT DWT AND LAST OUTPUT CHARACTER 
*         IS SAVED. IF OLRC-CHAR LRC-POINTERS FOR 
*         DWT AND ACKUMULATOR IS UPDATED. 

OUL500	EQU	*
	LDR*	A3,A6	CHANNEL PARAMETER 
	ANKL	A3,/7E00
OUL510	ORR	A2,A3	OUTPUT WORD IN A2
* 
* 
* 
OUL515	EX	CWTOTR,A5	OTR 
	RF(R)	OUL800	REFUSED 
	RF(A)	OUL520	ACCEPTED
	ADKL	A15,20	RESET STACK
	LDK	A1,1 
	LD	A2,DWTADR,A6	ADDRESS TO ADDRESSBLOCK
	ABI	INTADR,A2	GO TO INTERRUPT HANDLER	=8 
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 
	LDR	A7,A7	REMOTE ? 
	RF(N)	OUL600 
	ANK	A2,/FF 
	XRS	A2,LRCACK,A7	UPDATE LRC-ACKUMULATOR
	CF	A15,RESTSY	START OR RESTART SYNC-TIMER
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		U	=9
	ADKL	A15,2	...AND	=9 
	LDR*	P,A15	       RETURN	=9
	XIF
* 
	EJECT
* 
*    NORMALLY DWT-ADDRESS IS PUT LAST IN OUTPUT QUEUE 
* 
OUL800	EQU	*
	LDR	A7,A7	REMOTE ? 
	RF(NN)	OUL805	YES
	LDR	A7,A5	CWT-ADDRESS
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
	LDK	A4,0 
OUL840	ST	A4,DWTOTQ,A6	SET OR RESET OUTPUT QUEUE LINK 
	RB	OUL600
	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 
	ABL	RTNA15 
CON020	EQU	*
	INH
	LD	A5,CHTAB,A4	LOAD CWT-ADDRESS
	RB(Z)	CON010 
	CWK	A4,/A	LOCAL ?
	RF(L)	CON030	YES 
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	=6
	LD*	A1,CWTITA,A5 
	LDR	A2,A4
	ANK	A2,2 
	SUR	A1,A2
	LD	A2,2,A1	ANY DEVICE ON TERMINAL 1
	RF(Z)	CON028	NO,BLOCK SENDING ALLOWED
	LD	A2,10,A1	ANY DEVICE ON SECOND TERMONAL
	RF(NZ)	CON029	YES BLOCK SENDING NOT ALLOWED
CON028	LDK	A2,BLOCK	INDICATE BLOCKSENDING OR NOT	DK1
CONRET	ST	A2,CWTBLK,A5
	RF	CON035
CON029	LDK	A2,0 
	RB	CONRET	INDICATE BLOCK SENDING NOT PREMITTED 
CON030	EQU	*
	EX	CWTCIS,A5	EXECUTE CIO-START 
CON035	EQU	*
	LDR*	A6,A5	GET LAST DWT
	RB(Z)	CON010 
	CWK	A6,1	SYNC ?
	RB(E)	CON010 
	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
* 
* 
POINT	DATA	BUF	LOGG POINTER 
* 
BUF	RES	2000	LOGG AREA (500)	DK1
BUFE	EQU	*
* 
	XIF
* 
	EJECT
* 
* 
*    E C H O , E C H E N D
* 
*    SUBROUTINE TO ECHO CHARACTER CONTAINING TWO PARTS, 
*    ONE GENERAL AND ONE DEVICE-DEPENDENT 
* 
*    PART ONE: FIND DWT-ADDRESS OF ECHO-DEVICE, 
*              LOAD STACKBASE AND FIND ADDRESS
*              TO DEVICE-DEPENDENT ECHO-ROUTINE 
* 
*    PART TWO: ECHO ONE OR MORE CHARACTERS
*              CORRESPONDING TO ONE CHARACTER 
*              TO BE STORED IN INPUT ECB-BUFFER 
* 
* 
*    PART ONE FOLLOWS AND PART TWO CAN BE FOUND 
*    IN THE DRIVER MODULE CORRESPONDING TO ECHO 
*    OUTPUT DEVICE
* 
*    RESTRICTIONS IN DEVICE DEPENDENT ECHO DRIVER 
* 
*    A7 MUST NOT BE DESTROYED 
*    THE ECHO-ROUTINE SHOULD BE TERMINATED WITH A 
*    JUMP TO 'ECHRTN'.
* 
ECHEND	EQU	*
* 
	IFT	CECHO=1
* 
	LDKL	A7,/8000	INDICATE END I/O 
	XIF
ECHO	EQU	*
	IFT	CECHO=1
	ST	A3,DWTA3,A6	SAVE A3-A5 IN DWT 
	ST	A4,DWTA4,A6 
	ST	A5,DWTA5,A6 
	LD	A1,DWTST,A6	STATUS
	SLL	A1,2 
	RF(NN)	RETUR	NO ECHO REQUESTED 
	LDR	A4,A6	SAVE DWT-ADDRESS OF INPUT DEVICE 
	LD	A6,DWTECH,A6	DWT-ADDRESS OF OUTPUT DEVICE 
	ST	A4,DWTWAT,A6	SAVE DWT-ADDRESS OF INPUT DEVICE 
	LDKL	A5,DWTSB2 
	ADR	A5,A6	STACKBASE-ADDRESS IN A5
	LD	A1,DWTADR,A6	ADDRESS TO ADDRESS-BLOCK 
	ABI	ECHADR,A1	GO TO ECHO-ROUTINE DEVICE-DEPENDENT
	XIF
ECHRTN	EQU	*
	IFT	CECHO=1
	LDR	A7,A7	END? 
	RF(NN)	ERETUR	NO 
	CF	A15,TENDIO	END I/O OUTPUT DEVICE
ERETUR	LD	A6,DWTWAT,A6	RELOAD DWT-ADDRESS OF INPUT DEVICE 
RETUR	ABL	LDREGF	RELOAD A3-A5 AND RETURN VIA A5 
	END

Full view