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

⟦c61a772e6⟧

    Length: 17262 (0x436e)
    Notes: pts_type(SC)
    Names: »DRGP01.SC«

Derivation

└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
    └─⟦this⟧ »M:KMDV/DRGP01.SC« 

PTS(SC)

	IDENT DRGP01 	REL 8.2 78-09-15  870105040820 

* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRGP01 = DRIVER GENERAL PRINTER 
* 
* 
* 
* 
* 
* 
************************************************* 
* 
* 
*    THIS DRIVER HANDLES GENERAL TERMINAL PRINTER 
*    PTS 6321 CONNECTED TO THE SYSTEM VIA CHLT OR CHRT. 
* 
*    THE DRIVER ALSO INCLUDES DEVICE DEPENDENT ECHO 
*    FUNCTIONS, WHICH MAKES IT POSSIBLE TO USE THE
*    GENERAL PRINTER AS AN ECHO DEVICE TO ANY KEY-
*    BOARD, THAT RUNS UNDER THE GENERAL KEYBOARD
*    DRIVER DRKB01. 
* 
* 
*    THE DRIVER CONSISTS OF FOLLOWING PARTS:
* 
*    A C G P       ACTIVATION PART
* 
*    I H G P       INTERRUPT HANDLER
* 
*    R C G P       RECOVERY ROUTINE 
* 
*    E C H O G P   ECHO FUNCTIONS 
* 
* 
*    THE FOLLOWING ORDERS ARE TREATED:
* 
*    ORDER 00: TEST STATUS
*          05: BASIC WRITE
*          06: STANDARD WRITE 
* 
*    NORMAL REGISTER USAGE
* 
*    REGISTER A1 = RETURN CODE
*             A2 = OUTPUT CHARACTER 
*             A3 = BUFFER INDEX 
*             A4 = WORK REGISTER
*             A5 = STACK BASE 
*             A6 = DWT-ADDRESS
*             A7 = ORDER
*             A8 = ECB-ADDRESS
* 
* 
*    SYSTEM ADAPTATION
* 
*    THE CODES FOR ECHO OF BACKSPACE (GPBSP) AND CLEAR
*    (GPCLR) KEYS SHOULD BE DEFINED.
* 
*    BY MEANS OF CONDITIONAL ASSEMBLY THE DRIVER IS 
*    ADAPTED TO HANDLE FOLLOWING FUNCTIONS. 
*    --ROOMLESS POINT 
*    --ACCEPTANCE OF SPECIAL CHARACTER /13,/14 OR BOTH
* 
*    --EXCLUDE ECHOING OF AN EXTRA SPACE BETWEEN EACH CHARACTER 
*    --SUPPRESS ECHOING OF END OF RECORD CHARACTER
**    --SUPPRESION OF TRAILING BLANKS 
*    --END OF REQUEST WHEN PRINTER HARDWARE BECOMES INACTIVE
* 
*    THE CHARACTER CODES FOR ROOMLESS POINT DIGITS
*    IS DEFINED IN A SPECIAL TABLE. STANDARD IS SHB CHARACTER SET 
	EJECT
* 
* 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
* 
	ENTRY	GPAD	ADDRESS TO ADDRESSBLOCK 
	ENTRY	ECHOGP	DEVICE-DEPENDENT ECHO-ROUTINE 
* 
* 
* 
* 
***************************************** 
*    EXTERNAL TOSS MODULE ENTRIES       * 
***************************************** 
* 
* 
	EXTRN	DISIOE	I/O REQUEST ERROR 
	EXTRN	OUTPUT	SUBROUTINE TO SEND CHARACTER
	EXTRN	TDISP	DISPATCHER 
	EXTRN	LDREG	LOAD REGISTERS A4, A3, A5, A7, A8 AND RETURN 
	EXTRN	TENDIO	END I/O 
	EXTRN	SAVE8	SAVE 8 REGISTERS ON A15 STACK
	EXTRN	ECHRTN	RETURN TO KEYBOARD AFTER ECHO 
	EXTRN	GETCHR	GET CHARACTER FROM ECB-BUFFER 
	EJECT
* 
************************
*    DWT PARAMETERS    *
************************
* 
	EXTRN	DWTST	STATUS 
	EXTRN	DWTOR	ORDER
* 
********************************
*    DWT-DISPLACEMENT          *
********************************
* 
DWTA3	EQU	/12	SAVE AREA FOR A3
DWTBC	EQU	/3	BYTE COUNTER 
DWTAP	EQU	/22	HEAD POSITION POINTER 
* 
	EJECT
* 
* 
************* 
* CONSTANTS * 
************* 
* 
* 
SOH	EQU	/01	RESET PRINT BUFFER REMOTE AND LOCAL DUMMY 
STX	EQU	/82	START OF MESSAGE
ETB	EQU	/97	END OF MESSAGE
ETX	EQU	/03	LAST DUMMY
CR	EQU	/0D	CARRIAGE RETURN
LF	EQU	/0A	LINE FEED
FFED	EQU	/0C	FORM FEED
SPACE	EQU	/20	SPACE 
PROUT	EQU	/04	PAPER OUT OR READY SWITCH OFF 
	EJECT
**************************************
*    CONDITIONAL ASSEMBLY            *
**************************************
* 
*    IT IS POSSIBLE TO EXCLUDE ROOMLESS POINT 
*    FUNCTION BY SETTING X:A = 0
* 
X:A	EQU	1 
CROOM	EQU	1 
* 
*    ACCEPTANCE OF SPECIAL CHARACTER /13 CAN BE 
*    INCLUDED IN THE DRIVER BY SETTING X:B=1
* 
X:B	EQU	0 
TRETON	EQU	0
* 
*    ACCEPTANCE OF SPECIAL CHARACTER /14 CAN BE 
*    INCLUDED IN THE DRIVER BY SETTING X:C=1
* 
X:C	EQU	0 
FJOTON	EQU	0
* 
*    IT IS POSSIBLE TO EXCLUDE ECHOING OF 
*    AN EXTRA SPACE AFTER EACH CHARACTER
*   BY SETTING X:D=0
* 
X:D	EQU	0 
COSPAC	EQU	0
* 
*    BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE
*    TO SUPPRESS ECHOING OF END OF RECORD CHARACTER.
*    THIS IS ATTAINED BY SETTING THE CONSTANT X:E=0.
* 
X:E	EQU	0 
EORECH	EQU	0
* 
*    SUPPRESSING OF SPACES IN RIGHT HAND OF LINE
*    BY SETTING X:F=1 
* 
X:F	EQU	0 
SUPSPA	EQU	1
* 
* END OF REQUEST IN SITUATIONS WHERE
* THE SELECTOR UNIT OR PRINTER HARDWARE 
* IS INACTIVE CAN BE CHOSEN BY SETTING
* THE CONSTANT RECEND = 1 
X:G	EQU	0 
RECEND	EQU	0
	EJECT
**************************************
*    SPECIAL KEYS FOR ECHO FUNCTION   * 
**************************************
* 
GPBSP	EQU	/2D	BACK SPACE
GPCLR	EQU	/3F	CLEAR 
* 
********************
*    RETURN CODES  *
********************
* 
PAROUT	EQU	/20	PAPER OUT OR READY SWITCH OFF
CCERR	EQU	/4	CODE CHECK ERROR 
TPERR	EQU	/2	THROUGHPUT ERROR 
OPERR	EQU	/1	NOT OPERABLE, POWER OFF
* 
	EJECT
* 
* 
**********
* TABLES *
**********
* 
* 
	IFT	CROOM=1
* 
ROMTAB	EQU	*
			TABLE FOR ROOMLESS POINT CHARACTERS
	DATA	/2122,/2426,/3B3C,/3E40,/5E5F 
* 
	XIF
* 
* 
* 
GPAD	EQU	*	ADDRESS BLOCK
	DATA	ACGP	ACTIVATION DRIVER
	DATA	IHGP	INTERRUPT HANDLER
	DATA	RCGP	RECOVERY ROUTINE 
	DATA	ECHOGP	DEVICE-DEPENDENT ECHO-ROUTINE
	EJECT
* 
*    A C G P
* 
*    ACGP = ACTIVATION DRIVER GENERAL PRINTER 
* 
*    ORDER 00: TEST STATUS. DUMMY IS SENT TO PRINTER AND RETURN CODE
*              IS SET IF PAPER OUT OR READY SWITCH OFF. 
*              RETURN CODE IS ALSO SET IF TIME-OUT IS SIGNALLED FROM
*              CHANNEL UNIT.
* 
*    ORDER 05: BASIC WRITE. CHARACTER ARE SENT TO PRINTER 
*              FROM ECB-BUFFER
* 
*    ORDER 06: STANDARD WRITE. CHARACTERS ARE SENT TO PRINTER FROM
*               ECB-BUFFER AFTER INDIVIDUAL CODE CHECK. 
* 
ACGP	EQU	*
	LDK	A2,STX	START OF MESSAGE
	LDK	A3,0	RESET BUFFER INDEX
	LDK	A4,0 
	LDR	A7,A7	ORDER 0? 
	RF(E)	AGP410 
	SUK	A7,5	ORDER 5?
	RF(E)	ACGP05 
	SUK	A7,1	ORDER 6?
	ABL(NE)	DISIOE	I/O REQUEST ERROR 
	LD	A1,4,A8	GET REQUESTED LENGTH
	RF(E)	ACGP02 
	LD	A3,2,A8	GET BUFFER ADDRESS
	LC	A3,1,A3	GET CONTROL CHARACTER 
	ANK	A3,/FF 
ACGP02	EQU	*
	SUK	A3,/2B	POSITIONING BEFORE WRITE? 
	RF(E)	ACGP12 
	LDK	A4,2	INDICATE CR AND LF/FFED TO SEND 
	EJECT
* 
*    SEND DUMMY AND, IF CONTROL CHARACTER 
*    # 2B, SEND CARRIAGE RETURN AND LINE FEED 
* 
ACGP05	EQU	*
	CF	A5,OUTPUT	SEND CHARACTER
	SUK	A4,1 
	RF(N)	ACGP19	START SECTION ENDED?
	RF(P)	ACGP15	STX 
* 
*    SEND LINE FEED OR FORM FEED
* 
	SUK	A3,5	CONTROL CHARACTER /30 ? 
	RF(NE)	ACGP07
	ADK	A4,1	YES EXTRA LINE FEED TO SEND 
ACGP07	EQU	*
	LDK	A2,LF
ACGP12	LDK	A3,2	START BUFFER INDEX
	RB	ACGP05
ACGP15	ST	A4,DWTAP,A6	RESET HEAD POSITION POINTER 
	LDK	A2,CR	CARRIAGE RETURN
	RB	ACGP05
	EJECT
* 
*    GET, CHECK AND SEND CHARACTER
*    (IF ORDER 5 NO CHECK)
* 
ACGP17	CF	A5,OUTPUT 
ACGP18	IM	DWTST,A6	POSITION COUNTER UPDATING
ACGP19	EQU	*
	LDKL	A4,/400	INDICATE LINE FEED DONE 
	ORS	A4,DWTST,A6
	IFT	SUPSPA=1 
	CF	A15,SKIPSP	SKIP SPACES IN END OF ECB-BUFFER 
	XIF
	LDK	A4,0 
ACGP20	CF	A15,GETCHR	GET CHARACTER FROM ECB-BUFFER
	LDR	A1,A1	LAST CHARACTER?
	RF(NP)	AGP400
	LDR	A1,A2
	SUK	A7,5	ORDER 5?
	RF(E)	ACGP24	BASIC WRITE 
	SUK	A1,9	HARDWARE TABULATION ? 
	RF(NE)	ACGP22
	ST	A4,DWTAP,A6	RESET HEAD POSITION POINTER 
	RB	ACGP17
ACGP22	SUK	A1,8	TABULATION CHARACTER ?
	RF(E)	ACGP40 
* 
	IFT	TRETON=0 
	IFT	FJOTON=0 
* 
	SUK	A1,/F	LESS THAN /20 ?
* 
	XIF
* 
	IFT	TRETON=0 
	IFT	FJOTON=1 
* 
	SUK	A1,3	/14?
	RB(E)	ACGP17 
	SUK	A1,/C	LESS THAN /20 ?
* 
	XIF
* 
* 
	IFT	TRETON=1 
	IFT	FJOTON=0 
* 
	SUK	A1,2	/13 ? 
	RB(E)	ACGP17 
	SUK	A1,/D	LESS THAN /20 ?
	XIF
* 
* 
	IFT	TRETON=1 
	IFT	FJOTON=1 
* 
	SUK	A1,2	/13?
	RB(E)	ACGP17 
	SUK	A1,1	/14?
	RB(E)	ACGP17 
	SUK	A1,/C	LESS THAN /20 ?
* 
	XIF
* 
	RF(N)	ACGP30	CODE CHECK ERROR
	SUK	A1,/8E	ROOMLESS POINT?  (AE) 
	RF(E)	AGP100 
	ADK	A1,/4F	GREATER THAN /5F
	RB(NP)	ACGP17
	SUK	A1,/20 
	RF(NN)	ACGP30
	SUK	A2,/20	TRANSFORM CHARACTER BETWEEN /60 TO /7F
			TO CHARACTER BETWEEN /40 TO /5F
	RB	ACGP17
ACGP24	EQU	*
	SUK	A1,/D
	RF(NZ)	ACGP26	NOT CR 
	CM	DWTST,A6	SET POS LTR.TO 0 
	CM	DWTAP,A6	RESET HEAD POS.POIINTER
ACGP26	ADK	A1,3 
	RB(NZ)	ACGP17	NOT LINE FEED
	SUK	A1,1 
	ADS	A1,DWTST,A6	DECREMENT POS COUNTER
	RB	ACGP17
	EJECT
* 
*    CODE CHECK ERROR 
* 
ACGP30	EQU	*
	LDK	A1,CCERR 
	ORS	A1,8,A8	RETURN CODE
	RB	ACGP20
	EJECT
* 
*    TABULATION 
* 
ACGP40	EQU	*
	CF	A15,GETCHR	GET FIRST ASCII CHARACTER
	LDR	A4,A2
	CF	A15,GETCHR	GET SECOND ASCII CHARACTER 
	ANK	A2,/F
	ANK	A4,/F
	RF(E)	ACGP44 
ACGP43	ADK	A2,/A	FROM DECIMAL TO HEXADECIMAL
	SUK	A4,1 
	RB(NE)	ACGP43
ACGP44	SU	A2,DWTAP,A6	SUBTRACT HEAD POSITION POINTER
	LC	A4,DWTBC,A6 
	SUR	A2,A4	AND REQUESTS POSITION COUNTER
			TO GET NUMBER OF SPACES TO SEND
	RB(NP)	ACGP20
	LDR	A4,A2
ACGP45	LDK	A2,SPACE	LOOP ALSO USED BY RECOVERY ROUTINE
ACGP46	CF	A5,OUTPUT 
	IM	DWTST,A6	INCREMENT BUFFER INDEX 
	SUK	A4,1 
	RB(P)	ACGP45 
	LDR	A3,A3	RECOVERY?
	RB(NE)	ACGP20
	SC	A4,DWTBC,A6	RESET POSITION POINTER
	LDK	A3,2	START BUFFER INDEX
	RB	ACGP19
	EJECT
* 
*    ROOMLESS POINT 
* 
AGP100	EQU	*
* 
	IFT	CROOM=1
* 
	CF	A15,GETCHR	GET CHARACTER TO SEND
	ANK	A2,/F
	LC	A2,ROMTAB,A2	TRANSFORM
* 
	XIF
* 
* 
	IFF	CROOM=1
* 
	ANK	A2,/7F 
* 
	XIF
* 
	RB	ACGP17
	EJECT
* 
* 
*    SEND LAST DUMMY , LOAD A1 WITH 
*    RETURN CODE AND END I/O
* 
AGP400	EQU	*
	LDK	A2,ETB	END OF MESSAGE
	CF	A5,OUTPUT	SEND
AGP410	LDK	A2,ETX	LAST DUMMY
	CF	A5,OUTPUT	SEND
AGP420	EQU	*
	CF	A15,UPDAPP	UPDATE HEAD POSITION COUNTER 
ENDIO	CF	A15,TENDIO	END I/O 
EXIT	ABL	TDISP	GO TO DISPATCHER 
AGP430	EQU	*
	LD	A3,DWTA3,A6 
	ST	A3,6,A8	EFF. LENGTH 
	RB	AGP420
	EJECT
* 
* 
*    UPDAPP = SUBROUTINE TO UPDATE HEAD 
*             POSITION POINTER WHEN END 
*             OF REQUEST IS REACHED 
UPDAPP	EQU	*
	LC	A3,DWTBC,A6	GET POSITION COUNTER
	ADS	A3,DWTAP,A6	UPDATE HEAD POSITION POINTER 
	LDK	A3,0 
	SC	A3,DWTBC,A6	RESET  POSITION COUNTER 
	RTN	A15
	IFT	SUPSPA=1 
	EJECT
* 
* 
*    SKIPSP = SUBROTINE TO SKIP SPACES
*             IN END OF ECB-BUFFER. 
*             REQUESTED LENGTH IN ECB IS UPDATED. 
*             A1,A2,A4 - WORK REG 
* 
SKIPSP	EQU	*
	LD	A1,2,A8	GET BUFFER ADDRESS (BA) 
	LD	A2,4,A8	GET REQUESTED LENGTH(RL)
	ADR	A1,A2	GET ADD END OF BUFFER
SKIP05	CWK	A2,2 
	RF(NG)	SKIP30	RL < 3 
	SUK	A1,1	DECR. BA
	LCR	A4,A1	GET CHAR 
	CCK	A4,/2020	SPACE ? 
	RF(NE)	SKIP20	NO 
SKIP07	SUK	A2,1	DECR RL 
	RB	SKIP05	GET NEXT 
SKIP20	CWK	A2,4 
	RF(NG)	SKIP30	RL < 5 
	LC	A4,-2,A1	GET CHAR 
	CCK	A4,/1111	TABULATION CHAR ? 
	RF(NE)	SKIP30	NO 
	SUK	A1,2	DECR BA 
	SUK	A2,2	DECR RL 
	RB	SKIP07	GET NEXT 
* 
SKIP30	ST	A2,4,A8	STORE NEW RL
	RTN	A15
	XIF
	EJECT
* 
*    I H G P
* 
*    INTERRUPT
* 
IHGP	EQU	*
	LD	A4,DWTST,A6	BUSY? 
	RB(N)	EXIT	NO
	SLL	A4,2	ECHO MODE ? 
	RF(N)	IHGP10 
	LDR	A7,A7	ORDER 0? 
	RB(Z)	AGP430 
	LDR	A1,A1	RETURN CODE FROM CHANNEL UNIT ?
	IFT	RECEND=0 
	RB(NZ)	EXIT
	XIF
	IFT	RECEND=1 
	RB(NZ)	AGP430
	XIF

IHGP10	ABL	LDREG	RELOAD A3-A5 AND RETURN VIA A5 
	EJECT
* 
*    E C H O G P
* 
*    ECHOGP = DEVICE-DEPENDENT ECHO-ROUTINE 
* 
ECHOGP	EQU	*
	LDK	A4,COSPAC
	LDR	A7,A7	EOR? 
	RF(N)	ECGP17	YES 
* 
	IFT	EORECH=0 
* 
	SUK	A2,/80	EOR-CHARACTER 
	RF(NN)	ECGP20	YES
	ADK	A2,/80 
* 
	XIF
* 
	LDR	A1,A2
	ANK	A1,/7F 
	SUK	A1,/8
	RF(E)	ECGP40	BACKSPACE 
	SUK	A1,/10 
	RF(E)	ECGP50	CLEAR 
	SUK	A1,/20-/8-/10	CHECK THAT CHAR IS WITHIN /20-/5F
	RF(N)	ECGP20 
	SUK	A1,/5F-/20 
	RF(P)	ECGP20 
ECGP10	CF	A5,OUTPUT	SEND CHARACTER
	IM	DWTST,A6	UPDATE POSITION COUNTER
	SUK	A4,1	READY ? 
	RF(N)	ECGP20	YES 
	RF(P)	ECGP60	NO, GO TO CLEAR SECTION 
* 
	IFT	COSPAC=1 
* 
	LDK	A2,SPACE	NO SEND SPACE 
	RB	ECGP10
* 
	XIF
* 
ECGP17	CF	A15,UPDAPP	UPDATE HEAD POSITION POINTER 
ECGP20	ABL	ECHRTN	RETURN TO KEYBOARD
	EJECT
* 
*    BACKSPACE
* 
ECGP40	EQU	*
	LDK	A2,GPBSP	BACKSPACE CHARACTER 
	RB	ECGP10
* 
*    CANCEL 
* 
ECGP50	EQU	*
	LDK	A2,GPCLR	CLEAR CHARACTER 
	LDK	A4,3 
	RB	ECGP10
ECGP60	LDK	A2,LF	LINE FEED
	LC	A3,DWTBC,A6 
	ANK	A3,/FF 
ECGP70	CF	A5,OUTPUT	SEND CHAR.
	LDK	A2,/08	BACKSPACE 
	SUK	A3,1 
	RB(NN)	ECGP70
	LDK	A3,0 
	SC	A3,DWTBC,A6	RESET POSITION COUNTER
	RB	ECGP20
	EJECT
* 
*    R C G P
* 
*    RCGP = RECOVERY ROUTINE GENERAL PRINTER
* 
* 
*    RECOVERY IS CARRIED OUT ONLY IF
*    ORDER 6 IS RUNNING 
* 
*    ON ENTRY:
* 
*    A6 = DWT-ADDRESS 
*    A7 = ORDER 
*    A8 = ECB-ADDRESS 
RCGP	EQU	*
	CF	A15,SAVE8	SAVE 8 REGISTERS ON STACK 
	LD	A2,DWTST,A6	BUSY ?
	RB(N)	EXIT	NO
	LDK	A2,SOH	RESET PRINT BUFFER CODE 
	CF	A5,OUTPUT	SEND IT 
	CWK	A7,5 
	RF(E)	RCGP10 
	CWK	A7,6	ORDER 6?
	RF(E)	RCGP05	YES 
	CWK	A7,0	ORDER 0?
	RB(E)	ENDIO
	RB	EXIT
RCGP05	EQU	*
	LC	A2,DWTST,A6	GET LEFT BYTE OF STATUS WORD
	ANK	A2,/4	LINE FEED DONE ? 
	ABL(E)	ACGP	NO 
	LDK	A2,SPACE 
	CF	A5,OUTPUT	SEND SPACE
	LDK	A2,STX 
	CF	A5,OUTPUT	SEND STX
	LDK	A2,CR	CARRIAGE RETURN
	LDK	A3,0 
	LD	A4,DWTAP,A6	GET NUMBER OF SPACES TO SEND
	ABL	ACGP46 
RCGP10	LDK	A1,TPERR	SET RETURN CODE 
	ABL	AGP430 
	END

Full view