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

⟦97341d2b3⟧

    Length: 30088 (0x7588)
    Notes: pts_type(SC)
    Names: »DRSL01.SC«

Derivation

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

PTS(SC)

	IDENT DRSL01 	REL 11.0 81-01-26 870105041100 

			NEW DEVICE DRIVER INTERFACE
			PRR 10.0 79-12-07
			=6, RTN FROM OUTSAL IN INH MODE
			PRR 10.1 79-11-20
			=5, CHECK IF PFINIT PENDING; 
			TIMER FOR INPUT NOT OPERABLE;
			NO SOFTWARE PARITY GENERATION
			PRR 10.1 79-11-09
			=4, CHECK QUEUE AFTER SYNC SENDING 
			PRR 10.1 79-10-16
			=3, CORR. WHEN NOT OPER. 
			MOVE OF STATUS BIT 
			PRR 10.1 79-10-08
			=2, IMPROV. OF REMOTE SENDING
			PRR 10.1 79-10-03
			=1, CHECK IF OUTPUT CHAR.= ETX;
			CHANGE TO EVEN PARITY
			PRR 10.1 79-09-21

* 
* 
********************************************************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRSL01 = DRIVER CHANNEL UNIT
* 
*            SALCUZ 
* 
* 
* 
* 
* 
**********************************************************************
* 
*   THIS IS A CHANNEL UNIT DRIVER FOR TERMINALS 
*   CONNECTED TO CPU VIA SALCUZ.
*   TERMINALS MAY BE LOCAL OR REMOTE. 
* 
*   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 OUTPUT INTERRUPT IS 
*   GENERATED FROM SALCUZ. THE DRIVER CHECKS THE INTERRUPT
*   AND A BRANCH IS MADE TO INTERRUPT HANDLER.
* 
* 
	EJECT
* 
*   THE DRIVER ALSO INCLUDES THE FOLLOWING SUBROUTINES: 
* 
*   -SLCUON   EXECUTE CIO START ON EVERY SALCUZ AT POWER ON 
* 
*   -OUTSAL   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	ISLCI	INPUT INTERRUPTS FROM SALCUZ 
	ENTRY	ISLCO	OUTPUT INTERRUPTS FROM SALCUZ
	ENTRY	SLCUON	START AT POWER ON 
	ENTRY	CHAN	NUMBER OF CHANNEL UNITS 
* 
	ENTRY	SLCHRI	CHARACTER INPUT 
	ENTRY	SLSTBL	DEFINE START OF OUTPUT BLOCK
	ENTRY	SLCHRO	CHARACTER OUTPUT
	ENTRY	SLENBL	DEFINE END OF OUTPUT BLOCK
	ENTRY	SLDISP	LOCAL DISPATCHER
* 
	EJECT
* 
* 
********************************
* EXTERNAL TOSS MODULE ENTRIES *
********************************
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
	EXTRN	SETIMP	SET TIMER ROUTINE	=2
	EXTRN	PFPOST	PWF POST PROCESSING FLAG	=5 
* 
	EXTRN	INTSL1	WS TABLE ADDRESS SALCUZ 1 
	EXTRN	INTSL2	WS TABLE ADDRESS SALCUZ 2 
	EXTRN	INTSL3	WS TABLE ADDRESS SALCUZ 3 
	EXTRN	INTSL4	WS TABLE ADDRESS SALCUZ 4 
	EXTRN	INTSL5	WS TABLE ADDRESS SALCUZ 5 
	EXTRN	INTSL6	WS TABLE ADDRESS SALCUZ 6 
	EXTRN	INTSL7	WS TABLE ADDRESS SALCUZ 7 
	EXTRN	INTSL8	WS TABLE ADDRESS SALCUZ 8 
* 
	EXTRN	NDSAV8	SAVE A3-A5, A7-A8 IN DWT
	EXTRN	NDGEDN	GET HIGHEST DWT NUMBER ON WS
	EXTRN	NDGEDW	GET DWT-ADDRESS 
	EXTRN	NDREWS	CALL RECOVERY FOR ALL DEV ON WS 
	EXTRN	NDRETO	OK & RETURN 
	EXTRN	NDREP	POP & RETURN 
* 
	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
TIME	EQU	5	TIME BEFORE TIME-OUT FOR SYNC	=2 
INPTIM	EQU	10	INPUT NOT OP. TIMER VALUE	=5
* 
	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 EIGHT
*   CHANNELS BY SETTING X:B TO 1, 2, 3,..., 8 
* 
X:B	EQU	1 
CHAN	EQU	X:B
* 
	EJECT
* 
******************* 
*   C W T S A 1   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 1 
* 
CUAD1	EQU	/1A	CONTROL UNIT ADDRESS
* 
CWTSA1	EQU	*	TABLE ENTRY
CWTLDW	EQU	*-CWTSA1 
	DATA	0	LAST OUTPUT DWT 
CWTITA	EQU	*-CWTSA1 
	DATA	INTSL1	WORK STATION ADDRESS 
CWTINR	EQU	*-CWTSA1 
	INR	A2,0,CUAD1	INR 
CWTOTR	EQU	*-CWTSA1 
	OTR	A2,0,CUAD1+1	OTR 
CWTCIS	EQU	*-CWTSA1 
	CIO	A1,1,CUAD1+1	CIO START OUTPUT
CWTTP	EQU	*-CWTSA1	*	=2 
	DATA	0	TIMER POINTER	=2
CWTEQ	EQU	*-CWTSA1
	DATA	0	QUEUE 
CWTCIH	EQU	*-CWTSA1 
	CIO	A1,0,CUAD1+1	CIO HALT OUTPUT 
CWTSST	EQU	*-CWTSA1 
	SST	A2,CUAD1+1	SEND STATUS OUTPUT
CWTST	EQU	*-CWTSA1
	DATA	0	CHANNEL STATUS
CWTCSI	EQU	*-CWTSA1 
	CIO	A1,1,CUAD1	CIO START INPUT 
CWTSSI	EQU	*-CWTSA1 
	SST	A2,CUAD1	SEND STATUS INPUT 
CWTTP2	EQU	*-CWTSA1	*	=5
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
	EJECT
* 
* 
******************* 
*   C W T S A 2   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 2 
* 
CWTSA2	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
* 
CUAD2	EQU	/2A	CONTROL UNIT ADDRESS
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL2	WORK STATION ADDRESS 
	INR	A2,0,CUAD2	INR 
	OTR	A2,0,CUAD2+1	OTR 
	CIO	A1,1,CUAD2+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD2+1	CIO HALT OUTPUT 
	SST	A2,CUAD2+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD2	CIO START INPUT 
	SST	A2,CUAD2	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	XIF
	EJECT
* 
* 
******************* 
*   C W T S A 3   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 3 
* 
CWTSA3	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
	IFF	CHAN=2 
* 
CUAD3	EQU	/2C	CONTROL UNIT ADDRESS
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL3	WORK STATION ADDRESS 
	INR	A2,0,CUAD3	INR 
	OTR	A2,0,CUAD3+1	OTR 
	CIO	A1,1,CUAD3+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD3+1	CIO HALT OUTPUT 
	SST	A2,CUAD3+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD3	CIO START INPUT 
	SST	A2,CUAD3	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	XIF
	EJECT
* 
* 
******************* 
*   C W T S A 4   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 4 
* 
CWTSA4	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
* 
CUAD4	EQU	/3A	CONTROL UNIT ADDRESS
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL4	WORK STATION ADDRESS 
	INR	A2,0,CUAD4	INR 
	OTR	A2,0,CUAD4+1	OTR 
	CIO	A1,1,CUAD4+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD4+1	CIO HALT OUTPUT 
	SST	A2,CUAD4+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD4	CIO START INPUT 
	SST	A2,CUAD4	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	XIF
	EJECT
* 
* 
******************* 
*   C W T S A 5   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 5 
* 
CWTSA5	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
* 
CUAD5	EQU	NOTDEF	CONTROL UNIT ADDRESS 
*   ONLY DEFINED FOR FOUR SALCUZ CARDS  **********
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL5	WORK STATION ADDRESS 
	INR	A2,0,CUAD5	INR 
	OTR	A2,0,CUAD5+1	OTR 
	CIO	A1,1,CUAD5+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD5+1	CIO HALT OUTPUT 
	SST	A2,CUAD5+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD5	CIO START INPUT 
	SST	A2,CUAD5	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	XIF
	EJECT
* 
* 
******************* 
*   C W T S A 6   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 6 
* 
CWTSA6	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	IFF	CHAN=5 
* 
CUAD6	EQU	NOTDEF	CONTROL UNIT ADDRESS 
*   ONLY DEFINED FOR FOUR SALCUZ CARDS  **********
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL6	WORK STATION ADDRESS 
	INR	A2,0,CUAD6	INR 
	OTR	A2,0,CUAD6+1	OTR 
	CIO	A1,1,CUAD6+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD6+1	CIO HALT OUTPUT 
	SST	A2,CUAD6+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD6	CIO START INPUT 
	SST	A2,CUAD6	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	XIF
	EJECT
* 
* 
******************* 
*   C W T S A 7   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 7 
* 
CWTSA7	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	IFF	CHAN=5 
	IFF	CHAN=6 
* 
CUAD7	EQU	NOTDEF	CONTROL UNIT ADDRESS 
*   ONLY DEFINED FOR FOUR SALCUZ CARDS  **********
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL7	WORK STATION ADDRESS 
	INR	A2,0,CUAD7	INR 
	OTR	A2,0,CUAD7+1	OTR 
	CIO	A1,1,CUAD7+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD7+1	CIO HALT OUTPUT 
	SST	A2,CUAD7+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD7	CIO START INPUT 
	SST	A2,CUAD7	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	XIF
	EJECT
* 
* 
******************* 
*   C W T S A 8   * 
******************* 
* 
*   CONTROL WORK TABLE FOR SALCUZ 8 
* 
CWTSA8	EQU	*	TABLE ENTRY
* 
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	IFF	CHAN=5 
	IFF	CHAN=6 
	IFF	CHAN=7 
* 
CUAD8	EQU	NOTDEF	CONTROL UNIT ADDRESS 
*   ONLY DEFINED FOR FOUR SALCUZ CARDS  **********
* 
	DATA	0	LAST OUTPUT DWT 
	DATA	INTSL8	WORK STATION ADDRESS 
	INR	A2,0,CUAD8	INR 
	OTR	A2,0,CUAD8+1	OTR 
	CIO	A1,1,CUAD8+1	CIO START OUTPUT
	DATA	0	TIMER POINTER	=2
	DATA	0	QUEUE 
	CIO	A1,0,CUAD8+1	CIO HALT OUTPUT 
	SST	A2,CUAD8+1	SEND STATUS OUTPUT
	DATA	0	CHANNEL STATUS
	CIO	A1,1,CUAD8	CIO START INPUT 
	SST	A2,CUAD8	SEND STATUS INPUT 
	DATA	0	TIMER POINTER FOR INP. NOT OP.	=5 
* 
	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	CWTSA1
	IFF	CHAN=1 
	DATA	CWTSA2
	XIF
	IFF	CHAN=1 
	IFF	CHAN=2 
	DATA	CWTSA3
	XIF
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	DATA	CWTSA4
	XIF
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	DATA	CWTSA5
	XIF
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	IFF	CHAN=5 
	DATA	CWTSA6
	XIF
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	IFF	CHAN=5 
	IFF	CHAN=6 
	DATA	CWTSA7
	XIF
	IFF	CHAN=1 
	IFF	CHAN=2 
	IFF	CHAN=3 
	IFF	CHAN=4 
	IFF	CHAN=5 
	IFF	CHAN=6 
	IFF	CHAN=7 
	DATA	CWTSA8
	XIF
CHTABE	EQU	*	END OF TABLE 
* 
* 
	EJECT
* 
* 
*   S L C U O N 
* 
*   SUBROUTINE TO RESET CWT AND PERFORM CIO START 
*   OF EVERY SALCUZ INPUT CHANNEL AT SYSTEM LOAD
* 
* 
* 
SLCUON	EQU	*
	LD	A4,CHTAB	TABLE LENGTH 
SON010	SUK	A4,2	ALL TREATED?
	ABL(Z)	RTNA15	YES
SON020	EQU	*
	LD	A5,CHTAB,A4	LOAD CWT-ADDRESS
	RB(Z)	SON010 
	LDKL	A1,/8000
	ORS	A1,CWTST,A5	SET INITIATION BIT 
	CMR	A5	RESET LAST OUTPUT	=2
	CM	CWTEQ,A5	RESET OUTPUT QUEUE	=5
	INH
	LDK	A1,/4	EVEN PARITY	=1 
	EX	CWTCIS,A5	CIO START OUTPUT
	EX	CWTCSI,A5	EXECUTE CIO-START INPUT 
	LDK	A1,0 
	EX	CWTCIH,A5	CIO STOP OUTPUT 
	ENB
	RB	SON010
	EJECT
* 
* 
********************************************
*   INTERRUPT ENTRY FROM SALCUZ INPUTS     *
********************************************
* 
* 
*    I S L C I
* 
*    INPUT INTERRUPT FROM SALCUZ
* 
ISLCI	EQU	* 
	ST	P,INTSAV	SAVE LAST INTERRUPT
	MSR	8,A15	SAVE A1-A8 ON STACK
	LDK	A4,0	RESET SALCUZ-COUNTER
	LD	A3,CHTAB
	SUK	A3,2	NUMBER OF LINES 
	RF	IIS015
* 
*   GET CWT-ADDRESS. EXECUTE INR. 
* 
IIS010	EQU	*
	ADK	A4,2	NEXT SALCUZ 
IIS015	EQU	*
	CWR	A4,A3
	ABL(NL)	EXIT	NOT VALID INTERRUPT 
	LD	A5,CHTAB+2,A4	GET CWT-ADDRESS 
	EX	CWTINR,A5	INR 
	RF(NA)	IIS060
* 
	EJECT
* 
*   GET DWT-ADDRESS FROM INTSL
* 
IIS020	EQU	*
	LD*	A1,CWTITA,A5	ADDRESS OF WORK STATION TABLE 
	LDK	A6,0	WORK STATION NUMBER 
	CF	A15,NDGEDN	GET HIGHEST DWT-NUMBER 
	ADK	A7,1	PREPARE FOR SUK 
IIS025	EQU	*
	SUK	A7,1	NEXT DWT
	RF(N)	EXITL	EXIT IF ALL CHECKED
	CF	A15,NDGEDW	GET DWT-ADDRESS
	LDR	A6,A6
	RB(Z)	IIS025	DWT-ADDRESS NOT DEFINED 
	LD	A3,DWTST,A6	DEVICE STATUS 
	ANK	A3,/40	INPUT DEVICE? 
	RF(NZ)	IIS055	YES
	LDK	A6,0	WORK STATION NUMBER 
	RB	IIS025
* 
EXITL	EQU	* 
	IFT	LOGING=1 
	SLL	A4,8	LINE NR FOR LOGG
	ORR	A2,A4
	CF	A15,LOGG	**  LOGG OF INPUT CHARACTER  **
	XIF
* 
	RF	EXIT
* 
	EJECT
* 
*   RETURN TO DEVICE DRIVER 
* 
IIS055	EQU	*
	LDK	A1,0	RESET RETURN CODE 
* 
	IFT	LOGING=1 
	CF	A15,INFLOG	GET LINE INFORMATION 
	CF	A15,LOGG	**  LOGG OF INPUT CHARACTER  **
	XIF
* 
IIS058	EQU	*	*	=2 
	ANK	A2,/FF	CLEAN CHARACTER 
	LD	A7,DWTST,A6	DEVICE STATUS 
	ANK	A7,/20	INPUT REQUESTED?
	RF(Z)	IIS059	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
* 
IIS059	EQU	*
	LD	A1,DWTADR,A6	ADDRESS BLOCK
	LD	A1,INTADR,A1	INTERRUPT ENTRY DEFINED? 
	RF(Z)	EXIT	NO, SKIP CHARACTER
	LDR	A5,A6	DWT ADDRESS
	ADKL	A5,DWTSB2	STACK BASE
	ABR	A1	DEVICE DRIVER INTERRUPT ENTRY 
* 
	EJECT
* 
*   EXECUTE SST INPUT 
* 
IIS060	EQU	*
	EX	CWTSSI,A5	SEND STATUS INPUT 
	RB(NA)	IIS010	CHECK NEXT SALCUZ
	ANK	A2,1	STATUS	=5 
	RF(NZ)	IIS070	NOT OPERABLE	=5
IIS065	EQU	*	*	=5 
	LDK	A1,/4	EVEN PARITY	=1 
	EX	CWTCSI,A5	CIO START INPUT 
				=2
	RF	EXIT	*	=2 
* 
*   START TIMER IF INPUT NOT OPERABLE 
* 
IIS070	EQU	*	*	=5 
	LDR	A1,A5	SAVE CWT-ADDRESS AS PARAMETER	=5 
	LDK	A4,CWTTP2	*	=5 
	ADR	A4,A5	TIMER POINTER ADDRESS	=5 
	CF	A15,SETIMP	START TIMER	=5 
	DATA	IIS080,INPTIM	TIME-OUT ADDRESS AND VALUE	=5 
	RF	EXIT	*	=5 
* 
*   TIME-OUT ROUTINE FOR INPUT NOT OPERABLE 
* 
IIS080	EQU	*	*	=5 
	LDR	A5,A1	CWT-ADDRESS	=5 
	CM	CWTTP2,A5	RESET TIMER POINTER	=5
	RB	IIS065	START INPUT	=5 
* 
	EJECT
* 
* 
********************************************* 
*   INTERRUPT ENTRY FROM SALCUZ OUTPUTS     * 
********************************************* 
* 
* 
*    I S L C O
* 
*   OUTPUT INTERRUPT FROM SALCUZ
* 
ISLCO	EQU	* 
	ST	P,INTSAV	SAVE LAST INTERRUPT
	MSR	8,A15	SAVE A1-A8 ON STACK
	LDK	A7,0	RESET SALCUZ-COUNTER
	LD	A3,CHTAB
	SUK	A3,2	NUMBER OF LINES 
	RF	OIS015
* 
	EJECT
* 
*   GET CWT-ADDRESS. EXECUTE SST. 
* 
OIS010	EQU	*
	ADK	A7,2	NEXT SALCUZ 
OIS015	EQU	*
	CWR	A7,A3
	RF(NL)	EXIT	NOT VALID INTERRUPT
	LD	A5,CHTAB+2,A7	GET CWT-ADDRESS 
	EX	CWTSST,A5	SST 
	RB(NA)	OIS010
* 
	IFT	LOGING=1 
	LDR*	A4,A5	LAST OUTPUT DWT 
	CWK	A4,DWTSYN	SYNC-SENDING?
	RF(E)	OIS017	YES 
	SLL	A7,8	LINE NR FOR LOGG	=2 
	ORR	A2,A7	*	=2 
	CF	A15,LOGG	**LOGG STATUS**
	XIF
* 
OIS017	EQU	*
	LD	A1,CWTST,A5	CHANNEL STATUS
	RF(N)	OIS040	INITIATION ON CHANNEL 
				=2
	EJECT
* 
*   CHECK QUEUE AND SEND IF SOMETHING THERE 
* 
OIS020	EQU	*
	LDR*	A7,A5	LAST OUTPUT DWT 
	CMR	A5	SET CHANNEL FREE
				=3
				=3
	ANK	A2,/FF	CLEAN 
	LC	A4,CWTST,A5	CHANNEL STATUS
	LDR	A1,A2	SET RETURN CODE	=2 
	RF(NZ)	OIS035	NOT OPERABLE	=2
	LD	A3,CWTST,A5	CHANNEL STATUS	=2 
	SLL	A3,1	*	=2
	RF(N)	OIS038	NOT OPERABLE BIT SET	=2 
			*	=4 
			*	=4 
	LD	A6,CWTEQ,A5	OUTPUT QUEUE
	RF(E)	OIS030	QUEUE EMPTY 
			=5 
	LD	A2,DWTOTQ,A6	GET QUEUE LINK 
	ST	A2,CWTEQ,A5	STORE IT IN CWT 
	LC	A2,DWTOCH,A6	GET CHARACTER
	CF	A15,OUTSAL	SEND CHARACTER 
			=5 
	EJECT
* 
*   RETURN TO DEVICE DRIVER 
* 
OIS030	EQU	*
	CWK	A7,DWTSYN	SYNC-DWT?	=4 
	RF(E)	EXIT	YES	=4
	ANK	A4,/04	LAMP CODE QUEUED ?
	RF(NZ)	EXIT	YES, DON'T RETURN YET
	LDK	A2,0	STATUS
	LDR	A6,A7	GET LAST OUTPUT
	ABL(NZ)	NDREP	RETURN TO DEVICE DRIVER
* 
EXIT	EQU	*
	ABL	TDISP
* 
*   OUTPUT NOT OPERABLE 
* 
OIS035	EQU	*	*	=2 
	CWK	A7,DWTSYN	SYNC-DWT?	=2 
	RB(E)	EXIT	YES	=2
	LDKL	A3,/4000	*	=2 
	ORS	A3,CWTST,A5	SET BIT 'NOT OPERABLE'	=2
	RB	OIS030	*	=2 
* 
*   OUTPUT OPERABLE AGAIN 
* 
OIS038	EQU	*	*	=2 
	LDKL	A3,/BFFF	*	=2 
	ANS	A3,CWTST,A5	RESET BIT 'NOT OPERABLE'	=2
	EJECT
* 
*    RECOVERY ROUTINES ARE STARTED FOR EVERY DEVICE 
*    ON ACTUAL LINE EXCEPT THOSE IN ECHO MODE 
* 
OIS040	EQU	*
	LDKL	A1,/7FFF
	ANS	A1,CWTST,A5	RESET INITIATION BIT 
	LD*	A3,CWTITA,A5	ADDRESS OF WS TABLE 
	LDK	A6,0	WORK STATION NUMBER 
	LDK	A4,1	RECOVERY CAUSE
	CF	A15,NDREWS	CALL RECOVERY FOR ALL DEVICES
			ON WORK STATION
	RB	EXIT
	EJECT
* 
*    O U T S A L
* 
*   SUBROUTINE TO SEND A CHARACTER VIA SALCUZ 
*   ON ENTRY: 
*      A2 = OUTPUT CHARACTER IN RIGHT BYTE
*      A6 = DWT ADDRESS 
* 
OUTSAL	EQU	*
	MSR	8,A15	SAVE A1-A8 ON STACK
	ANK	A2,/FF 
	INH
	CWK	A6,DWTSYN	SYNC SENDING?
	RF(E)	OUS050	YES 
	LDR*	A1,A6	CHANNEL PARAMETERS
	ANK	A1,/F	CHANNEL UNIT INDEX 
	SLL	A1,1	MAKE INDEX FOR CHTAB
	LD	A5,CHTAB+2,A1	GET CWT-ADDRESS 
			*	=6 
	LDR*	A4,A5	CHANNEL UNIT FREE?
	RF(E)	OUS050	YES 
	EJECT
* 
*   QUEUE OUTPUT
* 
OUS005	EQU	*
	LD	A4,CWTEQ,A5	OUTPUT QUEUE
	RF(E)	OUS020 
OUS010	EQU	*
	CWR	A6,A4
	RF(E)	OUS060	THIS DWT IS ALREADY IN QUEUE
	LD	A3,DWTOTQ,A4
	RF(E)	OUS030	END OF THREAD FOUND 
	LDR	A4,A3	FOLLOW THE THREAD
	RB	OUS010
OUS020	EQU	*
	ST	A6,CWTEQ,A5	QUEUE DWT 
	RF	OUS040
OUS030	EQU	*
	ST	A6,DWTOTQ,A4	QUEUE DWT
OUS040	CM	DWTOTQ,A6	SET END OF THREAD 
	RF	OUS060
	EJECT
* 
*   START OUTPUT
* 
OUS050	EQU	*
	LD	A1,PFPOST	PWF POST PROCESSING FLAG	=5 
	RF(NZ)	OUS070	PFINIT PENDING	=5
	LDK	A1,/4	EVEN PARITY	=1 
	EX	CWTCIS,A5	CIO START OUTPUT
	RF(NA)	OUS070
* 
*   SYNC TIMING 
* 
	LD	A3,CWTTP,A5	ADDRESS TO TIMER BLOCK	=2 
	RF(Z)	STTIM	*	=2 
* 
*   RESTART TIMER 
* 
	LDKL	A3,-TIME	RESTART TIMER	=2 
	ST*	A3,CWTTP,A5	*	=2 
	RF	OUS052	*	=5(=2) 
* 
*   START TIMER 
* 
STTIM	EQU	*	*	=2
	LDR	A1,A5	SAVE CWT-ADDRESS AS PARAMETER	=2 
	LDK	A4,CWTTP	*	=2
	ADR	A4,A5	TIMER POINTER ADDRESS	=2 
	CF	A15,SETIMP	START TIMER OF 0.5 S	=2
	DATA	T:OUT,TIME	TIME-OUT ADDRESS AND VALUE	=2
	EJECT
* 
*   CHECK IF OUTPUT TO KEYBOARD LAMPS 
* 
OUS052	EQU	*	*	=5 
	LD	A7,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANK	A7,/3F	DEVICE ADDRESS
	SUK	A7,DI	OUTPUT TO KEYBOARD LAMPS?
	RF(Z)	OUS080	YES, QUEUE LAMP CODE
	EJECT
* 
*   SEND CHARACTER
* 
OUS053	EX	CWTOTR,A5	OTR 
				=3
	RF(A)	OUS055	*	=3
	CWK	A6,DWTSYN	SYNC-SENDING?	=3 
	RF(NE)	OUS054	NO	=3
	STR	A6,A5	STORE SYNC-DWT IN CWT	=3 
	RF	OUS070	*	=3 
OUS054	LD	A1,CWTST,A5	CHANNEL STATUS	=3 
	SLL	A3,1	*	=3
	RF(N)	OUS070	NOT OPERABLE BIT SET	=3 
	RB	OUS005	*	=3 
OUS055	EQU	*
	LDK	A1,0 
	EX	CWTCIH,A5	CIO STOP OUTPUT 
	STR	A6,A5	STORE LAST DWT IN CWT
	CWK	A6,DWTSYN	SYNC-DWT?	=2 
	RF(E)	OUS070	YES	=2
* 
	IFT	LOGING=1 
	CF	A15,INFLOG	GET LINE INFORMATION 
	CF	A15,LOGG	**LOGG OF OUTPUT CHARACTER** 
	XIF
* 
	LDR	A7,A7	OUTPUT TO KEYBOARD LAMPS?
	RF(Z)	OUS070	YES 
OUS060	SC	A2,DWTOCH,A6	STORE OUTPUT CHARACTER IN DWT
OUS070	EQU	*
	MLR	8,A15	RESTORE A1-A8 FROM STACK 
			*	=6 
	INH		*	=6
	ADKL	A15,2	ADJUST STACK POINTER	=6 
	LDR*	P,A15	RETURN	=6 
	EJECT
* 
*   PUT LAMPCODE FIRST IN QUEUE AND 
*   LOAD /1C IN OUTPUT REGISTER 
*   /1C = CODE FOR DATA TO KEYBOARD 
* 
OUS080	EQU	*
	LC	A4,CWTST,A5	LEFT BYTE OF CWT STATUS	=3
	LDKL	A1,/FBFF
	ANS	A1,CWTST,A5	RESET BIT 'LAMP CODE QUEUED'	=3
	ANK	A4,/04 
	RB(NZ)	OUS053	LAMP CODE ALREADY IN QUEUE 
	LD	A4,CWTEQ,A5	OUTPUT QUEUE
	RF(E)	OUS090 
	CWR	A6,A4
	RB(E)	OUS060	THIS DWT ALREADY IN QUEUE 
OUS090	EQU	*
	ST	A4,DWTOTQ,A6	MOVE QUEUE LINK
	ST	A6,CWTEQ,A5	QUEUE LAMP CODE 
	SC	A2,DWTOCH,A6	STORE LAMP CODE IN DWT 
	C1R	A1,A1
	ORS	A1,CWTST,A5	SET BIT 'LAMP CODE QUEUED'	=3
	LDK	A2,/1C 
	RB	OUS053
* 
	EJECT
* 
*   TIME-OUT ROUTINE FOR SYNC-SENDING.
*   IF NOTHING HAPPENS ON A LINE IN 500 MS
*   SYNC-CHARACTER IS SENT. 
* 
* 
T:OUT	EQU	*	*	=2
	LDR	A5,A1	*	=2 
	CM	CWTTP,A5	RESET TIMER POINTER	=2 
	LDR*	A6,A5	LINE FREE?	=2 
	RF(NZ)	T:OUT2	NO	=2
	LDKL	A6,DWTSYN	SIMULATED DWT-ADDRESS	=2
	LDK	A2,0	OUTPUT CHARACTER	=2 
	CF	A15,OUTSAL	SEND '00'	=2 
T:OUT2	EQU	*	*	=2 
	ABL	TDISP	*	=2 
* 
DWTSYN	DATA	/200	CHANNEL PARAMETER	=2 
	EJECT
* 
*   CHARACTER INPUT 
* 
SLCHRI	EQU	*
	LDK	A2,/20 
	ORS	A2,DWTST,A6	SET INPUT REQUESTED IN DWT 
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	RF	SLDISP	LOCAL DISPATCHER 
* 
*   START OF A BLOCK
* 
SLSTBL	EQU	*
* 
*   END OF A BLOCK
* 
SLENBL	EQU	*
	ABL	NDRETO	RETURN TO DEVICE DRIVER 
* 
*   CHARACTER OUTPUT
* 
SLCHRO	EQU	*
	CF	A15,NDSAV8	SAVE A3-A5, A7-A8 IN DWT 
	CF	A15,OUTSAL	SEND CHARACTER 
* 
*   LOCAL DISPATCHER
* 
SLDISP	EQU	*
	ABL	TDISP	GO TO DISPATCHER 
* 
	EJECT
* 
*   I N F L O G 
* 
*   SUBROUTINE TO GET INFORMATION ABOUT CHANNEL UNIT INDEX
*   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-3
*   CH. UNIT INDEX IS STORED IN BITS 4-6
* 
*   ON ENTRY: 
* 
*      A2 = INPUT CHARACTER 
*      A6 = DWT ADDRESS 
* 
*   ON EXIT:
* 
*      A2 = INPUT WORD WITH ADDED INFORMATION 
*      A3,A4 ARE DESTROYED
* 
	IFT	LOGING=1 
* 
INFLOG	EQU	*
	LDR*	A3,A6	GET CHANNEL PARAMETERS
	ANK	A3,/7	CHANNEL UNIT INDEX 
	LD	A4,DWTCP2,A6	CHANNEL PARAMETERS 2 
	ANK	A4,/7	DEVICE ADDRESS 
	SLL	A4,3 
	ORR	A3,A4	COMBINE DEV.ADDR. AND CH. UNIT INDEX 
	SLL	A3,9 
	ORR	A2,A3	COMBINE INFORMATION WITH CHARACTER 
	RTN	A15
* 
	XIF
	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
* 
*   RETURN AND ENABLE 
* 
RTNA15	EQU	*
	ADKL	A15,2 
	ENB
	LDR*	P,A15 
* 
	END

Full view