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

⟦f374267e3⟧

    Length: 10788 (0x2a24)
    Notes: pts_type(SC)
    Names: »DRLP01.SC«

Derivation

└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/DRLP01.SC« 

PTS(SC)

	IDENT DRLP01 	REL 8.2 78-09-15  870105040820 

			UPDATE   #0   77-12-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
* 
* 
************************
*    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	DWT-STATUS 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	INTSAV	SAVE AREA LAST INTERRUPT
* 
* 
***************************** 
*    CONSTANTS              * 
***************************** 
* 
DWALP	EQU	/0F 
MUXLP	EQU	DWALP+DWALP	MUX-ADDRESS 
DWTBC	EQU	/3
DWTA3	EQU	/12 
DWTA4	EQU	/14 
DWTA5	EQU	/16 
DWTSB2	EQU	/1E
* 
	EJECT
* 
**********************************
*    CONDITIONAL ASSEMBLY        *
**********************************
* 
*    PROGRAMMED CHANNEL MAY BE USED INSTEAD OF
*    MULTIPLEX CHANNEL BY SETTING X:A=1 
X:A	EQU	0 
CHAN	EQU	X:A
	EJECT
* 
* 
*********************** 
*    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
* 
* 
************************************
*    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                    *
********************************
* 
* 
LPADR	DATA	ACLP	ACTIVATION DRIVER 
* 
	EJECT
* 
* 
*    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

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
	SLL	A3,8 
	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 
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 
	SRL	A3,8 
	SCR	A3,A4	ALSO RESET FIRST BYTE
ENDIO	CF	A15,TENDIO	END REQUEST 
EXIT	ABL	TDISP
	EJECT
* 
* 
*    CIOSTA 
*    SUBROUTINE TO SEND BUFFER
* 
CIOSTA	EQU	*
	ST	A5,DWTA5,A6	SAVE A5 
	IFT	CHAN=0 
	ORKL	A2,/4000	INDICATE CHARACTER MODE, OUTPUT AND
			IN RIGHT BYTE NUMBER OF
			CHARACTERS TO SEND 
	WER	A2,MUXLP	FIRST WRITE EXTERNAL REGISTER 
	LDR	A2,A4	BUFFER ADDRESS 
	WER	A2,MUXLP+1	SECOND WRITE EXTERNAL REGISTER
	XIF
	IFT	CHAN=1 
	ST	A4,DWTA3,A6	SAVE BUFFER ADDRESS 
	ADR	A4,A2
	ST	A4,DWTA4,A6	SAVE BUFFER END ADDRESS+1 
	XIF
	CIO	A2,1,DWALP	CIO START 
	RB	EXIT
	EJECT
* 
* 
*    RECOVERY ROUTINE 
* 
LPON	CF	A15,SAVE8 
	LDK	A1,1	NOT OPERABLE
	LDKL	A6,DWLP01	DWT-ADDRESS 
	LD	A2,DWTST,A6	DWT STATUS
	RB(N)	EXIT	LP FREE 
	RF	IHLP30
	EJECT
* 
* 
*    I N T E R R U P T
* 
IHLP	EQU	*
	ST	P,INTSAV	SAVE LAST INTERRUPT
	IFT	CHAN=0 
	CF	A15,SAVE8	SAVE REGISTERS
	XIF
	IFT	CHAN=1 
	STR	A1,A15 
	STR	A2,A15 
	LDKL	A2,DWLP01	DWT-ADDRESS 
	LD	A1,DWTA3,A2	POINTER AT NEXT BYTE IN BUFFER
	LCR	A2,A1	NEXT BYTE
	OTR	A2,0,DWALP	WRITE ONE BYTE
	RF(NA)	IHLP20	NOT ACCEPTED 
	LDKL	A2,DWLP01	DWT-ADDRESS 
	ADK	A1,1 
	ST	A1,DWTA3,A2	UPDATE POINTER
	CW	A1,DWTA4,A2 
	RF(NE)	IHLP10	NOT LAST BYTE
	CIO	A2,0,DWALP	CIO HALT
IHLP10	EQU	*
	LDR*	A2,A15
	LDR*	A1,A15
	RTN	A15
* 
* 
* 
IHLP20	STR	A3,A15 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	STR	A7,A15 
	STR	A8,A15 
	XIF
	SST	A1,DWALP	TO INACTIVE 
	LDKL	A6,DWLP01	DWT-ADDRESS 
IHLP30	EQU	*
	LD	A7,DWTOR,A6	ORDER 
	ANK	A7,/FF 
	LD	A8,DWTECB,A6	ECB-ADDRESS
	IFT	CHAN=0 
	RER	A3,MUXLP	GET NUMBER OF NOT TRANSFERED CHAR.
	ANKL	A3,/FFF 
	LD	A2,4,A8	CALCULATE NUMB. OF TRANSFERED CHARACTERS
	SUR	A2,A3
	XIF
	IFT	CHAN=1 
	LD	A2,DWTA3,A6	GET BUFFER-POINTER
	CWK	A7,6	ORDER 6?
	RF(NE)	IHLP35
	ADK	A2,1	YES 
IHLP35	EQU	*
	SU	A2,2,A8	CALCULATE NUMB. OF TRANSFERED CHARACTERS
	XIF
	ST	A2,6,A8	STORE EFF. LENGTH 
	LD	A5,DWTA5,A6	GET STACK VALUE 
	RTN	A5 
	EJECT
* 
* 
*    D W L P 0 1
* 
*    DEVICE WORK TABLE FOR LINE PRINTER 
* 
DWLP01	EQU	*
	DATA	0	CHANNEL PARAMETER 
	DATA	/8000	STATUS
	DATA	0,0	LAST OUTPUT, ORDER AND ECB-ADDRESS
	DATA	LPADR	ADDRESS TO ADDRESS-BLOCK
	DATA	0	TTAB-ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TERMINAL QUEUE
	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
	END

Full view