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

⟦ad29c051c⟧

    Length: 46018 (0xb3c2)
    Notes: pts_type(SC)
    Names: »DRND01.SC«

Derivation

└─⟦7a1dcd5a9⟧ Bits:30009673 Philips computer tape "600134"
    └─⟦this⟧ »PTMON/DRND01.SC« 
└─⟦928b1fd3e⟧ Bits:30009671 Philips computer tape "600131"
    └─⟦this⟧ »PTMON/DRND01.SC« 

PTS(SC)

	IDENT DRND01 	REL 11.0 81-05-27 870105041100 

			=2, INTERRUPT TABLES INCLUDED
			REL 11.0 81-05-25
			=1, COND. ASS. FOR ONLY SUM-CONN.
			REL 11.0 81-01-26
* 
* 
* 
************************************************************
* 
*   PHILIPS TERMINAL SYSTEM  PTS
* 
*   DRND01  =  TERMINAL NETWORK DISTRIBUTOR 
* 
* 
* 
************************************************************
* 
* 
*   THIS PROGRAM CONTAINS INPUT AND OUTPUT ENTRIES
*   CALLED BY TERMINAL DEVICE DRIVERS. AT CALL, IT
*   CHECKS CHANNEL PARAMETERS IN DWT, AND BRANCHES
*   TO THE APPROPRIATE LINE DRIVER FOR EXECUTION OF 
*   THE I/O REQUEST. THIS CONSTRUCTION MAKES IT 
*   POSSIBLE TO HAVE ONLY ONE TERMINAL DEVICE DRIVER
*   FOR EACH TERMINAL DEVICE, IRRESPECTIVE OF 
*   CONNECTION TYPE. IT IS ALSO POSSIBLE TO USE 
*   SEVERAL TERMINAL DEVICE CHANNEL UNITS TOGETHER
*   IN THE SAME SYSTEM. 
* 
*   THE PROGRAM ALSO CONTAINS A NUMBER OF SERVICE 
*   SUBROUTINES TO BE USED BY TERMINAL DEVICE DRIVERS 
*   AND LINE DRIVERS. 
* 
	EJECT
* 
*   THE PROGRAM IS DIVIDED INTO A NUMBER OF SECTIONS. 
*   SECTIONS CONTAINING PROGRAM CODE ARE DIVIDED
*   INTO ROUTINES. THE ROUTINES ARE LISTED AT 
*   BEGINNING OF EACH SECTION. THE SECTIONS, IN 
*   ORDER OF APPEARANCE IN LIST, ARE: 
* 
*	NAME	   FUNCTION
* 
*	ENTRIES	   DECLARE ENTRY POINTS 
*	EXTERNALS   DECLARE EXTERNAL REFERENCES 
*	CONDITION   SET CONDITIONAL ASSEMBLY PARAMETERS 
*	CONSTANTS   SET CONSTANT VALUES 
*	DATA	   DATA AREAS
* 
*	DEVICE DR   ROUTINES CALLED BY DEVICE DRIVERS 
*	LINE DR	   ROUTINES CALLED BY LINE DRIVERS
* 
	EJECT
* 
*********** 
* ENTRIES * 
*********** 
* 
*    TERMINAL DEVICE DRIVER REQUESTS
* 
	ENTRY	INPUT	INPUT OF ONE CHARACTER 
	ENTRY	STABLK	DEFINE START OF BLOCK 
	ENTRY	OUTPUT	OUTPUT OF ONE CHARACTER 
	ENTRY	ENDBLK	DEFINE END OF BLOCK 
	ENTRY	ECHRTN	RETURN FROM ECHO
	ENTRY	ECHO	ECHO ROUTINE
	ENTRY	ECHEND	END OF ECHO 
	ENTRY	GETCHR	GET ONE CHARACTER FROM ECB-BUFFER 
	ENTRY	ABORT	ABORT INPUT REQUEST
* 
* 
*    TERMINAL DEVICE DRIVER EXIT ROUTINES 
* 
	ENTRY	LENDER	REQUEST ERR, END I/O & DISPATCH 
	ENTRY	LENDIS	END I/O & DISPATCH
	ENTRY	LDISP	DISPATCH 
* 
* 
*    LINE DRIVER EXIT ROUTINES
* 
	ENTRY	NDREPO	POP, OK & RETURN
	ENTRY	NDRETO	OK & RETURN 
	ENTRY	NDREP	POP & RETURN 
	ENTRY	NDRET	RETURN 
* 
	EJECT
* 
*    LINE DRIVER SERVICE ROUTINES 
* 
	ENTRY	NDSAV8	SAVE A3-A5, A7-A8 IN DWT
	ENTRY	NDGET8	GET A3-A5, A7-A8 FROM DWT 
	ENTRY	NDREWS	CALL RECOVERY FOR WORK STATION
	ENTRY	NDREDW	CALL RECOVERY FOR DEVICE
	ENTRY	NDGEDN	GET HIGEST DWT NUMBER ON WS 
	ENTRY	NDGEDW	CALCULATE DWT ADDRESS 
* 
	EJECT
* 
*    INTERRUPT TABLE FOR CHLT 
* 
	ENTRY	INTLT1,INTLT2,INTLT3,INTLT4
* 
*    INTERRUPT TABLE FOR CHRT 
* 
	ENTRY	INTRT1,INTRT2,INTRT3,INTRT4
* 
*    INTERRUPT TABLE FOR SALCUZ 
* 
	ENTRY	INTSL1,INTSL2,INTSL3,INTSL4
	ENTRY	INTSL5,INTSL6,INTSL7,INTSL8
* 
*    INTERRUPT TABLE FOR ASCU4Z 
* 
	ENTRY	INTAS1,INTAS2,INTAS3,INTAS4
	ENTRY	INTAS5,INTAS6,INTAS7,INTAS8
* 
*    INTERRUPT TABLE FOR PLC - LOCAL
* 
	ENTRY	INTPL1,INTPL2,INTPL3,INTPL4
* 
*    INTERRUPT TABLE FOR PLC - REMOTE 
* 
	ENTRY	INTPR1,INTPR2,INTPR3,INTPR4
* 
*    INTERRUPT TABLE FOR VIDEO
* 
	ENTRY	INTVU1,INTVU2,INTVU3,INTVU4
	ENTRY	INTVU5,INTVU6,INTVU7,INTVU8
* 
	EJECT
* 
************* 
* EXTERNALS * 
************* 
* 
*    TOSS ROUTINES
* 
	EXTRN	SAVE8	SAVE A1-A8 ON A15 STACK
	EXTRN	TDISP	TOSS DISPATCHER
	EXTRN	DISEND	END I/O & DISPATCH
	EXTRN	TENDIO	END I/O REQUEST 
* 
* 
*    REQUEST ROUTINES IN LINE DRIVERS 
* 
*      CHLT 
* 
	EXTRN	LTCHRI	CHARACTER INPUT 
	EXTRN	LTSTBL	START OF BLOCK
	EXTRN	LTCHRO	CHARACTER OUTPUT
	EXTRN	LTENBL	END OF BLOCK
	EXTRN	LTDISP	DISPATCH
* 
*      CHRT 
* 
	EXTRN	RTCHRI	CHARACTER INPUT 
	EXTRN	RTSTBL	START OF BLOCK
	EXTRN	RTCHRO	CHARACTER OUTPUT
	EXTRN	RTENBL	END OF BLOCK
	EXTRN	RTDISP	DISPATCH
* 
	EJECT
* 
*      SALCUZ 
* 
	EXTRN	SLCHRI	CHARACTER INPUT 
	EXTRN	SLSTBL	START OF BLOCK
	EXTRN	SLCHRO	CHARACTER OUTPUT
	EXTRN	SLENBL	END OF BLOCK
	EXTRN	SLDISP	DISPATCH
* 
*      ASCU4Z 
* 
	EXTRN	ASCHRI	CHARACTER INPUT 
	EXTRN	ASSTBL	START OF BLOCK
	EXTRN	ASCHRO	CHARACTER OUTPUT
	EXTRN	ASENBL	END OF BLOCK
	EXTRN	ASDISP	DISPATCH
* 
*      FT80 
* 
	EXTRN	FTCHRI	CHARACTER INPUT 
	EXTRN	FTSTBL	START OF BLOCK
	EXTRN	FTCHRO	CHARACTER OUTPUT
	EXTRN	FTENBL	END OF BLOCK
	EXTRN	FTDISP	DISPATCH
* 
*      PLC - LOCAL
* 
	EXTRN	PLCHRI	CHARACTER INPUT 
	EXTRN	PLSTBL	START OF BLOCK
	EXTRN	PLCHRO	CHARACTER OUTPUT
	EXTRN	PLENBL	END OF BLOCK
	EXTRN	PLDISP	DISPATCH
* 
	EJECT
* 
*      PLC - REMOTE 
* 
	EXTRN	PRCHRI	CHARACTER INPUT 
	EXTRN	PRSTBL	START OF BLOCK
	EXTRN	PRCHRO	CHARACTER OUTPUT
	EXTRN	PRENBL	END OF BLOCK
	EXTRN	PRDISP	DISPATCH
* 
*      VIDEO
* 
	EXTRN	VUCHRI	CHARACTER INPUT 
	EXTRN	VUSTBL	START OF BLOCK
	EXTRN	VUCHRO	CHARACTER OUTPUT
	EXTRN	VUENBL	END OF BLOCK
	EXTRN	VUDISP	DISPATCH
* 
	EJECT
* 
*    DWT DISPLACEMENTS
* 
	EXTRN	DWTCHP	CHANNEL PARAMETERS
	EXTRN	DWTST	STATUS 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTOR	INDEX AND ORDER
	EXTRN	DWTADR	DRIVER ADDRESS BLOCK ADDRESS
	EXTRN	DWTWAT	WAIT/ACTIVATE INDICATOR 
	EXTRN	DWTA3	SAVE AREA FOR A3 
	EXTRN	DWTA4	SAVE AREA FOR A4 
	EXTRN	DWTA5	SAVE AREA FOR A5 
	EXTRN	DWTSB2	STACK BASE
	EXTRN	DWTA7	SAVE AREA FOR A7 
	EXTRN	DWTA8	SAVE AREA FOR A8 
	EXTRN	DWTECH	DWT ADDRESS OF ECHO OUTPUT DEVICE 
* 
* 
*    ECB DISPLACEMENTS
* 
	EXTRN	ECBBA	BUFFER ADDRESS 
	EXTRN	ECBRL	REQUESTED LENGTH 
	EXTRN	ECBEL	EFFECTIVE LENGTH 
* 
* 
*    MISCELLANEOUS
* 
	EXTRN	RECADR	RECOVERY ADDR IN DRIVER ADDR BLOCK
	EXTRN	ECHADR	ECHO ADDRESS IN DRIVER ADDRESS BLOCK
* 
	EJECT
* 
************************
* CONDITIONAL ASSEMBLY *
************************
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	0
* 
* 
*	THE FOLLOWING CONDITIONS DEFINE WHICH CHANNEL UNITS 
*	FOR TERMINAL DEVICES THAT ARE USED IN THE SYSTEM. 
*	0 MEANS CHANNEL UNIT IS NOT USED. 
*	1 MEANS CHANNEL UNIT IS USED. 
* 
X:A	EQU	0 
LT	EQU	00	CHLT
* 
X:B	EQU	0 
RT	EQU	00	CHRT
* 
X:C	EQU	0 
SL	EQU	00	SALCUZ
* 
X:D	EQU	0 
AS	EQU	00	ASCU4Z
* 
X:E	EQU	0 
FT	EQU	00	FT80
* 
X:F	EQU	0 
PL	EQU	01	PLC - LOCAL 
* 
	EJECT
* 
X:G	EQU	0 
PR	EQU	01	PLC - REMOTE
* 
X:H	EQU	0 
VU	EQU	00	VIDEO 
* 
* 
*	ECHO FUNCTION IS INCLUDED IF CECHO=1
* 
X:I	EQU	1 
CECHO	EQU	00
* 
* 
*	CONDITIONAL ASSEMBLY PARAMETER FOR ONLY SUM-CONNECTION
*	NTONSU = 0 MEANS ONLY SUM-CONNECTION
* 
S1	EQU	SL+AS	U	=1 
S2	EQU	S1+FT	U	=1 
S3	EQU	S2+PL	U	=1 
S4	EQU	S3+PR	U	=1 
S5	EQU	S4+VU	U	=1 
* 
NTONSU	EQU	S5	U	=1
* 
	EJECT
* 
************* 
* CONSTANTS * 
************* 
* 
*    DWT STATUS FLAGS (DWTST) 
* 
DWFBSY	EQU	/8000	DEVICE BUSY
DWFECH	EQU	/2000	ECHO MODE
DWFINP	EQU	/0020	INPUT REQUESTED
* 
* 
*    MISCELLANEOUS
* 
NOTOPR	EQU	/0001	RETURN CODE "NOT OPERABLE" 
CONFER	EQU	/0001	RETURN CODE "CONFIGURATION ERROR"
REQERR	EQU	/8000	RETURN CODE "REQUEST ERROR"
MASKCT	EQU	/0F	MASK FOR CONNECTION TYPE (DWTCHP)
* 
	EJECT
* 
**************
* DATA AREAS *
**************
* 
	IFF	NTONSU=0	U	=1
* 
*    DISPATCH TABLES
* 
*      CHARACTER INPUT
INPTAB	EQU	*
	IFT	LT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	LT=1 
	DATA	LTCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	RT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	RT=1 
	DATA	RTCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	SL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	SL=1 
	DATA	SLCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	AS=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	AS=1 
	DATA	ASCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	FT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	FT=1 
	DATA	FTCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PL=1 
	DATA	PLCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PR=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PR=1 
	DATA	PRCHRI
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	VU=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	VU=1 
	DATA	VUCHRI
	XIF
	IFF	NTONSU=0	U	=1
DTABLN	EQU	*-INPTAB 
* 
* 
*      START OF BLOCK 
STBTAB	EQU	*
	IFT	LT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	LT=1 
	DATA	LTSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	RT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	RT=1 
	DATA	RTSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	SL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	SL=1 
	DATA	SLSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	AS=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	AS=1 
	DATA	ASSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	FT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	FT=1 
	DATA	FTSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PL=1 
	DATA	PLSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PR=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PR=1 
	DATA	PRSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	VU=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	VU=1 
	DATA	VUSTBL
	XIF
	IFF	NTONSU=0	U	=1
* 
* 
*      CHARACTER OUTPUT 
OUPTAB	EQU	*
	IFT	LT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	LT=1 
	DATA	LTCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	RT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	RT=1 
	DATA	RTCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	SL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	SL=1 
	DATA	SLCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	AS=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	AS=1 
	DATA	ASCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	FT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	FT=1 
	DATA	FTCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PL=1 
	DATA	PLCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PR=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PR=1 
	DATA	PRCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	VU=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	VU=1 
	DATA	VUCHRO
	XIF
	IFF	NTONSU=0	U	=1
* 
* 
*      END OF BLOCK 
ENBTAB	EQU	*
	IFT	LT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	LT=1 
	DATA	LTENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	RT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	RT=1 
	DATA	RTENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	SL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	SL=1 
	DATA	SLENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	AS=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	AS=1 
	DATA	ASENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	FT=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	FT=1 
	DATA	FTENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PL=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PL=1 
	DATA	PLENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PR=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PR=1 
	DATA	PRENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	VU=0 
	DATA	NDRETE
	XIF
	IFF	NTONSU=0	U	=1
	IFT	VU=1 
	DATA	VUENBL
	XIF
	IFF	NTONSU=0	U	=1
* 
* 
*      END OF REQUEST 
ENRTAB	EQU	*
	IFT	LT=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	LT=1 
	DATA	LTDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	RT=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	RT=1 
	DATA	RTDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	SL=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	SL=1 
	DATA	SLDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	AS=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	AS=1 
	DATA	ASDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	FT=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	FT=1 
	DATA	FTDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PL=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PL=1 
	DATA	PLDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	PR=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	PR=1 
	DATA	PRDISP
	XIF
	IFF	NTONSU=0	U	=1
* 
	IFT	VU=0 
	DATA	TDISP 
	XIF
	IFF	NTONSU=0	U	=1
	IFT	VU=1 
	DATA	VUDISP
	XIF
* 
	EJECT
* 
*    INTERRUPT TABLES 
* 
	IFT	LT=0	U	=2
*    DUMMY ENTRIES CHLT 
INTLT1	EQU	*	U	=2 
INTLT2	EQU	*	U	=2 
INTLT3	EQU	*	U	=2 
INTLT4	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	LT=1	U	=2
*   CHLT
INTLT1	DATA	0	U	=2
INTLT2	DATA	0	U	=2
INTLT3	DATA	0	U	=2
INTLT4	DATA	0	U	=2
	XIF		U	=2
* 
	IFT	RT=0	U	=2
*    DUMMY ENTRIES CHRT 
INTRT1	EQU	*	U	=2 
INTRT2	EQU	*	U	=2 
INTRT3	EQU	*	U	=2 
INTRT4	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	RT=1	U	=2
*    CHRT 
INTRT1	DATA	0	U	=2
INTRT2	DATA	0	U	=2
INTRT3	DATA	0	U	=2
INTRT4	DATA	0	U	=2
	XIF		U	=2
* 
	IFT	SL=0	U	=2
*   DUMMY ENTRIES SALCUZ
INTSL1	EQU	*
INTSL2	EQU	*	U	=2 
INTSL3	EQU	*	U	=2 
INTSL4	EQU	*	U	=2 
INTSL5	EQU	*	U	=2 
INTSL6	EQU	*	U	=2 
INTSL7	EQU	*	U	=2 
INTSL8	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	SL=1	U	=2
*    SALCUZ 
INTSL1	DATA	0	U	=2
INTSL2	DATA	0	U	=2
INTSL3	DATA	0	U	=2
INTSL4	DATA	0	U	=2
INTSL5	DATA	0	U	=2
INTSL6	DATA	0	U	=2
INTSL7	DATA	0	U	=2
INTSL8	DATA	0	U	=2
	XIF		U	=2
* 
	IFT	AS=0	U	=2
*   DUMMY ENTRIES ASCU4Z
INTAS1	EQU	*	U	=2 
INTAS2	EQU	*	U	=2 
INTAS3	EQU	*	U	=2 
INTAS4	EQU	*	U	=2 
INTAS5	EQU	*	U	=2 
INTAS6	EQU	*	U	=2 
INTAS7	EQU	*	U	=2 
INTAS8	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	AS=1	U	=2
*    ASCU4Z 
INTAS1	DATA	0	U	=2
INTAS2	DATA	0	U	=2
INTAS3	DATA	0	U	=2
INTAS4	DATA	0	U	=2
INTAS5	DATA	0	U	=2
INTAS6	DATA	0	U	=2
INTAS7	DATA	0	U	=2
INTAS8	DATA	0	U	=2
	XIF		U	=2
* 
	IFT	PL=0	U	=2
*    DUMMY ENTRIES PLC - LOCAL
INTPL1	EQU	*	U	=2 
INTPL2	EQU	*	U	=2 
INTPL3	EQU	*	U	=2 
INTPL4	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	PL=1	U	=2
*   PLC - LOCAL 
INTPL1	DATA	0	U	=2
INTPL2	DATA	0	U	=2
INTPL3	DATA	0	U	=2
INTPL4	DATA	0	U	=2
	XIF		U	=2
* 
	IFT	PR=0	U	=2
*    DUMMY ENTRIES PLC - REMOTE 
INTPR1	EQU	*	U	=2 
INTPR2	EQU	*	U	=2 
INTPR3	EQU	*	U	=2 
INTPR4	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	PR=1	U	=2
*    PLC - REMOTE 
INTPR1	DATA	0	U	=2
INTPR2	DATA	0	U	=2
INTPR3	DATA	0	U	=2
INTPR4	DATA	0	U	=2
	XIF		U	=2
* 
	IFT	VU=0	U	=2
*    DUMMY ENTRIES VIDEO
INTVU1	EQU	*	U	=2 
INTVU2	EQU	*	U	=2 
INTVU3	EQU	*	U	=2 
INTVU4	EQU	*	U	=2 
INTVU5	EQU	*	U	=2 
INTVU6	EQU	*	U	=2 
INTVU7	EQU	*	U	=2 
INTVU8	EQU	*	U	=2 
	XIF		U	=2
* 
	IFT	VU=1	U	=2
*    VIDEO
INTVU1	DATA	0	U	=2
INTVU2	DATA	0	U	=2
INTVU3	DATA	0	U	=2
INTVU4	DATA	0	U	=2
INTVU5	DATA	0	U	=2
INTVU6	DATA	0	U	=2
INTVU7	DATA	0	U	=2
INTVU8	DATA	0	U	=2
	XIF		U	=2
* 
	EJECT
* 
**************************
* DEVICE DRIVER ROUTINES *
**************************
* 
*   THIS SECTION CONTAINS SUBROUTINES CALLED FROM THE TERMINAL
*   DEVICE DRIVERS. THE ROUTINE CAN EITHER PERFORM THE REQUESTED
*   ACTION ITSELF, OR SWITCH CONTROL TO THE LINE DRIVER TO WHICH
*   THE DEVICE IS CONNECTED. WHEN THE LINE DRIVER HAS PERFORMED 
*   THE REQUESTED ACTIONS, IT WILL RETURN TO THE DEVICE DRIVER, 
*   EITHER DIRECTLY OR THROUGH THE TERMINAL NETWORK DISTRIBUTOR 
*   DRIVER. 
*   THE SECTION ALSO CONTAINS AN EXIT ROUTINE FOR THE TERMINAL
*   DEVICE DRIVERS. IT WILL OF COURSE NOT RETURN TO THE DEVICE
*   DRIVER. 
* 
* 
*   ROUTINES IN ORDER OF APPEARANCE IN CODE:
* 
*	NAME	FUNCTION 
* 
*	INPUT	FETCH ONE CHARACTER FROM INPUT DEVICE 
*	STABLK	DEFINE START OF OUTPUT BLOCK 
*	OUTPUT	SEND ONE CHARACTER TO OUTPUT DEVICE
*	ENDBLK	DEFINE END OF OUTPUT BLOCK 
*	ECHO	SWITCH CONTROL AT CHARACTER ECHO 
*	ECHRTN	RETURN FROM ECHO OUTPUT
*	GETCHR	GET CHARACTER FROM ECB BUFFER
*	ABORT	SET INPUT NO LONGER REQUESTED 
*	LDISP	DISPATCH AT I/O REQUEST COMPLETED 
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	INPUT 
* 
* FUNCTION: 
*	THIS ROUTINE HANDLES INPUT OF ONE CHARACTER 
*	FROM A DEVICE TO A TERMINAL DEVICE DRIVER.
* 
* CALL: 
*	CF	A5,INPUT 
* 
* INPUT:
*	A5  =	LOCAL STACK POINTER 
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	A1  =	BITS 0-14  NOT SIGNIFICANT
*                 BIT 15  1 IF MORE CHARACTERS
*	A2  =	BITS 0-7  ZERO
*		BITS 8-15  CHARACTER 
* 
************************************************************
* 
INPUT	EQU	* 
	IFF	NTONSU=0	U	=1
	LC	A1,DWTCHP,A6	CHANNEL PARAMETER
	ANK	A1,MASKCT	CLEAN CONNECTION TYPE
	SLA	A1,1	MAKE INDEX
	CWK	A1,DTABLN	INSIDE LIMIT?
	ABI(L)	INPTAB,A1	YES, ACTIVATE LINE DRIVER 
	RF	NDRETE	NO, ERROR
	XIF		U	=1
	IFT	NTONSU=0	U	=1
	ABL	LTCHRI	ACTIVATE SUM-DRIVER	=1
	XIF		U	=1
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	STABLK
* 
* FUNCTION: 
*	THIS ROUTINE IS CALLED FROM THE TERMINAL DEVICE 
*	DRIVERS TO DEFINE START OF AN OUTPUT BLOCK. 
*	THE ACTIONS TAKEN AT START OF BLOCK VARIES FOR
*	DIFFERENT LINE DRIVERS. 
* 
* CALL: 
*	CF	A5,STABLK
* 
* INPUT:
*	A2  =	MAXIMAL NR OF CHARACTERS IN BLOCK 
*	A5  =	LOCAL STACK POINTER 
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	A1  =	RETURN CODE 
*		0 IF OK
*		NOT 0 IF ERROR 
*	A2  =	DEVICE STATUS (IF RELEVANT, IE A1=0)
*	CR  =	CONTENTS OF A1
* 
************************************************************
* 
STABLK	EQU	*
	LC	A1,DWTCHP,A6	CHANNEL PARAMETER
	IFF	NTONSU=0	U	=1
	ANK	A1,MASKCT	CLEAN CONNECTION TYPE
	SLA	A1,1	MAKE INDEX
	CWK	A1,DTABLN	INSIDE LIMIT?
	ABI(L)	STBTAB,A1	YES, ACTIVATE LINE DRIVER 
	RF	NDRETE	NO, ERROR
	XIF		U	=1
	IFT	NTONSU=0	U	=1
	ANK	A1,1	LOCAL OR REMOTE ?	=1
	ABL(Z)	LTSTBL	LOCAL	=1 
	ABL	RTSTBL	REMOTE	=1 
	XIF		U	=1
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	OUTPUT
* 
* FUNCTION: 
*	THIS ROUTINE HANDLES OUTPUT OF ONE CHARACTER
*	FROM A TERMINAL DEVICE DRIVER TO A DEVICE.
* 
* CALL: 
*	CF	A5,OUTPUT
* 
* INPUT:
*	A2  =	BITS 0-7  IRRELEVANT
*		BITS 8-15  CHARACTER 
*	A5  =	LOCAL STACK POINTER 
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	A1  =	RETURN CODE 
*		0 IF OK
*		NOT 0 IF ERROR 
*	A2  =	DEVICE STATUS (IF RELEVANT, IE A1=0)
*	CR  =	CONTENTS OF A1
* 
************************************************************
* 
OUTPUT	EQU	*
	IFF	NTONSU=0	U	=1
	LC	A1,DWTCHP,A6	CHANNEL PARAMETER
	ANK	A1,MASKCT	CLEAN CONNECTION TYPE
	SLA	A1,1	MAKE INDEX
	CWK	A1,DTABLN	INSIDE LIMIT?
	ABI(L)	OUPTAB,A1	YES, ACTIVATE LINE DRIVER 
	RF	NDRETE	NO, ERROR
	XIF		U	=1
	IFT	NTONSU=0	U	=1
	ABL	LTCHRO	ACTIVATE SUM-DRIVER	=1
	XIF		U	=1
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	ENDBLK
* 
* FUNCTION: 
*	THIS ROUTINE IS CALLED FROM THE TERMINAL DEVICE 
*	DRIVERS TO DEFINE END OF AN OUTPUT BLOCK. 
*	THE ACTIONS TAKEN AT END OF BLOCK VARIES FOR
*	DIFFERENT LINE DRIVERS. 
* 
* CALL: 
*	CF	A5,ENDBLK
* 
* INPUT:
*	A5  =	LOCAL STACK POINTER 
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	A1  =	RETURN CODE 
*		0 IF OK
*		NOT 0 IF ERROR 
*	A2  =	DEVICE STATUS (IF RELEVANT, IE A1=0)
*	CR  =	CONTENTS OF A1
* 
************************************************************
* 
ENDBLK	EQU	*
	LC	A1,DWTCHP,A6	CHANNEL PARAMETER
	IFF	NTONSU=0	U	=1
	ANK	A1,MASKCT	CLEAN CONNECTION TYPE
	SLA	A1,1	MAKE INDEX
	CWK	A1,DTABLN	INSIDE LIMIT?
	ABI(L)	ENBTAB,A1	YES, ACTIVATE LINE DRIVER 
	RF	NDRETE	NO, ERROR
	XIF		U	=1
	IFT	NTONSU=0	U	=1
	ANK	A1,1	LOCAL OR REMOTE ?	=1
	ABL(Z)	LTENBL	LOCAL	=1 
	ABL	RTENBL	REMOTE	=1 
	XIF		U	=1
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	ECHO
* 
* FUNCTION: 
*    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
* 
*	ECHO IS USED WHEN A CHARACTER SHOULD BE ECHOED
*	ECHEND IS USED AT END OF INPUT REQUEST
*    THE ECHO-ROUTINE SHOULD BE TERMINATED WITH A 
*    JUMP TO 'ECHRTN'.
* 
* CALL: 
*	CF	A5,ECHO
*	CF	A5,ECHEND
* 
* INPUT:
*        A1  =    BITS 0-14  NOT SIGNIFICANT
*                  BIT 15  1 IF MORE CHARACTERS 
*	A2  =	BITS 0-7  NOT SIGNIFICANT 
*		 BITS 8-17  CHARACTER (IF ECHO)
*	A5  =	LOCAL STACK POINTER 
*	A6  =	DWT ADDRESS 
* 
	EJECT
* 
* OUTPUT: 
*      AT ENTRY TO ECHO OUTPUT ROUTINE: 
*        A1  =    BITS 0-14  NOT SIGNIFICANT
*                  BIT 15  1 IF MORE CHARACTERS 
*	A2  =	BITS 0-7  ZERO (IF ECHO)
*		 BITS 8-15  CHARACTER (IF ECHO)
*	A5  =	LOCAL STACK POINTER 
*	A6  =	ADDRESS OF OUTPUT DEVICE DWT
*	A7  =	BIT 0  0 IF ECHO, 1 IF ECHEND 
*		 BITS 1-15  NOT SIGNIFICANT
*      AT SUBROUTINE RETURN:
*	A1  =	CHANGED 
*	A2  =	CHANGED 
*	CR  =	CHANGED 
* 
************************************************************
* 
ECHEND	EQU	*
* 
	IFT	CECHO=1
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	LDKL	A7,/8000	INDICATE END OF ECHO 
	RF	ECHO10
* 
	EJECT
* 
	XIF
* 
ECHO	EQU	*
	IFT	CECHO=1
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	LDK	A7,0	INDICATE NOT END OF ECHO
* 
* 
ECHO10	EQU	*
	LD	A3,DWTST,A6	STATUS
	ANKL	A3,DWFECH	ECHO REQUESTED? 
	RF(Z)	NDREP	NO, RETURN 
* 
	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
	ANK	A2,/FF	CLEAN CHARACTER 
	LD	A3,DWTADR,A6	ADDRESS TO ADDRESS-BLOCK 
	ABI	ECHADR,A3	GO TO ECHO-ROUTINE DEVICE-DEPENDENT
	XIF
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	ECHRTN
* 
* FUNCTION: 
*	THIS ROUTINE IS USED WHEN OUTPUT DEVICE ECHO ROUTINE
*	IS READY WITH ECHOING ACTIONS, AND WANTS TO LEAVE 
*	CONTROL BACK TO INPUT DEVICE DRIVER.
* 
* CALL: 
*	ABL	ECHRTN
* 
* INPUT:
*	A6  =	DWT ADDRESS OF OUTPUT DEVICE
* 
* OUTPUT: 
*      AT ENTRY TO INPUT DRIVER:
*	SEE ECHO ROUTINE
* 
************************************************************
* 
ECHRTN	EQU	*
	IFT	CECHO=1
	LD	A6,DWTWAT,A6	DWT-ADDRESS OF INPUT DEVICE
	RF	NDREP	RELOAD A3-A5, A7-A8 AND RETURN
	XIF
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	GETCHR
* 
* FUNCTION: 
*	THIS ROUTINE WILL FETCH ONE CHARACTER FROM THE
*	ECB BUFFER AND INCREMENT THE BUFFER INDEX.
*	IF NO CHARACTER IS LEFT, INDEX IS STORED IN 
*	ECB REQUESTED LENGTH. 
* 
* CALL: 
*	CF	A15,GETCHR 
* 
* INPUT:
*	A3  =	BUFFER INDEX
*	A8  =	ECB ADDRESS 
* 
* OUTPUT: 
*	A1  =	>0 IF CHARACTER LEFT
*		 =<0 IF NO CHARACTER LEFT
*	A2  =	BITS 0-7  ZERO (IF A1>0)
*		 BITS 8-15  CHARACTER (IF A1>0)
*	A3  =	UPDATED BYTE INDEX (IF A1>0)
*	CR  =	CHANGED 
*	INTERR.	ENABLED 
* 
************************************************************
* 
GETCHR	EQU	*
	LD	A1,ECBRL,A8	REQUESTED LENGTH
	SUR	A1,A3
	RF(NP)	GCH010	LAST CHARACTER REACHED 
* 
	EJECT
* 
	LD	A2,ECBBA,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	EQU	*
	ST	A3,ECBEL,A8	STORE EFFECTIVE LENGTH
GCH020	EQU	*
	ADKL	A15,2	RETURN AND ENABLE 
	ENB
	LDR*	P,A15 
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	ABORT 
* 
* FUNCTION: 
*	THIS ROUTINE RESETS THE INPUT REQUESTED FLAG IN DWT.
*	IT IS USED AT ABORT REQUESTS, WHEN A REQUESTED INPUT
*	IS NO LONGER WANTED.
* 
* CALL: 
*	CF	A15,ABORT
* 
* INPUT:
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	A1  =	CHANGED 
*	CR  =	CHANGED 
* 
************************************************************
* 
ABORT	EQU	* 
	LDKL	A1,/FFFF-DWFINP	MASK FOR INPUT REQUESTED
	ANS	A1,DWTST,A6	RESET FLAG 
	IFT	CPU852=1 
	RF	RTNP15	RETURN 
	XIF
	IFF	CPU852=1 
	RTN	A15
	XIF
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	LDISP 
* 
* FUNCTION: 
*	THIS ROUTINE PERFORMS DISPATCHING FOR THE TERMINAL
*	DEVICE DRIVERS. IT ALSO PROVIDES QUICK EXITS FROM 
*	DEVICE DRIVERS THAT INCLUDES TENDIO CALL. 
* 
* CALL: 
*	ABL	LENDER
*	ABL	LENDIS
*	ABL	LDISP 
* 
* INPUT:
*	A1  =	RETURN CODE (IF LENDIS) 
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*      AT ENTRY TO LINE DRIVER DISPATCH ENTRY:
*	A6  =	DWT ADDRESS 
* 
************************************************************
* 
LENDER	EQU	*
	LDKL	A1,REQERR	REQUEST ERROR 
* 
LENDIS	EQU	*
	CF	A15,TENDIO	END I/O REQUEST
* 
	EJECT
* 
LDISP	EQU	* 
	IFF	NTONSU=0	U	=1
	LC	A1,DWTCHP,A6	CHANNEL PARAMETER
	ANK	A1,MASKCT	CLEAN CONNECTION TYPE
	SLA	A1,1	MAKE INDEX
	CWK	A1,DTABLN	INSIDE LIMIT?
	ABI(L)	ENRTAB,A1	YES, ACTIVATE LINE DRIVER 
	XIF		U	=1
	ABL	TDISP	NO, ERROR
* 
	EJECT
* 
************************
* LINE DRIVER ROUTINES *
************************
* 
*   THIS SECTION CONTAINS AN EXIT ROUTINE THAT CAN BE USED BY THE 
*   LINE DRIVERS WHEN RETURNING TO THE DEVICE DRIVER. 
*   IT ALSO CONTAINES A NUMBER OF SERVICE SUBROUTINES THAT
*   CAN BE CALLED BY THE LINE DRIVERS.
* 
* 
*   ROUTINES IN ORDER OF APPEARANCE IN CODE:
* 
*	NAME	FUNCTION 
* 
*	NDRET	RETURN TO DEVICE DRIVER 
*	NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
*	NDGET8	GET A3-A5, A7-A8 FROM DWT
*	NDREWS	CALL RECOVERY FOR ALL DWT:S ON WORK STATION
*	NDREDW	CALL RECOVERY ROUTINE FOR DWT
*	NDGEDN	GET HIGEST DWT NUMBER FOR WORK STATION 
*	NDGEDW	GET DWT ADDRESS
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDRET 
* 
* FUNCTION: 
*	THIS ROUTINE CONTAINS A NUMBER OF ENTRIES FOR 
*	RETURNING TO THE TERMINAL DEVICE DRIVERS. 
*	THEY CAN BE CALLED EITHER FROM OTHER ROUTINES 
*	IN THE NETWORK DISTRIBUTOR, OR FROM THE LINE
*	DRIVERS.
*	FOR CPU 852 IT ALSO CONTAINS A "RTN  A15" 
*	SIMULATION THAT DOESN'T PERFORM ENABLE. 
* 
* CALL: 
*	RF	"NAME" 
*	RB	"NAME" 
*	ABL	"NAME"
* 
* INPUT:
*	A5  =	LOCAL STACK POINTER (IF NDRETX) 
*	A6  =	DWT ADDRESS (IF NDREPX) 
* 
* OUTPUT: 
*      AT RETURN TO TERMINAL DEVICE DRIVER: 
*	SEE HEADING OF CALLED REQUEST HANDLING ROUTINE
* 
************************************************************
* 
NDRETE	EQU	*
	LDK	A1,CONFER	CONFIGURATION ERROR
	RF	NDRET	RETURN
* 
	EJECT
* 
NDREPO	EQU	*
	CF	A15,NDGET8	GET A3-A5, A7-A8 FROM DWT
NDRETO	EQU	*
	LDK	A1,0	RETURN CODE OK
	LDK	A2,0	DEVICE STATUS OK
	RF	NDRET	RETURN
* 
NDREP	EQU	* 
	CF	A15,NDGET8	GET A3-A5, A7-A8 FROM DWT
NDRET	EQU	* 
	ENB
	ADK	A5,4	ADJUST STACK FOR RETURN 
	LDR	A1,A1	SET CR 
	ABR*	A5	RETURN TO DEVICE DRIVER
* 
* 
	IFT	CPU852=1 
RTNP15	EQU	*
	ADKL	A15,2	ADJUST STACK
	LDR*	P,A15	RETURN
	XIF
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDSAV8
* 
* FUNCTION: 
*	THIS ROUTINE SAVES REGISTERS A3, A4, A5, A7 AND 
*	A8 IN A SAVE AREA IN DWT. 
* 
* CALL: 
*	CF	A15,NDSAV8 
* 
* INPUT:
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	CR  =	CHANGED 
* 
************************************************************
* 
NDSAV8	EQU	*
*    SAVE A3-A5, A7-A8 IN DWT 
	ST	A3,DWTA3,A6 
	ST	A4,DWTA4,A6 
	ST	A5,DWTA5,A6 
	ST	A7,DWTA7,A6 
	ST	A8,DWTA8,A6 
* 
	IFT	CPU852=1 
	RB	RTNP15	RETURN 
	XIF
	IFF	CPU852=1 
	RTN	A15
	XIF
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDGET8
* 
* FUNCTION: 
*	THIS ROUTINE FETCHES REGISTERS A3, A4, A5, A7 AND 
*	A8 FROM A SAVE AREA IN DWT. 
* 
* CALL: 
*	CF	A15,NDGET8 
* 
* INPUT:
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*	CR  =	CHANGED 
* 
************************************************************
* 
NDGET8	EQU	*
*    GET A3-A5, A7-A8 FROM DWT
	LD	A3,DWTA3,A6 
	LD	A4,DWTA4,A6 
	LD	A5,DWTA5,A6 
	LD	A7,DWTA7,A6 
	LD	A8,DWTA8,A6 
* 
	IFT	CPU852=1 
	RB	RTNP15	RETURN 
	XIF
	IFF	CPU852=1 
	RTN	A15
	XIF
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDREWS
* 
* FUNCTION: 
*	THIS ROUTINE CALLS RECOVERY ROUTINES FOR ALL DWT:S
*	ON A WORK STATION, EXEPT FOR THOSE OF OUTPUT DEVICES
*	IN ECHO MODE. 
* 
* CALL: 
*	CF	A15,NDREWS 
* 
* INPUT:
*	A3  =	WORK STATION TABLE ADDRESS
*	A4  =	RECOVERY CAUSE
*	A6  =	WORK STATION NUMBER 
* 
* OUTPUT: 
*      AT ENTRY TO RECOVERY ROUTINE:
*	SEE NDREDW
*      AT SUBROUTINE RETURN:
*	CR  =	CHANGED 
*	INTERR.	CHANGED 
* 
************************************************************
* 
NDREWS	EQU	*
	IFF	NTONSU=0	U	=1
	IFT	CPU852=1 
	CF	A15,SAVE8	PUSH A1-A8
	XIF
	IFF	NTONSU=0	U	=1
	IFF	CPU852=1 
	MSR	8,A15	PUSH A1-A8 
	XIF
	IFF	NTONSU=0	U	=1
* 
	EJECT
* 
	LDR	A8,A6	SAVE WS NUMBER 
	LDR	A1,A3	WORK STATION TABLE ADDRESS 
	CF	A15,NDGEDN	GET HIGEST DWT NUMBER
	ADK	A7,1	PREPARE FOR SUK 
* 
RW100	EQU	* 
	SUK	A7,1	NEXT DWT
	RF(N)	RW120	EXIT IF ALL DONE 
	LDR	A6,A8	WORK STATION NUMBER
	LDR	A1,A3	WORK STATION TABLE ADDRESS 
	CF	A15,NDGEDW	A6 := DWT ADDRESS
* 
	LDR	A6,A6	DWT DEFINED? 
	RB(Z)	RW100	NO, TAKE NEXT
	LDK	A1,1 
	TM	A6,A1	DWT WITH >1 DEVICE ADDRESS? 
	RB(NZ)	RW100	YES, ONLY ONE CALL / DWT
* 
*      CHECK IF OUTPUT ECHO DEVICE
	LD	A1,DWTST,A6	DWT STATUS
	LDR	A2,A1	SAVE 
	ANKL	A1,DWFECH	ECHO MODE?
	RF(Z)	RW110	NO, CONTINUE 
	ANKL	A2,DWFINP	INPUT DEVICE? 
	RB(Z)	RW100	NO, ECHO OUTPUT. TAKE NEXT 
* 
RW110	EQU	* 
	CF	A15,NDREDW	CALL RECOVERY ROUTINE
	RB	RW100	NEXT DWT
* 
* 
RW120	EQU	* 
*    ALL DWT:S HANDLED
	ABL	TDISP	RETURN 
	XIF		U	=1
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDREDW
* 
* FUNCTION: 
*	THIS ROUTINE CALLS THE RECOVERY ROUTINE OF A TERMINAL 
*	DEVICE DRIVER, IF THE RECOVERY ENTRY IS DEFINED.
*	IF NO RECOVERY IS DEFINED, DWT IS BUSY BUT NO REQUEST 
*	IS ON, TENDIO IS CALLED TO ACTIVATE TERMINAL QUEUE. 
* 
* CALL: 
*	CF	A15,NDREDW 
* 
* INPUT:
*	A4  =	RECOVERY CAUSE
*	A6  =	DWT ADDRESS 
* 
* OUTPUT: 
*      AT ENTRY TO RECOVERY ROUTINE:
*	A4  =	RECOVERY CAUSE
*	A5  =	DWT STACK BASE
*	A6  =	DWT ADDRESS 
*	A7  =	BITS 0-9  ZERO
*		BITS 10-15  ORDER (IF REQUEST ON)
*	A8  =	ECB ADDRESS IF REQUEST ON,
*		 ELSE ZERO 
*	INTERR.	ENABLED 
*      AT SUBROUTINE RETURN:
*	CR  =	CHANGED 
*	INTERR.	CHANGED 
* 
************************************************************
* 
	EJECT
* 
NDREDW	EQU	*
	IFT	CPU852=1 
	CF	A15,SAVE8	PUSH A1-A8
	XIF
	IFF	CPU852=1 
	MSR	8,A15	PUSH A1-A8 
	XIF
	ENB
* 
	LDR	A5,A6	DWT ADDRESS
	ADKL	A5,DWTSB2	STACK BASE
	LC	A7,DWTOR+1,A6	ORDER 
	ANK	A7,/3F	CLEAN 
	LD	A8,DWTECB,A6	ECB ADDRESS
* 
	LD	A1,DWTADR,A6	ADDRESS BLOCK
	LD	A1,RECADR,A1	RECOVERY ENTRY 
	ABR(NZ)	A1	CALL RECOVERY IF DEFINED
* 
* 
*      NO RECOVERY. CALL TENDIO IF BUSY BUT NO REQUEST
	LD	A2,DWTST,A6	DWT STATUS
	ANKL	A2,DWFBSY	BUSY? 
	RF(NZ)	RD100	NO, EXIT
	LDR	A8,A8	REQUEST ON?
	ABL(Z)	DISEND	NO, TENDIO & RETURN
RD100	EQU	* 
	ABL	TDISP	RETURN 
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDGEDN
* 
* FUNCTION: 
*	THIS ROUTINE CALCULATES THE HIGEST DWT NUMBER 
*	(POSITION NUMBER IN DWT TABLE) FOR A WORK STATION.
* 
* CALL: 
*	CF	A15,NDGEDN 
* 
* INPUT:
*	A1  =	ADDRESS OF WORK STATION TABLE 
*	A6  =	WORK STATION NUMBER 
* 
* OUTPUT: 
*	A7  =	HIGEST DWT NUMBER (0-7) 
*		 -1 IF NO DWT:S FOUND
*	CR  =	CHANGED 
* 
************************************************************
* 
NDGEDN	EQU	*
	IFF	NTONSU=0	U	=1
	STR	A6,A15	PUSH WS NUMBER
	LDR	A1,A1	WS TABLE DEFINED?
	RF(Z)	GN100	NO, EXIT 
	SLL	A6,1	MAKE INDEX
	CW	A6,-2,A1	INDEX TOO HIGH?
	RF(NL)	GN100	YES, EXIT 
* 
	EJECT
* 
	ADR	A6,A1
	LDR*	A6,A6	DWT ADDRESS TABLE 
	RF(Z)	GN100	NOT DEFINED, EXIT
	LD	A7,-2,A6	TABLE LENGTH 
	SUK	A7,2	OFFSET TO LAST DWT
	SRA	A7,1	NUMBER OF LAST DWT
	RF	GN110	EXIT
* 
GN100	EQU	* 
	LDKL	A7,-1	NO DWT:S DEFINED
GN110	EQU	* 
	LDR*	A6,A15	POP WS NUMBER
	IFT	CPU852=1 
	RB	RTNP15	RETURN 
	XIF
	IFF	NTONSU=0	U	=1
	IFF	CPU852=1 
	RTN	A15
	XIF
* 
	EJECT
* 
************************************************************
* 
* ROUTINE NAME: 
*	NDGEDW
* 
* FUNCTION: 
*	THIS ROUTINE CALCULATES THE DWT ADDRESS FOR 
*	A DEVICE. 
* 
* CALL: 
*	CF	A15,NDGEDW 
* 
* INPUT:
*	A1  =	ADDRESS OF WORK STATION TABLE (INTXXN)
*	A6  =	WORK STATION NUMBER 
*	A7  =	DEVICE ADDRESS
* 
* OUTPUT: 
*	A6  =	DWT ADDRESS IF FOUND
*		 ELSE 0
*	CR  =	CHANGED 
* 
************************************************************
* 
NDGEDW	EQU	*
	IFF	NTONSU=0	U	=1
	SLL	A7,1	MAKE INDEX OF DEVICE ADDRESS
	LDR	A1,A1	WS TABLE DEFINED?
	RF(Z)	GD100	NO, EXIT 
	SLL	A6,1	INDEX IN WORK STATION TABLE 
	CW	A6,-2,A1	INSIDE TABLE?
	RF(NL)	GD100	NO, ERROR 
* 
	EJECT
* 
	ADR	A6,A1
	LDR*	A6,A6	DWT ADDRESS TABLE 
	RF(Z)	GD100	WS NOT DEFINED, EXIT 
	CW	A7,-2,A6	INDEX TOO HIGH?
	RF(NL)	GD100	YES, EXIT 
	ADR	A6,A7
	LDR*	A6,A6	DWT ADDRESS OR 0
	RF	GD110	EXIT
* 
GD100	EQU	* 
	LDK	A6,0	DWT NOT FOUND 
GD110	EQU	* 
	SRL	A7,1	RESTORE DEVICE ADDRESS
	IFT	CPU852=1 
	RB	RTNP15	RETURN 
	XIF
	IFF	NTONSU=0	U	=1
	IFF	CPU852=1 
	RTN	A15
	XIF
* 
* 
* 
	END

Full view