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

⟦4cae37efa⟧

    Length: 36660 (0x8f34)
    Notes: pts_type(SC)
    Names: »DRAS01.SC«

Derivation

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

PTS(SC)

	IDENT DRAS01 	REL 11.0 81-01-26 870105041100 

			=6, ETX-CHECK REMOVED
			PRR 11.0 80-03-06
			=5, CORR. OF FLASHING LIGHTS PROBLEM 
			DEV ADDR. CHAN. UNIT 5 AND 6 
			PRR 11.0 80-02-05
			NEW DEVICE DRIVER INTERFACE
			PRR 10.0 79-12-07
			=4, RTN FROM OUTASC IN INH MODE
			PRR 10.1 79-11-20
			=3, CHECK IF PFINIT PENDING
			PRR 10.1 79-10-04
			=2, CORR. OF RECOV.;ST. INP. IF THRP. ERR. 
			PRR 10.1 79-10-03
			=1, CHANGE TO EVEN PARITY
			PRR 10.1 79-09-18




* 
* 
********************************************************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRAS01 = DRIVER CHANNEL UNIT
* 
*            ASCU4Z 
* 
* 
* 
* 
* 
**********************************************************************
* 
*   THIS IS A CHANNEL UNIT DRIVER FOR TERMINALS 
*   CONNECTED TO CPU VIA ASCU4Z.
* 
*   AT INPUT INTERRUPT A CHARACTER IS READ TO REGISTER A2 
*   AND A BRANCH IS MADE TO INTERRUPT HANDLER FOR ACTUAL
*   DEVICE. 
* 
*   AFTER AN OUTPUT IS ENDED AN INTERRUPT IS
*   GENERATED FROM ASCU4Z. THE DRIVER CHECKS THE INTERRUPT
*   AND A BRANCH IS MADE TO INTERRUPT HANDLER.
* 
* 
	EJECT
* 
*   THE DRIVER ALSO INCLUDES THE FOLLOWING SUBROUTINES: 
* 
*   -ASCUON   EXECUTE CIO START ON EVERY ASCU4Z LINE AT POWER ON
* 
*   -OUTASC   SEND ONE CHARACTER
* 
*   CONTROL WORK TABLES ARE INCLUDED IN THE DRIVER
* 
*   NORMAL REGISTER USAGE IN THE DRIVER:
* 
*   A1 = RETURN CODE
*   A2 = INPUT CHARACTER
*   A3 = WORK REGISTER
*   A4 = DEVICE NUMBER * 2
*   A5 = CWT-ADDRESS
*   A6 = DWT-ADDRESS
*   A7 = ORDER
*   A8 = ECB ADDRESS
* 
* 
* 
	EJECT
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	IASCUZ	INTERRUPT FROM ASCU4Z 
	ENTRY	ASCUON	START AT POWER ON 
	ENTRY	ASCHAN	NUMBER OF CHANNEL UNITS 
* 
	ENTRY	ASCHRI	CHARACTER INPUT 
	ENTRY	ASSTBL	DEFINE START OF OUTPUT BLOCK
	ENTRY	ASCHRO	CHARACTER OUTPUT
	ENTRY	ASENBL	DEFINE END OF OUTPUT BLOCK
	ENTRY	ASDISP	LOCAL DISPATCHER
* 
	EJECT
* 
* 
********************************
* EXTERNAL TOSS MODULE ENTRIES *
********************************
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
	EXTRN	PFPOST	PWF POST PROCESSING FLAG	=3 
* 
	EXTRN	INTAS1	WS TABLE ADDRESS ASCU4Z 1 
	EXTRN	INTAS2	WS TABLE ADDRESS ASCU4Z 2 
	EXTRN	INTAS3	WS TABLE ADDRESS ASCU4Z 3 
	EXTRN	INTAS4	WS TABLE ADDRESS ASCU4Z 4 
	EXTRN	INTAS5	WS TABLE ADDRESS ASCU4Z 5 
	EXTRN	INTAS6	WS TABLE ADDRESS ASCU4Z 6 
	EXTRN	INTAS7	WS TABLE ADDRESS ASCU4Z 7 
	EXTRN	INTAS8	WS TABLE ADDRESS ASCU4Z 8 
* 
	EXTRN	NDSAV8	SAVE A3-A5, A7-A8 IN DWT
	EXTRN	NDGET8	GET A3-A5, A7-A8 FROM DWT 
	EXTRN	NDREDW	CALL RECOVERY FOR DEVICE
	EXTRN	NDRETO	OK & RETURN TO DEV. DRIVER
	EXTRN	NDREP	POP & RETURN TO DEV. DRIVER
	EXTRN	NDREPO	POP, OK & RETURN TO DEV. DRIVER 
* 
	EJECT
* 
******************
* DWT PARAMETERS *
******************
* 
* 
	EXTRN	DWTST	STATUS 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTOCH	LAST OUTPUT CHARACTER 
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	DWTADR	ADDRESS TO ADDRESSBLOCK 
	EXTRN	DWTOTQ	OUTPUT QUEUE LINK 
	EXTRN	DWTSB2	STACK BASE 2
	EXTRN	DWTCP2	CHANNEL PARAMETERS 2
* 
	EXTRN	INTADR	INTERRUPT ADDRESS DISPLACEMENT
	EXTRN	RECADR	RECOVERY ADDRESS DISPLACEMENT 
* 
	EJECT
* 
* 
************* 
* CONSTANTS * 
************* 
* 
* 
KB	EQU	1	DEVICE ADDRESS FOR KEYBOARD
DI	EQU	2	DEVICE ADDRESS FOR KEYBOARD LAMPS
* 
	EJECT
* 
************************
* CONDITIONAL ASSEMBLY *
************************
* 
*   A LOGG FUNCTION OF EVERY INPUT AND OUTPUT CHARACTER 
*   AND STATUS MAY BE INCLUDED TO THE DRIVER BY SETTING X:A=1 
* 
X:A	EQU	1 
LOGING	EQU	X:A
* 
*   THIS DRIVER HANDLES ONE OR UP TO SIX
*   CHANNELS BY SETTING X:B TO 1, 2, 3,...,6
* 
X:B	EQU	1 
ASCHAN	EQU	X:B
* 
	EJECT
* 
****************************************
*   CONTROL WORK TABLES FOR ASCU4Z 1   *
****************************************
* 
* 
*   L I N E  1
* 
DWA11	EQU	/1C	DEVICE ADDRESS
* 
* 
CWTA11	EQU	*	TABLE ENTRY
CWTLDW	EQU	*-CWTA11 
	DATA	0	LAST OUTPUT DWT 
CWTLON	EQU	*-CWTA11 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
CWTITA	EQU	*-CWTA11 
	DATA	INTAS1	WS TABLE ADDRESS 
CWTINR	EQU	*-CWTA11 
	INR	A2,0,DWA11	INR 
CWTOTR	EQU	*-CWTA11 
	OTR	A2,0,DWA11	OTR 
CWTCIS	EQU	*-CWTA11 
	CIO	A1,1,DWA11	CIO START 
CWTEQ	EQU	*-CWTA11
	DATA	0	QUEUE 
CWTCIH	EQU	*-CWTA11 
	CIO	A1,0,DWA11	CIO HALT
CWTSST	EQU	*-CWTA11 
	SST	A2,DWA11	SEND STATUS 
CWTST	EQU	*-CWTA11
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  2
* 
DWA12	EQU	DWA11+1	DEVICE ADDRESS
* 
* 
CWTA12	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS1	WS TABLE ADDRESS 
	INR	A2,0,DWA12	INR 
	OTR	A2,0,DWA12	OTR 
	CIO	A1,1,DWA12	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA12	CIO HALT
	SST	A2,DWA12	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  3
* 
DWA13	EQU	DWA11+2	DEVICE ADDRESS
* 
* 
CWTA13	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS1	WS TABLE ADDRESS 
	INR	A2,0,DWA13	INR 
	OTR	A2,0,DWA13	OTR 
	CIO	A1,1,DWA13	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA13	CIO HALT
	SST	A2,DWA13	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  4
* 
DWA14	EQU	DWA11+3	DEVICE ADDRESS
* 
* 
CWTA14	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS1	WS TABLE ADDRESS 
	INR	A2,0,DWA14	INR 
	OTR	A2,0,DWA14	OTR 
	CIO	A1,1,DWA14	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA14	CIO HALT
	SST	A2,DWA14	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
****************************************
*   CONTROL WORK TABLES FOR ASCU4Z 2   *
****************************************
* 
	IFF	ASCHAN=1 
* 
*   L I N E  1
* 
DWA21	EQU	/3C	DEVICE ADDRESS
* 
* 
CWTA21	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS2	WS TABLE ADDRESS 
	INR	A2,0,DWA21	INR 
	OTR	A2,0,DWA21	OTR 
	CIO	A1,1,DWA21	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA21	CIO HALT
	SST	A2,DWA21	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  2
* 
DWA22	EQU	DWA21+1	DEVICE ADDRESS
* 
* 
CWTA22	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS2	WS TABLE ADDRESS 
	INR	A2,0,DWA22	INR 
	OTR	A2,0,DWA22	OTR 
	CIO	A1,1,DWA22	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA22	CIO HALT
	SST	A2,DWA22	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  3
* 
DWA23	EQU	DWA21+2	DEVICE ADDRESS
* 
* 
CWTA23	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS2	WS TABLE ADDRESS 
	INR	A2,0,DWA23	INR 
	OTR	A2,0,DWA23	OTR 
	CIO	A1,1,DWA23	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA23	CIO HALT
	SST	A2,DWA23	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  4
* 
DWA24	EQU	DWA21+3	DEVICE ADDRESS
* 
* 
CWTA24	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS2	WS TABLE ADDRESS 
	INR	A2,0,DWA24	INR 
	OTR	A2,0,DWA24	OTR 
	CIO	A1,1,DWA24	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA24	CIO HALT
	SST	A2,DWA24	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	XIF
	EJECT
* 
****************************************
*   CONTROL WORK TABLES FOR ASCU4Z 3   *
****************************************
* 
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
* 
*   L I N E  1
* 
DWA31	EQU	/20	DEVICE ADDRESS
* 
* 
CWTA31	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS3	WS TABLE ADDRESS 
	INR	A2,0,DWA31	INR 
	OTR	A2,0,DWA31	OTR 
	CIO	A1,1,DWA31	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA31	CIO HALT
	SST	A2,DWA31	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  2
* 
DWA32	EQU	DWA31+1	DEVICE ADDRESS
* 
* 
CWTA32	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS3	WS TABLE ADDRESS 
	INR	A2,0,DWA32	INR 
	OTR	A2,0,DWA32	OTR 
	CIO	A1,1,DWA32	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA32	CIO HALT
	SST	A2,DWA32	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  3
* 
DWA33	EQU	DWA31+2	DEVICE ADDRESS
* 
* 
CWTA33	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS3	WS TABLE ADDRESS 
	INR	A2,0,DWA33	INR 
	OTR	A2,0,DWA33	OTR 
	CIO	A1,1,DWA33	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA33	CIO HALT
	SST	A2,DWA33	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  4
* 
DWA34	EQU	DWA31+3	DEVICE ADDRESS
* 
* 
CWTA34	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS3	WS TABLE ADDRESS 
	INR	A2,0,DWA34	INR 
	OTR	A2,0,DWA34	OTR 
	CIO	A1,1,DWA34	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA34	CIO HALT
	SST	A2,DWA34	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	XIF
	EJECT
* 
****************************************
*   CONTROL WORK TABLES FOR ASCU4Z 4   *
****************************************
* 
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	IFF	ASCHAN=3 
* 
*   L I N E  1
* 
DWA41	EQU	/30	DEVICE ADDRESS
* 
* 
CWTA41	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS4	WS TABLE ADDRESS 
	INR	A2,0,DWA41	INR 
	OTR	A2,0,DWA41	OTR 
	CIO	A1,1,DWA41	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA41	CIO HALT
	SST	A2,DWA41	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  2
* 
DWA42	EQU	DWA41+1	DEVICE ADDRESS
* 
* 
CWTA42	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS4	WS TABLE ADDRESS 
	INR	A2,0,DWA42	INR 
	OTR	A2,0,DWA42	OTR 
	CIO	A1,1,DWA42	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA42	CIO HALT
	SST	A2,DWA42	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  3
* 
DWA43	EQU	DWA41+2	DEVICE ADDRESS
* 
* 
CWTA43	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS4	WS TABLE ADDRESS 
	INR	A2,0,DWA43	INR 
	OTR	A2,0,DWA43	OTR 
	CIO	A1,1,DWA43	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA43	CIO HALT
	SST	A2,DWA43	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  4
* 
DWA44	EQU	DWA41+3	DEVICE ADDRESS
* 
* 
CWTA44	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS4	WS TABLE ADDRESS 
	INR	A2,0,DWA44	INR 
	OTR	A2,0,DWA44	OTR 
	CIO	A1,1,DWA44	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA44	CIO HALT
	SST	A2,DWA44	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	XIF
	EJECT
* 
****************************************
*   CONTROL WORK TABLES FOR ASCU4Z 5   *
****************************************
* 
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	IFF	ASCHAN=3 
	IFF	ASCHAN=4 
* 
*   L I N E  1
* 
DWA51	EQU	/0C	DEVICE ADDRESS	=5 
* 
* 
CWTA51	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS5	WS TABLE ADDRESS 
	INR	A2,0,DWA51	INR 
	OTR	A2,0,DWA51	OTR 
	CIO	A1,1,DWA51	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA51	CIO HALT
	SST	A2,DWA51	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  2
* 
DWA52	EQU	DWA51+1	DEVICE ADDRESS
* 
* 
CWTA52	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS5	WS TABLE ADDRESS 
	INR	A2,0,DWA52	INR 
	OTR	A2,0,DWA52	OTR 
	CIO	A1,1,DWA52	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA52	CIO HALT
	SST	A2,DWA52	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  3
* 
DWA53	EQU	DWA51+2	DEVICE ADDRESS
* 
* 
CWTA53	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS5	WS TABLE ADDRESS 
	INR	A2,0,DWA53	INR 
	OTR	A2,0,DWA53	OTR 
	CIO	A1,1,DWA53	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA53	CIO HALT
	SST	A2,DWA53	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  4
* 
DWA54	EQU	DWA51+3	DEVICE ADDRESS
* 
* 
CWTA54	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS5	WS TABLE ADDRESS 
	INR	A2,0,DWA54	INR 
	OTR	A2,0,DWA54	OTR 
	CIO	A1,1,DWA54	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA54	CIO HALT
	SST	A2,DWA54	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	XIF
	EJECT
* 
****************************************
*   CONTROL WORK TABLES FOR ASCU4Z 6   *
****************************************
* 
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	IFF	ASCHAN=3 
	IFF	ASCHAN=4 
	IFF	ASCHAN=5 
* 
*   L I N E  1
* 
DWA61	EQU	/00	DEVICE ADDRESS	=5 
* 
* 
CWTA61	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS6	WS TABLE ADDRESS 
	INR	A2,0,DWA61	INR 
	OTR	A2,0,DWA61	OTR 
	CIO	A1,1,DWA61	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA61	CIO HALT
	SST	A2,DWA61	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  2
* 
DWA62	EQU	DWA61+1	DEVICE ADDRESS
* 
* 
CWTA62	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS6	WS TABLE ADDRESS 
	INR	A2,0,DWA62	INR 
	OTR	A2,0,DWA62	OTR 
	CIO	A1,1,DWA62	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA62	CIO HALT
	SST	A2,DWA62	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  3
* 
DWA63	EQU	DWA61+2	DEVICE ADDRESS
* 
* 
CWTA63	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS6	WS TABLE ADDRESS 
	INR	A2,0,DWA63	INR 
	OTR	A2,0,DWA63	OTR 
	CIO	A1,1,DWA63	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA63	CIO HALT
	SST	A2,DWA63	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	EJECT
* 
* 
*   L I N E  4
* 
DWA64	EQU	DWA61+3	DEVICE ADDRESS
* 
* 
CWTA64	EQU	*	TABLE ENTRY
	DATA	0	LAST OUTPUT DWT 
	DATA	0	LAST OUTPUT CH./ NEXT OUTPUT CH.
	DATA	INTAS6	WS TABLE ADDRESS 
	INR	A2,0,DWA64	INR 
	OTR	A2,0,DWA64	OTR 
	CIO	A1,1,DWA64	CIO START 
	DATA	0	QUEUE 
	CIO	A1,0,DWA64	CIO HALT
	SST	A2,DWA64	SEND STATUS 
	DATA	0	CHANNEL STATUS
* 
* 
	XIF
	EJECT
* 
* 
***************** 
*   C H T A B   * 
***************** 
* 
*   THIS TABLE HOLDS ADDRESSES OF CONTROL WORK
*   TABLES CWT TO CHANNEL UNITS.
* 
* 
CHTAB	EQU	* 
	DATA	CHTABE-*	TABLE LENGTH 
	DATA	CWTA11
	DATA	CWTA12
	DATA	CWTA13
	DATA	CWTA14
	IFF	ASCHAN=1 
	DATA	CWTA21
	DATA	CWTA22
	DATA	CWTA23
	DATA	CWTA24
	XIF
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	DATA	CWTA31
	DATA	CWTA32
	DATA	CWTA33
	DATA	CWTA34
	XIF
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	IFF	ASCHAN=3 
	DATA	CWTA41
	DATA	CWTA42
	DATA	CWTA43
	DATA	CWTA44
	XIF
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	IFF	ASCHAN=3 
	IFF	ASCHAN=4 
	DATA	CWTA51
	DATA	CWTA52
	DATA	CWTA53
	DATA	CWTA54
	XIF
	IFF	ASCHAN=1 
	IFF	ASCHAN=2 
	IFF	ASCHAN=3 
	IFF	ASCHAN=4 
	IFF	ASCHAN=5 
	DATA	CWTA61
	DATA	CWTA62
	DATA	CWTA63
	DATA	CWTA64
	XIF
CHTABE	EQU	*	END OF TABLE 
* 
* 
	EJECT
* 
* 
*   A S C U O N 
* 
*   SUBROUTINE TO RESET CWT AND PERFORM CIO START 
*   OF EVERY ASCU4Z INPUT CHANNEL AT SYSTEM LOAD
* 
* 
ASCUON	EQU	*
	LD	A4,CHTAB	TABLE LENGTH 
	LDK	A3,0 
AON010	SUK	A4,2	ALL TREATED?
	ABL(Z)	RTNA15	YES
AON020	EQU	*
	LD	A5,CHTAB+2,A3	LOAD CWT-ADDRESS
	RB(Z)	AON010 
	LDKL	A1,/8000
	ORS	A1,CWTST,A5	SET INITIATION BIT 
	CMR	A5	RESET LAST OUTPUT	=2
	CM	CWTLON,A5	CLEAR LOC AND NOC	=2
	CM	CWTEQ,A5	RESET OUTPUT QUEUE	=3
	INH
	LDK	A1,/4	EVEN PARITY	=1 
	EX	CWTCIS,A5	CIO START OUTPUT
	LDK	A1,0 
	EX	CWTCIH,A5	CIO STOP OUTPUT 
	ENB
	ADK	A3,2 
	RB	AON010
	EJECT
* 
* 
********************************************
*   INTERRUPT ENTRY FROM ASCU4Z            *
********************************************
* 
* 
*    I A S C U Z
* 
*    INTERRUPT FROM ASCU4Z
* 
IASCUZ	EQU	*
	ST	P,INTSAV	SAVE LAST INTERRUPT
	MSR	8,A15	SAVE A1-A8 ON STACK
	LDK	A7,0	RESET ASCU4Z-COUNTER
	LD	A3,CHTAB
	SUK	A3,2	NUMBER OF LINES 
	RF	IAS007
* 
	EJECT
* 
*   GET CWT-ADDRESS FOR LINE 1. EXECUTE INR.
* 
IAS005	EQU	*
	ADK	A7,8	NEXT ASCU4Z 
IAS007	EQU	*
	CWR	A7,A3
	RF(NL)	EXITL	NOT VALID INTERRUPT 
	LD	A5,CHTAB+2,A7	GET CWT-ADDRESS FOR LINE 1
	EX	CWTINR,A5	INR 
	RF(NA)	IAS080
* 
*   CORRECT CWT-ADDRESS WITH RESPECT TO LINE NUMBER 
* 
IAS010	EQU	*
	LDR	A5,A2	INPUT WORD 
	SRL	A5,7 
	ANK	A5,/6	LINE NUMBER * 2
	LDR	A3,A5
	ADR	A7,A5
	LD	A5,CHTAB+2,A7	CORRECT CWT-ADDRESS 
* 
*   CHECK IF EXPECTED COMMAND IS INPUT
* 
IAS015	EQU	*
	ECR	A1,A2
	ANK	A1,/30 
	SUK	A1,/30	EXPECTED COMMAND
	RF(NZ)	IAS040	NOT INPUT
* 
	EJECT
* 
*   GET DWT-ADDRESS 
* 
IAS020	EQU	*
	LDK	A4,0	DEV NR * 2
	CF	A15,GETADR	GET ADDRESS POINTER AND
*			NUMBER OF DEVICES 
	LDR	A4,A6	DEVICE COUNTER 
	LDR	A8,A8	ADDRESS POINTER
	RF(Z)	IAS032	NOT DEFINED 
IAS025	EQU	*
	LDR*	A6,A8	GET DWT-ADDRESS 
	RF(Z)	IAS030	NOT DEFINED 
	LD	A1,DWTST,A6	DEVICE STATUS 
	ANK	A1,/40	INPUT DEVICE? 
	RF(NZ)	IAS035	YES
IAS030	EQU	*
	ADKL	A8,2	NEXT DWT 
	SUK	A4,2	LAST DWT? 
	RB(P)	IAS025	NO
IAS032	EQU	*
	LDR	A1,A3	LINE NR * 2
	ANK	A1,2	HIGH LINE NR ?
	RF(NZ)	EXITL	YES, SKIP INTERRUPT 
	ADK	A3,2	INCREMENT LINE NR 
	RB	IAS020
* 
EXITL	EQU	* 
	IFT	LOGING=1 
	CF	A15,INFLG1	GET LINE INFORMATION 
	CF	A15,LOGG	**LOGG INPUT** 
	XIF
EXIT	EQU	*
	ABL	TDISP
* 
	EJECT
* 
*   RETURN TO DEVICE DRIVER 
* 
IAS035	EQU	*
	LDK	A1,0	RESET RETURN CODE 
* 
	IFT	LOGING=1 
	CF	A15,INFLG2	GET LINE INFORMATION 
	CF	A15,LOGG	**LOGG INPUT CHARACTER** 
	XIF
* 
IAS038	EQU	*
	ANK	A2,/FF	CLEAN CHARACTER 
	LD	A7,DWTST,A6	DEVICE STATUS 
	ANK	A7,/20	INPUT REQUESTED?
	RF(Z)	IAS039	NO
	LDKL	A7,/FFDF
	ANS	A7,DWTST,A6	RESET FLAG 'INPUT REQUESTED' 
	ABL	NDREP	RETURN TO DEVICE DRIVER
* 
	EJECT
* 
*   GO TO INTERRUPT ROUTINE OF DEVICE DRIVER
* 
IAS039	EQU	*
	LD	A1,DWTADR,A6	ADDRESS BLOCK
	LD	A1,INTADR,A1	INTERRUPT ENTRY DEFINED? 
	RB(Z)	EXIT	NO, SKIP CHARACTER
	LDR	A5,A6	DWT ADDRESS
	ADKL	A5,DWTSB2	STACK BASE
	ABR	A1	DEVICE DRIVER INTERRUPT ENTRY 
* 
	EJECT
* 
*   CHECK IF ANY CHARACTER TO SEND
* 
IAS040	EQU	*
	LDR*	A6,A5	LAST OUTPUT DWT 
	LC	A2,CWTLON+1,A5
	ANK	A2,/FF 
	LD	A7,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANK	A7,/3F	DEVICE ADDRESS
	SUK	A7,DI	OUTPUT TO KEYBOARD LAMPS ? 
	RF(Z)	IAS050	YES 
* 
			U	=6 
IAS045	EQU	*
	LDR	A2,A2	SAVED CHARACTER
	RF(Z)	IAS060	NO CHARACTER SAVED
* 
	EJECT
* 
*   OUTPUT SAVED CHARACTER AND RETURN TO DEVICE DRIVER
* 
IAS050	EQU	*
	ANK	A2,/7F	CLEAN CHARACTER	=5
	EX	CWTOTR,A5	OTR 
	RB(NA)	EXIT
* 
	IFT	LOGING=1 
	CF	A15,INFLG2	GET LINE INFORMATION 
	CF	A15,LOGG	**LOGG OF OUTPUT CHARACTER** 
	XIF
* 
	LDR	A7,A7	OUTPUT TO KEYBOARD LAMPS?
	RF(Z)	IAS055	YES 
* 
	SC	A2,DWTOCH,A6	STORE OUTPUT CHARACTER IN DWT
	SLL	A2,8 
	ST	A2,CWTLON,A5	UPDATE LOC AND NOC 
IAS052	EQU	*
	ABL	NDREPO	RETURN TO DEV. DRIVER 
*			WITH RET. CODE = OK 
	EJECT
* 
*   OUTPUT TO KEYBOARD LAMPS
* 
IAS055	EQU	*
	LC	A4,CWTLON,A5
	ANK	A4,/FF	LAST OUTPUT CHARACTER = 0?
	RF(NE)	IAS060	NO, CODE /1C SENT
* 
	LC	A4,DWTOCH,A6	DATA TO KEYBOARD 
	SC	A4,CWTLON+1,A5	STORE FOR NEXT OTR 
	SC	A2,CWTLON,A5	STORE CODE /1C IN LOC
	RB	EXIT
* 
*   HALT OUTPUT IF NO CHARACTER TO SEND 
* 
IAS060	EQU	*
	LDK	A1,0 
	EX	CWTCIH,A5	CIO HALT OUTPUT 
				=5
	CM	CWTLON,A5	CLEAR LOC AND NOC 
				=5
	LDR	A7,A7	OUTPUT TO KEYBOARD LAMPS ? 
	RB(Z)	IAS052	YES, RETURN TO DEVICE DRIVER
* 
			U	=6 
	RB	EXIT	GO TO DISPATCHER 
* 
	EJECT
* 
*   CHECK STATUS
* 
IAS080	EQU	*
	EX	CWTSST,A5	SEND STATUS 
	ABL(NA)	IAS005 
* 
*   CORRECT CWT-ADDRESS WITH RESPECT TO LINE NUMBER 
* 
IAS085	EQU	*
	LDR	A5,A2	INPUT WORD 
	SRL	A5,7 
	ANK	A5,/6	LINE NUMBER * 2
	LDR	A3,A5
	ADR	A7,A5
	LD	A5,CHTAB+2,A7	CORRECT CWT-ADDRESS 
* 
	IFT	LOGING=1 
	CF	A15,INFLG1	GET LINE INFORMATION 
	CF	A15,LOGG	**LOGG STATUS**
	XIF
* 
	LD	A1,CWTST,A5	CHANNEL STATUS
	RF(N)	IAS130	INITIATION ON CHANNEL 
* 
	LDR*	A6,A5	LAST OUTPUT DWT 
	RF(NZ)	IAS087	*	=2 
	ANK	A2,2	THROUGPUT ERROR?	=2 
	RB(Z)	EXIT	NO	=2 
	LDK	A1,/5	EVEN PARITY	=2 
	EX	CWTCIS,A5	CIO START INPUT	=2
	RB	EXIT	*	=2 
IAS087	EQU	*	*	=2 
	CMR	A5	SET LINE FREE 
* 
	EJECT
* 
*   CHECK IF CHARACTER SAVED
* 
IAS090	EQU	*
	LC	A2,CWTLON+1,A5
	ANK	A2,/FF	SAVED CHARACTER?
	RF(NZ)	IAS105	YES
* 
*   CHECK IF QUEUE EMPTY
* 
IAS100	EQU	*
	LD	A6,CWTEQ,A5	OUTPUT QUEUE
	RF(Z)	IAS110	QUEUE EMPTY 
	LD	A2,DWTOTQ,A6	GET QUEUE LINK 
	ST	A2,CWTEQ,A5	STORE IT IN CWT 
	LC	A2,DWTOCH,A6	GET CHARACTER
* 
*   SEND CHARACTER AND GO TO DISPATCHER 
* 
IAS105	EQU	*
	CF	A15,OUTASC	SEND CHARACTER 
IAS110	EQU	*
	RB	EXIT	GO TO DISPATCHER 
	EJECT
* 
*   RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE
*    ON ACTUAL LINE EXCEPT THOSE IN ECHO MODE 
* 
* 
IAS130	EQU	*
	LDKL	A1,/3FFF	RESET BIT 'INPUT ON THIS LINE'	=2
	ANS	A1,CWTST,A5	RESET INITIATION BIT 
	LDK	A4,0 
	CF	A15,GETADR
	LDR	A4,A7	CHTAB DISPLACEMENT 
	LDR	A3,A6	DEVICE COUNTER 
	LDR	A7,A8	ADDRESS POINTER
	RB(Z)	IAS100	EXIT IF NOT DEFINED 
IAS140	EQU	*
	LDR*	A6,A7	GET DWT-ADDRESS 
	RF(E)	IAS160	NO DWT
	SRC	A6,1 
	RF(N)	IAS160 
	SLC	A6,1 
	LD	A1,DWTST,A6	DEVICE STATUS 
	ANK	A1,/40	INPUT DEVICE ?
	RF(Z)	IAS148	NO
	EJECT
* 
*   INPUT DEVICE. START INPUT. SET MARKBIT FOR INPUT ON THIS LINE.
* 
IAS143	EQU	*
	LDR	A1,A4	CHTAB DISPLACEMENT 
	ANK	A1,2 
	RF(Z)	IAS145	LOW LINE NUMBER 
	SUK	A4,2	ADJUST TO LOW LINE NUMBER 
IAS145	EQU	*
	LD	A5,CHTAB+2,A4	GET CWT-ADDRESS 
	LD	A1,CWTST,A5	CHANNEL STATUS
	SLL	A1,1 
	RF(N)	IAS150	INPUT ON THIS LINE ALREADY SET
	LDKL	A1,/4000
	ORS	A1,CWTST,A5	SET BIT 'INPUT ON THIS LINE' 
	LDK	A1,/5	EVEN PARITY	=1 
	EX	CWTCIS,A5	CIO START INPUT 
	LD	A1,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANK	A1,/3F	DEVICE ADDRESS
	SUK	A1,KB	KEYBOARD ? 
	RF(Z)	IAS150	YES 
	EJECT
* 
* 
*   OUTPUT DEVICE. CHECK IF ECHO MODE.
* 
IAS148	EQU	*
				=5
	LC	A1,DWTST,A6 
	ANK	A1,/20	ECHO MODE ? 
	RF(NE)	IAS160	YES
* 
*   GO TO RECOVERY ROUTINE
* 
IAS150	EQU	*
	LDK	A4,1	RECOVERY CAUSE
	CF	A15,NDREDW	CALL RECOVERY ROUTINE
IAS160	EQU	*
	ADK	A7,2 
	SUK	A3,2	ALL DEVICES TREATED?
	RB(NE)	IAS140	NO TAKE NEXT 
	RB	IAS100	CHECK QUEUE AND GO TO DISPATCHER 
	EJECT
* 
*    O U T A S C
* 
*   SUBROUTINE TO SEND A CHARACTER VIA ASCU4Z 
*   ON ENTRY: 
* 
*      A2 = OUTPUT CHARACTER IN RIGHT BYTE
*      A6 = DWT ADDRESS 
* 
OUTASC	EQU	*
	ANK	A2,/FF 
	CF	A15,GETCWT	GET CWT-ADDRESS
* 
*   CHECK IF LINE FREE OR OCCUPIED WITH SAME DEVICE 
* 
OUA010	EQU	*
	INH			=5 
	LD	A1,CWTST,A5	CHANNEL STATUS
	RF(N)	OUA020	INITIATION ON CHANNEL 
* 
	LDR*	A4,A5	LINE FREE?
	RF(Z)	OUA030	YES 
* 
	CWR	A4,A6	SAME DEVICE? 
	RF(E)	OUA045	YES 
* 
OUA020	EQU	*
	CF	A15,QUEUE 
	SC	A2,DWTOCH,A6	STORE OUTPUT CHARACTER IN DWT
	RF	OUA050
* 
	EJECT
* 
*   START OUTPUT ON LINE
* 
OUA030	EQU	*
	LD	A1,PFPOST	PWF POST PROCESSING FLAG	=3 
	RF(NZ)	OUA035	PFINIT PENDING	=3
				=5
	LDK	A1,/4	EVEN PARITY	=1 
	EX	CWTCIS,A5	CIO START OUTPUT
OUA035	EQU	*
	STR	A6,A5	STORE LAST DWT IN CWT
* 
*   SAVE CHARACTER FOR OUTPUT 
* 
OUA040	EQU	*
	LD	A1,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANK	A1,/3F	DEVICE ADDRESS
	SUK	A1,DI	OUTPUT TO KEYBOARD LAMPS ? 
	RF(NZ)	OUA045	NO 
* 
	SC	A2,DWTOCH,A6	STORE DATA FOR KEYBOARD IN DWT 
	LDK	A2,/1C	CODE FOR DATA TO KEYBOARD 
* 
OUA045	EQU	*
	ORK	A2,/80	INDICATE SOMETHING FOR OUTPUT	=5
	SC	A2,CWTLON+1,A5
OUA050	EQU	*
			*	=4 
	INH		*	=4
	ADKL	A15,2	ADJUST STACK POINTER	=4 
	LDR*	P,A15	RETURN	=4 
	EJECT
* 
*   G E T C W T 
* 
*   SUBROUTINE TO GET CWT-ADDRESS TO CURRENT OUTPUT LINE
* 
*   ON ENTRY: 
* 
*      A6 = DWT-ADDRESS 
* 
*   ON EXIT:
* 
*      A5 = CWT-ADDRESS 
*      A1,A4 ARE DESTROYED
* 
GETCWT	EQU	*
	LDR*	A1,A6	CHANNEL PARAMETERS 1
	ANK	A1,/7	CHANNEL UNIT INDEX 
	SLL	A1,2 
	LC	A5,DWTCP2,A6	LEFT BYTE OF CH. PAR. 2
	ANK	A5,/3	WS-ADDRESS 
	ORR	A1,A5	COMBINE CH.UN. INDEX AND WS-ADDR 
	SLL	A1,1	MAKE INDEX FOR CHTAB
	LD	A5,CHTAB+2,A1	GET CWT-ADDRESS 
	LDR	A4,A1	LINE NUMBER * 2
	ANK	A4,2 
	RF(NZ)	GTC010	HIGH LINE NUMBER 
	LD	A4,CWTST,A5	CHANNEL STATUS
	SLL	A4,1 
	RF(NN)	GTC010	NO INPUT ON THIS LINE
	LD	A5,CHTAB+4,A1	GET CWT-ADDRESS ON HIGH LINE
GTC010	EQU	*
	RTN	A15
* 
	EJECT
* 
* 
*   Q U E U E 
* 
*   SUBROUTINE TO QUEUE AN OUTPUT DWT 
* 
*   ON ENTRY: 
*      A5 = CWT ADDRESS 
*      A6 = DWT ADDRESS 
* 
* 
QUEUE	EQU	* 
	LD	A4,CWTEQ,A5	OUTPUT QUEUE
	RF(E)	QUE020 
QUE010	EQU	*
	CWR	A6,A4
	RF(E)	QUE050	THIS DWT IS ALREADY IN QUEUE
	LD	A3,DWTOTQ,A4
	RF(E)	QUE030	END OF THREAD FOUND 
	LDR	A4,A3	FOLLOW THE THREAD
	RB	QUE010
QUE020	EQU	*
	ST	A6,CWTEQ,A5	QUEUE DWT 
	RF	QUE040
QUE030	EQU	*
	ST	A6,DWTOTQ,A4	QUEUE DWT
QUE040	CM	DWTOTQ,A6	SET END OF THREAD 
QUE050	EQU	*
	ADKL	A15,2 
	LDR*	P,A15	RETURN
	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 INSTRUCTION 
	LDR*	A1,A15
	ADKL	A15,2 
	LDR*	P,A15	RETURN
* 
* 
POINT	DATA	BUF	LOGG POINTER 
* 
BUF	RES	250	LOGG AREA 
BUFE	EQU	*
* 
	XIF
	EJECT
* 
*   I N F L G 1 
* 
*   SUBROUTINE TO GET INFORMATION ABOUT CHANNEL UNIT INDEX AND
*   WORK STATION ADDRESS FOR USE IN LOGG. 
*   THE INFORMATION IS ADDED TO REGISTER A2 
* 
*   CH. UNIT INDEX IS STORED IN BITS 3-5
*   WORK ST. ADDR. IS STORED IN BITS 6-7
*   BITS 0-2 ARE SET TO ZERO
* 
*   ON ENTRY: 
* 
*      A2 = INPUT CHARACTER 
*      A7 = LINE NR * 2 
* 
*   ON EXIT:
* 
*      A2 = INPUT WORD WITH ADDED INFORMATION 
* 
	IFT	LOGING=1 
* 
INFLG1	EQU	*
	ANK	A2,/FF 
	SLL	A7,7 
	ORR	A2,A7	COMBINE WITH CHARACTER 
	SRL	A7,7 
	RTN	A15
* 
	XIF
	EJECT
* 
*   I N F L G 2 
* 
*   SUBROUTINE TO GET INFORMATION ABOUT CHANNEL UNIT INDEX, 
*   WORK STATION ADDRESS AND DEVICE ADDRESS FOR USE IN LOGG.
*   THE INFORMATION IS TAKEN FROM CHANNEL PARAMETERS AND ADDED
*   TO REGISTER A2. 
*   DEVICE ADDRESS IS STORED IN BITS 0-2
*   CH. UNIT INDEX IS STORED IN BITS 3-5
*   WORK ST. ADDR. IS STORED IN BITS 6-7
* 
*   ON ENTRY: 
* 
*      A2 = INPUT CHARACTER 
*      A6 =DWT ADDRESS
* 
*   ON EXIT:
* 
*      A2 = INPUT WORD WITH ADDED INFORMATION 
*      A4 IS DESTROYED
* 
	IFT	LOGING=1 
INFLG2	EQU	*
	ANK	A2,/FF	CLEAN 
	LDR*	A4,A6	GET CHANNEL PARAMETERS 1
	ANK	A4,/7	CHANNEL UNIT INDEX 
	SRC	A4,3 
	LC	A4,DWTCP2+1,A6	RIGHT BYTE OF CH. PAR. 2 
	SRC	A4,3 
	ANKL	A4,/FC00	DEV.ADDR AND CH. UNIT INDEX
	ORR	A2,A4	COMBINE WITH CHARACTER 
	LD	A4,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANKL	A4,/300	WORK STATION ADDRESS
	ORR	A2,A4	COMBINE WITH CHARACTER 
	RTN	A15
	XIF
	EJECT
* 
*   G E T A D R 
* 
*   SUBROUTINE TO GET ADDRESS IN INTERRUPT TABLE
*   FOR A GIVEN LINE- AND DEVICE NUMBER 
* 
*   ON ENTRY: 
* 
*      A3 = LINE NUMBER *  2
*      A4 = DEVICE NUMBER * 2 
*      A5 = CWT-ADDRESS 
* 
*   ON EXIT:
* 
*      A6 = TOTAL NUMBER OF DEVICES * 2 ON ACTUAL LINE
*      A8 = ADDRESS WHERE DWT-ADDRESS IS FOUND
* 
GETADR	EQU	*
	LD*	A8,CWTITA,A5	ADDRESS OF WORK STATION TABLE 
	RF(Z)	GET010	NOT DEFINED 
	CW	A3,-2,A8	WITHIN TABLE ? 
	RF(L)	GET005	YES 
	LDKL	A8,0	INDICATE NOT DEFINED 
	RF	GET010
GET005	EQU	*
	ADR	A8,A3	POSITION IN TABLE
	LDR*	A8,A8	POINTER TO DEVICE TABLE 
	RF(Z)	GET010	NOT DEFINED 
	LD	A6,-2,A8	GET TABLE LENGTH 
	ADR	A8,A4	ADDRESS TO DWT-ADDRESS 
GET010	EQU	*
* 
* 
*   RETURN AND ENABLE 
* 
RTNA15	EQU	*
	ADKL	A15,2 
	ENB
	LDR*	P,A15 
* 
	EJECT
* 
*   CHARACTER INPUT 
* 
ASCHRI	EQU	*
	LDK	A2,/20 
	ORS	A2,DWTST,A6	SET INPUT REQUESTED IN DWT 
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	RF	ASDISP	LOCAL DISPATCHER 
* 
*   START OF A BLOCK
* 
ASSTBL	EQU	*
* 
*   END OF A BLOCK
* 
ASENBL	EQU	*
	ABL	NDRETO	RETURN TO DEVICE DRIVER 
* 
*   CHARACTER OUTPUT
* 
ASCHRO	EQU	*
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	CF	A15,OUTASC	SEND CHARACTER 
* 
*   LOCAL DISPATCHER
* 
ASDISP	EQU	*
	ABL	TDISP	GO TO DISPATCHER 
	END

Full view