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

⟦34ec0e6b1⟧

    Length: 14198 (0x3776)
    Notes: pts_type(SC)
    Names: »DRGP04.SC«

Derivation

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

PTS(SC)

	IDENT DRGP04 	REL 11.0 81-03-13 870105041100 

			= 1 ARRANGEMENTS FOR THE FIRST VERSION 
			    OF COPY80 ARE DELETED
			REL 11.0 81-01-26
* 
****************************************
* 
* 
* 
*   PHILIPS TERMINAL SYSTEM  P T S
* 
*   D R G P 0 4  =  DRIVER HARD COPY PRINTER
* 
* 
* 
****************************************
* 
*   THIS DRIVER HANDLES THE HARD COPY 
*   PRINTER HP 75 ( COPY 80 ).
* 
*   THE FOLLOWING ORDERS ARE TREATED :
* 
*   ORDER /00:  TEST STATUS 
*   ORDER /05:  BASIC WRITE 
*   ORDER /06:  STANDARD WRITE
*   ORDER /24:  TEST OUTPUT BUFFER AND SET PRINTER PARAMETER
* 
*   NORMAL REGISTER USAGE : 
* 
*   A1 = RETURN CODE
*   A2 = OUTPUT CHARACTER 
*   A3 = BUFFER INDEX 
*   A4 = WORK REGISTER
*   A5 = STACK BASE 
*   A6 = DWT-ADDRESS
*   A7 = ORDER
*   A8 = ECB-ADDRESS
* 
*   SYSTEM ADAPTION 
* 
*   ORDER /24, TEST OUTPUT BUFFER AND SET PRINTER 
*   PARAMETER CAN BE EXCLUDED BY MEANS OF CONDI-
*   TIONAL ASSEMBLY. THEN THE WRITE REQUESTS ARE
*   FINISHED WITHOUT WAITING FOR THE OUTPUT BUF-
*   FER TO BE EMPTY.
	EJECT
* 
******************************************
* 
*   ENTRY 
* 
******************************************
* 
	ENTRY	GPAD04	ADDRESS TO ADDRESSBLOCK 
* 
****************************************
* 
*   EXTERNAL TOSS MODULE ENTRIES
* 
****************************************
* 
	EXTRN	STABLK	START OF BLOCK
	EXTRN	OUTPUT	OUTPUT OF ONE CHARACTER 
	EXTRN	ENDBLK	END OF BLOCK
	EXTRN	INPUT	INPUT ONE CHARACTER
	EXTRN	GETCHR	GET ONE CHARACTER FROM ECB-BUFFER 
	EXTRN	ABORT	ABORT INPUT REQUEST
	EXTRN	SETIME	SETS TIMER
	EXTRN	LENDIS	END I/O WITH DISPATCH 
	EXTRN	LENDER	END I/O WITH ERROR AND DISPATCH 
* 
*   ECB DISPLACEMENTS 
* 
	EXTRN	ECBBA	BUFFER ADDRESS 
	EXTRN	ECBRL	REQUESTED LENGTH 
	EXTRN	ECBRC	RETURN CODE
	EXTRN	ECBCW	CONTROL WORD 
* 
*   DWT DISPLACEMENTS 
* 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTDEV	TERMINAL DEVICE STATUS WORD 
* 
DWTBLC	EQU	2	CHARACTERS IN BLOCK COUNTER
DWTLFC	EQU	4	LINE FEED COUNTER
DWTTP	EQU	6	TIMER POINTER 
* 
******************************************
* 
*   CONSTANTS 
* 
******************************************
* 
LF	EQU	/0A	LINE FEED
ETX	EQU	/3	ETX ( /03 )
CCERR	EQU	/4	CODE CHECK ERROR 
TIME	EQU	/1	100 MILLISECONDS
* 
****************************************
* 
*   ADDRESS BLOCK 
* 
****************************************
* 
	DATA	DVBLEN	BUFFER LENGTH
	DATA	2	DEVICE INDEX
GPAD04	EQU	*
	DATA	ACGP04	ACTIVATION PART
	DATA	ABGP04	ABORT ROUTINE
	DATA	0	NO INTERRUPT HANDLER
	DATA	RCGP04	RECOVERY ROUTINE 
	DATA	0	NO ECHO ROUTINE 
* 
****************************************
* 
*   CONDITIONAL ASSEMBLY
* 
****************************************
* 
*   ORDER /24 MAY BE EXCLUDED BY SETTING X:A = 0
* 
X:A	EQU	1 
ORD24	EQU	X:A 
* 
* 
*   MEMORY MANAGEMENT BUFFER SIZE 
* 
X:B	EQU	80
DVBLEN	EQU	X:B
* 
*   MAXIMUM BLOCK SIZE
* 
X:C	EQU	/80 
MAXBLK	EQU	X:C
* 
* 
	EJECT
* 
***************************************** 
* 
*   A C G P 0 4  =  ACTIVATION PART 
* 
*   THIS PART CHECKS THE ORDER AND BRANCHES 
*   TO THE APPROPRIATE PART OF THE DRIVER.
* 
***************************************** 
* 
ACGP04	EQU	*
	LDK	A3,0	RESET BUFFER INDEX
	LDK	A2,MAXBLK	GET BLOCK SIZE 
	CF	A5,STABLK	START BLOCK 
	RF(NZ)	GPER10	NOT OK ! 
	CM	DWTBLC+DWTDEV,A6	CLEAR CHARACTERS IN BLOCK COUNTER
* 
*   TEST ORDER
* 
	LDR	A7,A7	GET ORDER
	RF(Z)	GP400	ORDER /00, TEST STATUS 
	SUK	A7,5 
	RF(N)	REQERR	REQUEST ERROR ! 
	SUK	A7,/1F 
	IFT	ORD24=1
	RF(Z)	GP400	ORDER /24, TEST OUTPUT BUFFER AND SET PARAM. 
	XIF
	IFT	ORD24=0
	RF(Z)	REQERR	ORDER /24 IS EXCLUDED ! 
	XIF
	ADK	A7,/1E 
	RF(P)	REQERR	REQUEST ERROR ! 
	RF(N)	GP200	ORDER /05, BASIC WRITE ! 
	ADK	A7,1 
	RF(P)	GP100	ORDER/06, STANDARD WRITE ! 
* 
*   REQUEST ERROR 
* 
REQERR	EQU	*
	CF	A5,ENDBLK	END OF BLOCK
	ABL	LENDER	SET RETURN CODE AND END I/O 
	EJECT
* 
****************************************
* 
*   WRITING PART
* 
*   THIS IS THE ENTRY POINT FOR ORDER /06, STANDARD WRITE.
*   THE REQUESTED LENGTH IS CHECKED, THE CONTROL CHARACTER
*   IS TREATED AND THE REST OF THE CHARACTERS ARE SENT
*   AFTER INDIVIDUAL CODE CHECK.
* 
***************************************** 
* 
GP100	EQU	* 
* 
*   TEST REQUESTED LENGTH 
* 
	LD	A2,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A2,2	LESS THAN TWO ? 
	RF(NN)	GP110	NO !
	RB	REQERR	YES ! REQUEST ERROR !
* 
*   TEST CONTROL CHARACTER
* 
GP110	EQU	* 
	LD	A2,ECBBA,A8	GET BUFFER ADDRESS
	LC	A2,1,A2	GET CONTROL CHARACTER 
	ANK	A2,/FF 
	ADK	A3,2	INCREMENT BUFFER INDEX
	SUK	A2,/30	EXTRA LINE FEED ? 
	RF(NZ)	GP200	NO !
	LDK	A2,LF	YES ! LOAD CODE FOR LINE FEED
	C1S	DWTBLC+DWTDEV,A6	SET POS COUNTER TO -1 
	RF	GP210	SEND IT ! 
	EJECT
* 
****************************************
* 
*   THIS IS THE ENTRY POINT FOR ORDER /05, BASIC WRITE. 
*   THE REQUESTED NUMBER OF CHARACTERS ARE SENT TO
*   PRINTER FROM THE ECB-BUFFER.
* 
****************************************
* 
GP200	EQU	* 
	CF	A15,GETCHR	FETCH CHARACTER FROM ECB-BUFFER
	LDR	A1,A1	IS THERE ANY CHARACTER TO SEND ? 
	RF(NP)	GP350	NO !
* 
	LDR	A7,A7	YES ! ORDER /06 ?
	RF(P)	GP300	YES ! CHECK CHARACTER CODE 
* 
	CWK	A2,LF	LINE FEED ?
	RF(NE)	GP220	NO !
* 
GP210	EQU	* 
	IM	DWTLFC+DWTDEV,A6	YES ! INCR. LF-COUNTER 
* 
GP220	EQU	* 
	IM	DWTBLC+DWTDEV,A6	INCR. CHARACTERS IN BLOCK COUNTER
* 
	LDK	A1,MAXBLK	GET MAX BLOCK SIZE 
	CW	A1,DWTBLC+DWTDEV,A6	BLOCK FULL ?
	RF(G)	GP240	NO ! 
* 
	LDR	A4,A2	YES ! SAVE CHARACTER 
	CF	A5,ENDBLK	END OLD BLOCK 
	RF(NZ)	GPER10	AND START A NEW ONE
	CM	DWTBLC+DWTDEV,A6	CLEAR COUNTER
	LDK	A2,MAXBLK
	CF	A5,STABLK 
	RF(NZ)	GPER10
	LDR	A2,A4	RESTORE CHARACTER
* 
GP240	EQU	* 
	CF	A5,OUTPUT	SEND CHARACTER
GPER10	RF(NZ)	GPER20
	RB	GP200	NEXT CHARACTER
	EJECT
* 
****************************************
* 
*   THIS PART CHECKS CHARACTER CODES
*   FOR STANDARD WRITE
* 
****************************************
* 
GP300	EQU	* 
	LDR	A4,A2
	SUK	A4,/20	WITHIN LIMITS ? 
	RF(N)	GP310	NO ! 
* 
	SUK	A4,/5F 
	RF(P)	GP305	NO, TEST SP. CHAR
	IM	DWTBLC+DWTDEV,A6	INCR. POS. POINTER 
	RB	GP240	OK ! SEND CHARACTER 
* 
*   SPECIAL CHARACTERS ?
* 
GP305	EQU	* 
	SUK	A4,/2F	/AE ? ( ROOMLESS POINT )
	RF(NZ)	GP320	NO !
	SUK	A2,/80	YES ! CONVERT TO /2E ( ORDINARY POINT ) 
	RB	GP300	AND SEND
GP310	EQU	* 
	ADK	A4,/2	/1E OR /1F ? 
	RF(NN)	GP340	YES ! 
	ADK	A4,/A	/15 - /1D ?
	RF(P)	GP320	YES !
	ADK	A4,/3	/12 - /14 ?
	RF(P)	GP340	YES !
	RF(Z)	GP345	/11 !!  TABULATION ! 
	ADK	A4,8	/09 ? 
	RF(Z)	GP340	YES !
* 
*   CODE CHECK ERROR
* 
GP320	EQU	* 
	LDK	A1,CCERR	ILLEGAL CHAR. = BIT 13
	ORS	A1,ECBRC,A8	SET BIT IN RETURN CODE 
GP340	EQU	* 
	RB	GP200	GET NEXT CHARACTER
* 
*   TABULATION HANDLING 
* 
GP345	EQU	* 
	CF	A15,GETCHR	MAKE TWO ASCII DIGITS TO HEX CODE
	LDR	A4,A2
	CF	A15,GETCHR
	ANK	A2,/F
	ANK	A4,/F
	RF(Z)	GP347
GP346	ADK	A2,/A 
	SUK	A4,1 
	RB(NZ)	GP346 
GP347	LD	A4,DWTBLC+DWTDEV,A6	GET POS. POINTER 
	SUR	A2,A4
	RB(NP)	GP200	NO TABULATION POSSIBLE
	LDR	A4,A2	NUMBER OF SPACES TO SEND 
GP348	LDK	A2,/20	SPACE
	CF	A5,OUTPUT	SEND
	RF(NZ)	GPER20	NOT OK ! 
	SUK	A4,1	MORE TO SEND ?
	RB(P)	GP348	YES !
	RB	GP200	NO TAKE NEXT CHARACTER
	EJECT
* 
****************************************
* 
*   THIS IS THE COMPLETION PART OF THE WRITE REQUESTS 
* 
****************************************
* 
GP350	EQU	* 
	LDR	A7,A7	BASIC WRITE ?
	RF(N)	GP420	YES ! DON'T SEND LF
* 
****************************************
* 
*   THIS IS THE ENTRY POINT FOR ORDER /00,
*   TEST STATUS AND ORDER /24, TEST OUTPUT
*   BUFFER AND SET PRINTER PARAMETER. 
* 
***************************************** 
* 
GP400	EQU	* 
	LDK	A2,LF	LINE FEED
	CF	A5,OUTPUT	SEND
	RF(NZ)	GPER20	NOT OK ! 
	IM	DWTLFC+DWTDEV,A6	INCREMENT LINE FEED COUNTER
GP420	EQU	* 
*				=1 
	LDK	A2,ETX	ETX ( /03 ) 
	CF	A5,OUTPUT	SEND
	RF(NZ)	GPER20	NOT OK ! 
* 
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	GPER20	NOT OK ! 
* 
	LDR	A7,A7	TEST STATUS OR ORDER /24 ? 
	RF(Z)	GP440	YES ! DON'T TEST MODE
* 
	IFT	ORD24=0
	RF	GP480	WRITE REQUESTS ARE FINISHED WITHOUT 
*                                        CHECKING THE OUTPUT BUFFER 
	XIF
	IFT	ORD24=1
	LD	A1,DWTDEV,A6	GET STATUS WORD
	RF(NN)	GP480	WRITE REQUESTS MAY BE FINISHED
*                                        BEFORE THE OUTPUT BUFFER IS EMP
	XIF
* 
GP440	EQU	* 
* 
*   SET TIMER. TIME BEFORE TIMEOUT IS DEPENDING 
*   ON THE NUMBER OF LINE FEEDS THAT ARE SENT 
* 
	LDR	A1,A6	DWT-ADDRESS IN A1
	CF	A15,SETIME
	DATA	GPTUT,TIME
	ST	A4,DWTTP+DWTDEV,A6	STORE TIMER POINTER
	LD	A2,DWTLFC+DWTDEV,A6	NUMBER OF LINE FEEDS
	SLC	A2,3	COMPUTE TIME
	C1R	A2,A2
	STR	A2,A4	SET NEW TIME 
* 
*   READ /02 FROM PRINTER 
* 
	CF	A5,INPUT	READ 
* 
*   /02 COMES ! 
* 
	CM*	DWTTP+DWTDEV,A6	TURN OFF TIMER 
	LD	A7,DWTOR,A6	GET ORDER 
	ANK	A7,/FF	AND MASK
	SUK	A7,/24	ORDER /24 ? 
	RF(NZ)	GP480	NO ! END I/O
* 
	LDKL	A2,/8000
	LD	A1,ECBCW,A8	YES ! SET PRINTER PARAMETER.
	RF(Z)	GP460	 
	ORS	A2,DWTDEV,A6	SET BIT 0 IN DWTDEV 
	RF	GP480 
GP460	EQU	* 
	C1R	A2,A2	COMPLEMENT 
	ANS	A2,DWTDEV,A6	CLEAR BIT 0 
* 
*   END OF REQUEST
* 
GP480	EQU	* 
	LDK	A1,0	SET RETURN CODE = 0 
ENDIO	EQU	* 
GPER20	EQU	*
	CM	DWTLFC+DWTDEV,A6	RESET LINE FEED COUNTER
	ABL	LENDIS	END I/O WITH DISPATCH 
	EJECT
* 
****************************************
* 
*   TIMEOUT ROUTINE 
* 
****************************************
* 
GPTUT	EQU	* 
	LDR	A6,A1	GET DWT-ADDRESS IN A6
	CF	A15,ABORT	RESET INPUT REQUESTED BIT 
	LDK	A1,1	SET RETURN CODE ( NOT OPERABLE )
*				=1 
	RB	ENDIO 
* 
****************************************
* 
*   ABORT ROUTINE 
* 
****************************************
* 
ABGP04	EQU	*
	CF	A15,ABORT	RESET INPUT REQUESTED BIT 
	CM	DWTTP+DWTDEV,A6	RESET TIMER 
	RB	ENDIO 
	EJECT
* 
******************************************
* 
*   RECOVERY ROUTINE
* 
******************************************
* 
RCGP04	EQU	*
	LDR	A8,A8	BUSY ? 
	RF(Z)	RCGP10	NO !
* 
	CF	A15,ABORT	RESET INPUT REQUESTED FLAG
	CM	DWTTP+DWTDEV,A6	RESET TIMER 
	LDK	A1,2	SET RETURN CODE ( THROUGHPUT ERROR )
RCGP10	EQU	*
	RB	ENDIO 
	END

Full view