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

⟦298fe428f⟧

    Length: 11064 (0x2b38)
    Notes: pts_type(SC)
    Names: »DRLP01.SC«

Derivation

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

PTS(SC)

	IDENT DRLP01 	REL 11.0 81-01-26 870105041100 

			=1,WHEN CHAN=1 DRIVER WILL SERVE BOTH MUX AND PC 
			REL 10.0 80-03-14
* 
* 
**********************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRLP01 = DRIVER LINE PRINTER
* 
* 
* 
* 
* 
* 
**********************************************************
* 
* 
*    THIS DRIVER HANDLES ONE LINE PRINTER PTS 6881 CONNECTED
*    TO CPU VIA CHLP ON MULTIPLEX CHANNEL OR PROGRAMMED 
*    CHANNEL
* 
	EJECT			DRLP01 
* 
* 
************************
*    ENTRIES           *
************************
* 
* 
	ENTRY	LPADR	ADDRESS BLOCK
	ENTRY	ACLP	ACTIVATION DRIVER 
	ENTRY	IHLP	INTERRUPT HANDLER 
	ENTRY	LPON	RECOVERY ROUTINE
	ENTRY	DWLP01	DWT FOR LINE PRINTER



* 
* 
****************************************
*    EXTERNAL TOSS MODULE ENTRIES      *
****************************************
* 
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	TENDIO	END I/O 
	EXTRN	SAVE8	SAVE 8 REGS ON STACK 
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	DWTST	STATUS 
	EXTRN	DWTBC	BYTE COUNTER 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTOR	DWT INDEX AND ORDER
	EXTRN	DWTA3	SAVE AREA A3 
	EXTRN	DWTA4	SAVE AREA A4 
	EXTRN	DWTA5	SAVE AREA A5 
	EXTRN	DWTSB2	STACK BASE 2 IN DWT 
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
	EXTRN	PFPOST	PWF POST PROCESSING FLAG
	EJECT			DRLP01 
* 
* 
***************************** 
*    CONSTANTS              * 
***************************** 
* 
* 
DWALP	EQU	/0F 
MUXLP	EQU	DWALP+DWALP	MUX ADDRESS 
* 
	EJECT			DRLP01 
* 
* 
***************************************** 
* 
*	CONDITIONAL ASSEMBLY
* 
***************************************** 
* 
*	IF X:A=0 THE DRIVER WILL ONLY SERVE MUX	=1
*	IF X:A=1 THE DRIVER WILL SERVE BOTH MUX AND PC	=1 
* 
X:A	EQU	0 
CHAN	EQU	X:A
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	1
* 
*   MMU BUFFER SIZE 
* 
X:B	EQU	67
DVBLEN	EQU	X:B
* 
*   MMU DEVICE INDEX
* 
X:C	EQU	2 
DEVIND	EQU	X:C	LINE PRINTER DEVICE INDEX
* 
	EJECT			DRLP01 
* 
* 
*********************** 
*    ORDERS           * 
*********************** 
* 
*    ORDER /00: TEST STATUS.
*               A TST INSTRUCTION IS EXECUTED TO SEE
*               IF LINE PRINTER IS OPERABLE.
* 
*    ORDER /05: BASIC WRITE.
* 
*               THE REQUESTED NUMBER OF CHARACTERS ARE
*               SENT TO THE LINE PRINTER WITHOUT ANY CHECK. 
* 
*    ORDER /06: STANDARD WRITE. 
*               FIRST WORD IN ECB BUFFER CONTAINS A CONTROL 
*               CHARACTER.
*               /2B: PRINT LINE WITHOUT ADVANCING PAPER 
*               /30: ADVANCE TWO LINES BEFORE PRINTING
*               /31: SKIP TO TOP OF FORM BEFORE PRINTING
*               OTHER CHARACTERS GIVES A LINE FEED BEFORE 
*               PRINTING. 
* 
* 
*               CHARACTERS IN BUFFER SHOULD BE WITHIN THE 
*               INTERVAL /20-/5F. NO CHECK IS CARRIED OUT 
*               BY DRIVER. AT  THE END OF ECB BUFFER ONE BYTE 
*               MUST BE RESERVED FOR THE DRIVER TO STORE A
*               PRINT CHARACTER.
* 
	EJECT			DRLP01 
* 
* 
************************************
*    NORMAL REGISTER USAGE         *
************************************
* 
* 
*    A1 = RETURN CODE 
*    A2 = WORK REGISTER 
*    A3 = WORK REGISTER 
*    A4 = BUFFER ADDRESS
*    A5 = STACK BASE
*    A6 = DWT ADDRESS 
*    A7 = ORDER 
*    A8 = ECB ADDRESS 
* 
* 
********************************
*    TABLES                    *
********************************
* 
* 
	DATA	DVBLEN+DVBLEN	MMU BUFFER LENGTH 
	DATA	DEVIND	DEVICE INDEX 
LPADR	DATA	ACLP	ACTIVATION DRIVER 
	DATA	0	ABORT ROUTINE ADDRESS 
* 
	EJECT			DRLP01 
* 
* 
*    A C T I V A T I O N
* 
* 
ACLP	EQU	*
	LDK	A1,/0D	CARRIAGE RETURN 
	LDR	A7,A7	ORDER 0 ?
	RF(NE)	ACLP05	NO 
	LDKL	A4,DWTBC	BYTE COUNTER 
	ADR	A4,A6	ADD DWT ADDRESS
	SCR	A1,A4	STORE CARRIAGE RETURN
	LDK	A2,1 
	RF	ACLP30
* 
ACLP05	LD	A4,2,A8	BUFFER ADDRESS
	LD	A2,4,A8	REQ. LENGTH 
	SUK	A7,5	ORDER 5 ? 
	RF(E)	ACLP30 
	SUK	A7,1	ORDER 6 ? 
	RF(E)	ACLP10 
* 
ACERR	ABL	DISIOE
* 
	EJECT			DRLP01 
* 
* 
ACLP10	EQU	*
	CWK	A2,2	REQ. LENGTH < 2 ? 
	RF(NL)	ACLP12	NO 
	LDK	A2,2	YES , SAME ACTIONS AS FOR REQ. LENGTH=2 
* 
ACLP12	EQU	*
	LDR	A3,A4	BUFFER ADDRESS 
	ADR	A3,A2	ADDED WITH REQ. LENGTH 
	SCR	A1,A3	STORE PRINT CHARACTER
	ADK	A2,1 
	LCR	A3,A4
	ECR	A3,A3
	LC	A3,1,A4	GET CONTROL CHARACTER 
	ST	A3,CONCHA 
	ANK	A3,/FF 
	SUK	A3,/2B	SUPER POSITIONING ? 
	RF(NE)	ACLP15	NO 
	SUK	A2,2	DECREMENT REQ. LENGTH 
	ADK	A4,2	INCREMENT BUFFER ADDRESS
	RF	ACLP30
* 
ACLP15	LDK	A1,/0A	LINE FEED 
	SC	A1,1,A4	SECOND CHARACTER IN BUFFER
	SUK	A3,5	TWO LINE FEEDS ?
	RF(E)	ACLP20	YES 
	LDK	A1,/0C	TOP OF FORM 
	SUK	A3,1	WANTED ?
	RF(E)	ACLP20	YES 
	LDK	A1,/0D	CARRIAGE RETURN 
* 
	EJECT			DRLP01 
* 
* 
ACLP20	SCR	A1,A4	STORE FIRST CHARACTER IN BUFFER
ACLP30	CF	A5,CIOSTA	SEND BUFFER 
	SUK	A7,6	ORDER 6 ? 
	RF(NE)	ENDIO 
	LDR	A2,A2
	RF(NN)	ACLP35
	IM	6,A8	ADD FOR EXTRA CHAR. AT BUFFER END (/0D)
* 
ACLP35	EQU	*
	LD	A4,2,A8	BUFFER ADDRESS
	LDKL	A3,0
CONCHA	EQU	*-2
	SC	A3,1,A4	RESET CONTROL CHARACTER IN BUFFER 
	ECR	A3,A3
	SCR	A3,A4	ALSO RESET FIRST BYTE
* 
ENDIO	CF	A15,TENDIO	END REQUEST 
EXIT	ABL	TDISP
* 
	EJECT			DRLP01 
* 
* 
*    CIOSTA 
*    SUBROUTINE TO SEND BUFFER
* 
* 
CIOSTA	EQU	*
	ST	A5,DWTA5,A6	SAVE A5 
	IFT	CHAN=1		=1 
	NGR	A1,A2	NEGATE BUFFER LENGTH	=1
	ST	A1,DWTA3,A6	END OF BUFFER INDICATOR	=1
	ST	A4,DWTA4,A6	BUFFER POINTER	=1 
	XIF			=1 
	ORKL	A2,/4000	INDICATE CHARACTER MODE, OUTPUT AND
			IN RIGHT BYTE NUMBER OF
			CHARACTERS TO SEND 
	WER	A2,MUXLP	FIRST WRITE EXTERNAL REGISTER 
	WER	A4,MUXLP+1	SECOND WRITE EXTERNAL REGISTER
* 
	LD	A1,PFPOST 
	RB(NZ)	EXIT	PFINIT PENDING 
	CIO	A2,1,DWALP	CIO START 
	RB(Z)	EXIT 
	LDK	A1,1	ERROR 
	RB	ENDIO 
* 
	EJECT			DRLP01 
* 
* 
*    RECOVERY ROUTINE 
* 
* 
LPON	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
* 
	LDK	A1,1	NOT OPERABLE
	LDKL	A6,DWLP01	DWT ADDRESS 
	LD	A2,DWTST,A6	DWT STATUS
	RB(N)	EXIT	LP FREE 
	RF	IHLP30
* 
	EJECT			DRLP01 
* 
* 
*    I N T E R R U P T
* 
* 
IHLP	EQU	*
	ST	P,INTSAV	SAVE LAST INTERRUPT
* 
	IFT	CHAN=1 
	STR	A1,A15 
	STR	A2,A15 
	LDKL	A1,DWLP01	DWT ADDRESS	=1
	LC*	A2,DWTA4,A1	NEXT BYTE TO PRINT	=1
	OTR	A2,0,DWALP	WRITE ONE BYTE
	RF(NA)	IHLP20	NOT ACCEPTED 
	IM	DWTA4,A1	INCREMENT BUFFER POINTER	=1
	IM	DWTA3,A1	INCREMENT END OF BUFFER INDICATOR	=1 
	RF(N)	IHLP10	NOT LAST BYTE	=1
	CIO	A2,0,DWALP	CIO HALT
IHLP10	EQU	*
	LDR*	A2,A15
	LDR*	A1,A15
	RTN	A15
	EJECT
* 
* 
* 
IHLP20	EQU	*		=1
	LDR*	A2,A15		=1
	LDR*	A1,A15		=1
	XIF
* 
	IFT	CPU852=1		=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK	=1
	XIF			=1 
* 
	IFT	CPU852=0		=1 
	MSR	8,A15	SAVE A1-A8 ON STACK	=1 
	XIF			=1 
* 
	SST	A1,DWALP	GET STATUS
	LDKL	A6,DWLP01	DWT ADDRESS 
* 
IHLP30	EQU	*
	LD	A7,DWTOR,A6	ORDER 
	ANK	A7,/FF 
	LD	A8,DWTECB,A6	ECB ADDRESS
* 
	LD	A2,4,A8		=1 
	ST	A2,6,A8	STORE EFF. LENGTH 
	LD	A5,DWTA5,A6	GET STACK VALUE 
	RTN	A5 
* 
	EJECT			DRLP01 
* 
*    D W L P 0 1
* 
*    DEVICE WORK TABLE FOR LINE PRINTER 
* 
DWLP01	EQU	*
	DATA	0	CHANNEL PARAMETER 
	DATA	/8000	STATUS
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	LPADR	ADDRESS TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TERMINAL QUEUE
	IFT	MMUPAG=1 
	DATA	0	SAVE AREA USER ECB ADDRESS
	DATA	DEVECB	MMU ECB ADDRESS
	XIF
	DATA	0	OUTPUT QUEUE LINK 
	DATA	0	SAVE AREA FOR A3
	DATA	0	SAVE AREA FOR A4
	DATA	0	SAVE AREA FOR A5
	RES	4	DWT STACK
* 
	IFT	MMUPAG=1 
DEVECB	EQU	*
	DATA	0 
	DATA	LP:BUF
	DATA	0,0,0,0 
LP:BUF	RES	DVBLEN+1 
	XIF
* 
	END

Full view