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

⟦c06502c86⟧

    Length: 22044 (0x561c)
    Notes: pts_type(SC)
    Names: »DRGP01.SC«

Derivation

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

PTS(SC)

	IDENT DRGP01 	REL 11.0 81-05-25 870105041100 

			=12,COND. ASS. FOR ECHO
			REL 11.0 81-01-26
			=11,BRANCH ADDR. OVERFLOW
			PRR 11.0 80-11-19
			=10,IMPROV. FOR REMOTE (RT)
			PRR 11.0 80-09-18
			=9,CHANGE IN ERROR ROUTINE 
			PRR 11.0 80-09-16
			=8,ABORT ROUTINE IMPLEMENTED 
			PRR 11.0 80-07-28
			=7,BRANCH ADDR. OVERFL.
			PRR 11.0 80-04-29
			=6,IMPROV. OF ERROR HANDLING 
			PRR 11.0 80-03-18
			=5,TENDIO AT ECHO END
			PRR 11.0 80-03-13
			=4,CORRECTION OF MMU BUFFER EQUATE 
			PRR 11.0 80-02-05
			=3,ADAPTED TO NEW INTERFACE
			REL 9.1 79-04-06 
			=1-2,GEN UPDATE TO 8.2+ STATUS 
			REL 8.2 79-03-16 
			=2,IMPROV. OF TEST ORDER 
			REL 8.2 78-11-19 
			=1,ECHO OF LF AND CR, ABIS 
			REL 8.2 78-09-15 
* 
* 
**************************************************
* 
*   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 DRKB04. 
* 
* 
*    THE DRIVER CONSISTS OF FOLLOWING PARTS:
* 
*    A C G P       ACTIVATION PART
* 
*    A B G P       ABORT ROUTINE
* 
*    R C G P       RECOVERY ROUTINE 
* 
*    E C H O G P   ECHO FUNCTIONS 
* 
	EJECT
* 
*    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	LENDER	I/O REQUEST ERROR	=3
	EXTRN	OUTPUT	SUBROUTINE TO SEND CHARACTER
	EXTRN	LDISP	DISPATCHER	=3
	EXTRN	TENDIO	END I/O 
	EXTRN	ECHRTN	RETURN TO KEYBOARD AFTER ECHO 
	EXTRN	GETCHR	GET CHARACTER FROM ECB-BUFFER 
	EXTRN	STABLK	START OF BLOCK	=3 
	EXTRN	ENDBLK	END OF BLOCK	=3 
	EJECT
* 
* 
************************
*    DWT PARAMETERS    *
************************
* 
* 
	EXTRN	DWTST	STATUS 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTA3	SAVE AREA A3 
	EXTRN	DWTDEV	START OF DRIVER DEFINED PART	=3 
* 
	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 
* 
BLKMAX	EQU	140	MAX BLOCK LENGTH	=3
	EJECT
* 
* 
**************************************
*    CONDITIONAL ASSEMBLY            *
**************************************
* 
*    IT IS POSSIBLE TO EXCLUDE ROOMLESS POINT 
*    FUNCTION BY SETTING X:A = 0
* 
X:A	EQU	1 
CROOM	EQU	X:A 
* 
*    ACCEPTANCE OF SPECIAL CHARACTER /13 CAN BE 
*    INCLUDED IN THE DRIVER BY SETTING X:B=1
* 
X:B	EQU	0 
TRETON	EQU	X:B
* 
*    ACCEPTANCE OF SPECIAL CHARACTER /14 CAN BE 
*    INCLUDED IN THE DRIVER BY SETTING X:C=1
* 
X:C	EQU	0 
FJOTON	EQU	X:C
* 
*    ECHO HANDLING IS INCLUDED IF ECHO = 1
* 
X:D	EQU	1	U	=12 
ECHO	EQU	X:D	U	=12
* 
*    IT IS POSSIBLE TO EXCLUDE ECHOING OF 
*    AN EXTRA SPACE AFTER EACH CHARACTER
*   BY SETTING X:E=0
* 
X:E	EQU	0 
COSPAC	EQU	X:E
	EJECT
* 
* 
*    BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE
*    TO SUPPRESS ECHOING OF END OF RECORD CHARACTER.
*    THIS IS ATTAINED BY SETTING THE CONSTANT X:F=0.
* 
X:F	EQU	0 
EORECH	EQU	X:F
* 
*    SUPPRESSING OF SPACES IN RIGHT HAND OF LINE
*    BY SETTING X:G=1 
* 
X:G	EQU	0 
SUPSPA	EQU	X:G
* 
* END OF REQUEST IN SITUATIONS WHERE
* THE SELECTOR UNIT OR PRINTER HARDWARE 
* IS INACTIVE CAN BE CHOSEN BY SETTING
* THE CONSTANT RECEND = 1 
X:H	EQU	0 
RECEND	EQU	X:H
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	1
* 
*   MMU BUFFER SIZE 
* 
X:I	EQU	120		=4 
DVBLEN	EQU	X:I		=4
*				=1 
* SPECIAL CONDITION FOR ABIS PRINTER		=1
ABIS	EQU	0		=1
	EJECT
* 
* 
********************************
*    DWT-DISPLACEMENT          *
********************************
* 
* 
				=3
DWTAP	EQU	/2	HEAD POSITON POINTER	=3
DWTPOC	EQU	/4	POSITON COUNTER	=3
DWTBC	EQU	/5	BYTE COUNTER	=3
* 
**************************************
*    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
* 
* 
* 
	DATA	DVBLEN	MMU BUFFER LENGTH
	DATA	2	DEVICE INDEX
GPAD	EQU	*	ADDRESS BLOCK
	DATA	ACGP	ACTIVATION DRIVER
	DATA	ABGP	ABORT ROUTINE ADDRESS	=8 
	DATA	0	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	*
				=3
	LDR	A3,A7		=1
	RF(Z)	ACGP10	ORDER 0	=2
	LDK	A2,BLKMAX	BLOCK LENGTH	=3
	CF	A5,STABLK	START OF BLOCK	=3 
	RF(NZ)	ERGP1	ERROR	=3
	SUK	A3,5		=1 
	RF(E)	ACGP19	ORDER 5	=3(=1)
	SUK	A3,1		=1 
				=3
	RF(E)	ACGP00	ORDER 6	=3
	CF	A5,ENDBLK	END OF BLOCK	=3 
	ABL	LENDER	I/O REQUEST ERROR	=3
ACGP00	EQU	*		=3
	LD	A3,4,A8	ORDER 6 GET REQ LENGTH	=1 
	RF(Z)	ACGP01		=1 
	LD	A3,2,A8	GET BUFFER ADDRESS	=1 
	LC	A3,1,A3	GET CONTROL CHARACTER	=1
	ANK	A3,/FF		=1 
ACGP01	SUK	A3,/2B		=1 
				=3
	RF(NE)	ACGP02	NOT CONTROL CHAR 2B	=3 
	LDK	A3,2	START BUFFER INDEX	=3 
	RF	ACGP19		=3
ACGP02	EQU	*		=3
	LDK	A2,CR		=1
	CF	A5,OUTPUT		=1 
	RF(NZ)	ERGP1	ERROR	=3
	IFT	ABIS=1		=1 
	LDK	A2,FFED		=1
	CWK	A3,/31-/2B		=1 
	RF(E)	ACGP03	CONTROL CHAR 31	=1
	XIF			=1 
	LDK	A2,LF		=1
	SUK	A3,/30-/2B		=1 
	RF(NE)	ACGP03	NOT CONTROL CHAR 30	=1 
	CF	A5,OUTPUT		=1 
	RF(NZ)	ERGP1	ERROR	=3
	LDK	A2,LF		=1
ACGP03	LDK	A1,1	RESET HEAD POS COUNTR	=1
	ST	A1,DWTAP+DWTDEV,A6		=3(=1)
ACGP06	LDK	A3,2	START BUFFER INDEX	=1 
ACGP09	CF	A5,OUTPUT		=1 
ERGP1	RF(NZ)	ERGP2	ERROR	=3 
	LDK	A2,ETX	DUMMY	=10 
	CF	A5,OUTPUT	WAIT UNTIL PRINTBUFFER EMPTY	=10
	RF(NZ)	ERGP2	ERROR	=10 
	RF	ACGP19		=1
	EJECT			=2 
*				=2 
*   ORDER 00: TEST		=2
*                IMPROVED TEST OF BOTH SUM OFF AND PRINTER NOT THERE  	=2 
*				=2 
ACGP10	EQU	*
	LDK	A2,2	BLOCK LENGTH	=10(=3)
	CF	A5,STABLK	START OF BLOCK	=3 
	RF(NZ)	ERGP2	ERROR	=3
	LDK	A2,2	SEND CHAR /02	=2
	CF	A5,OUTPUT		=2 
	RF(NZ)	ERGP2	ERROR	=3
	LDK	A2,0	SEND CHAR /00=END OF TEST	=2
	CF	A5,OUTPUT		=2 
	RF(NZ)	ERGP2	ERROR	=3
	RF	AGP400		=10(=2) 
	EJECT
* 
*    GET, CHECK AND SEND CHARACTER
*    (IF ORDER 5 NO CHECK)
* 
ACGP17	CF	A5,OUTPUT 
	RF(NZ)	ERGP2	ERROR	=3
ACGP18	IM	DWTPOC+DWTDEV,A6	POSITION COUNTER UPDATING	=3 
ACGP19	EQU	*
	LDKL	A4,/400	INDICATE LINE FEED DONE 
	ORS	A4,DWTDEV,A6		=3 
	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	YES
	LDR	A1,A2
	CWK	A7,5	ORDER 5?	=3 
	RF(E)	ACGP24	BASIC WRITE 
	SUK	A1,9	HARDWARE TABULATION ? 
	RF(NE)	ACGP22
	ST	A4,DWTAP+DWTDEV,A6	RESET HEAD POSITION POINTER	=3 
	RB	ACGP17
ACGP22	SUK	A1,8	TABULATION CHARACTER ?
	RF(E)	ACGP40 
	IFT	ABIS=1		=1 
	CWK	A2,/07	BELL ?	=1 
	RB(E)	ACGP09		=1 
	XIF			=1 
* 
	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	YES,CODE CHECK ERROR
	SUK	A1,/8E	ROOMLESS POINT?  (AE) 
	RF(E)	AGP100 
	ADK	A1,/4F	GREATER THAN /5F
	RB(NP)	ACGP17	NO 
	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	DWTPOC+DWTDEV,A6	RESET POSITION COUNTER	=3
	CM	DWTAP+DWTDEV,A6	RESET HEAD POS.POINTER	=3 
ACGP26	ADK	A1,3 
	RB(NZ)	ACGP17	NOT LINE FEED
	SUK	A1,1 
	ADS	A1,DWTPOC+DWTDEV,A6	DECREMENT POS COUNTER	=3 
	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+DWTDEV,A6	SUBTRACT HEAD POSITION POINTER	=3
	LC	A4,DWTBC+DWTDEV,A6		=3
	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 
ERGP2	RF(NZ)	ERGP	ERROR	=3
	IM	DWTPOC+DWTDEV,A6	INCREMENT BUFFER INDEX	=3
	SUK	A4,1 
	RB(P)	ACGP45 
	LDR	A3,A3	RECOVERY?
	RB(NE)	ACGP20	NO 
	SC	A4,DWTBC+DWTDEV,A6	RESET POSITION POINTER	=3
	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	*
				=3
	CF	A5,ENDBLK	END OF BLOCK	=10
	RF(NZ)	ERGP	ERROR	=10
	LDK	A2,1	BLOCK LENGTH	=10
	CF	A5,STABLK	START OF BLOCK	=10
	RF(NZ)	ERGP	ERROR	=10
AGP410	LDK	A2,ETX	LAST DUMMY
	CF	A5,OUTPUT	SEND
	RF(NZ)	ERGP	ERROR	=6 
	CF	A5,ENDBLK	END OF BLOCK	=6 
	RF(NZ)	ERGP	ERROR	=6 
AGP415	EQU	*		=1
	IFT	ABIS=1		=1 
	ANK	A2,/4	PAPER IN ?	=1
	RF(NZ)	AGP420	YES	=1 
	LDK	A1,/20	SET RETURN CODE	=1
	XIF			=1 
AGP420	EQU	*
	CF	A15,UPDAPP	UPDATE HEAD POSITION COUNTER 
	LDKL	A4,/FBFF		=3
	ANS	A4,DWTDEV,A6	RESET 'LINE FEED CONTROL'	=3
ENDIO	EQU	* 
				=6(=3)
	CF	A15,TENDIO	END I/O
EXIT	ABL	LDISP	GO TO DISPATCHER	=3
AGP430	EQU	*
	LD	A3,DWTA3,A6 
	ST	A3,6,A8	EFF. LENGTH 
	RB	AGP415		=1
	EJECT
* 
* 
*    UPDAPP = SUBROUTINE TO UPDATE HEAD 
*             POSITION POINTER WHEN END 
*             OF REQUEST IS REACHED 
UPDAPP	EQU	*
	LC	A3,DWTBC+DWTDEV,A6	GET POSITION COUNTER	=3
	ADS	A3,DWTAP+DWTDEV,A6	UPDATE HEAD POSITION POINTER	=3 
	LDK	A3,0 
	SC	A3,DWTBC+DWTDEV,A6	RESET POSITION COUNTER	=3
	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
* 
*    E R G P
* 
*    ERROR ROUTINE
* 
* 
ERGP	EQU	*		=3
	LDR	A2,A1	SAVE RETURN CODE	=10 
	ANK	A1,/12	OUTPUT ERROR OR LRC-ERROR ?	=10(=9) 
	RF(NZ)	RCGP	YES, EXECUTE RECOVERY	=9 
	LDR	A7,A7	ORDER 0 ?	=3 
				=6(=3)
	RF(NZ)	ERGP10	NO	=6
	LDK	A1,OPERR	SET RETURN CODE NOT OPERABLE	=6 
	RB	ENDIO	END I/O	=6
* 
ERGP10	EQU	*		=6
	ANK	A2,/08	SOFTWARE TIME-OUT ?	=10 
	RF(NZ)	RCGP	YES,EXECUTE RECOVERY	=10 
				=9(=6)
				=9(=6)
	IFT	RECEND=0		=3 
	RB	EXIT		=3
	XIF			=3 
	IFT	RECEND=1		=3 
	LDK	A1,OPERR	SET RETURN CODE NOT OPERABLE	=6 
	RB	AGP430		=3
	XIF			=3 
	EJECT
* 
*    E C H O G P
* 
*    ECHOGP = DEVICE-DEPENDENT ECHO-ROUTINE 
* 
ECHOGP	EQU	*
	IFT	ECHO=1	U	=12 
	LDK	A4,COSPAC
	LDR	A7,A7	END OF ECHO ?
	RF(N)	ECGP17	YES 
* 
	IFT	EORECH=0 
* 
	SUK	A2,/80	EOR-CHARACTER 
	RF(NN)	ECGP20	YES
	ADK	A2,/80 
* 
	XIF
	IFT	ECHO=1	U	=12 
* 
	LDR	A1,A2
	ANK	A1,/7F 
	SUK	A1,/8
	RF(E)	ECGP40	BACKSPACE 
	SUK	A1,/2	LINE FEED	=1 
	RF(E)	ECGP05	YES	=3(=1)
	SUK	A1,/3	CR	=1
	RF(E)	ECGP05	YES	=3(=1)
	SUK	A1,/B		=1
	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 
ECGP05	EQU	*		=3
	LDR	A3,A2	SAVE CHARACTER	=3
	LDK	A2,COSPAC+1	BLOCK LENGTH	=3
	CF	A5,STABLK	START OF BLOCK	=3 
	RF(NZ)	ECGP20	ERROR	=6 
	LDR	A2,A3	GET CHARACTER	=3 
ECGP10	CF	A5,OUTPUT	SEND CHARACTER
	RF(NZ)	ECGP20	ERROR	=6 
	IM	DWTPOC+DWTDEV,A6	UPDATE POSITION COUNTER	=3 
	SUK	A4,1	READY ? 
	RF(N)	ECGP80	YES	=3
	RF(P)	ECGP60	NO, GO TO CLEAR SECTION 
* 
	IFT	COSPAC=1 
* 
	LDK	A2,SPACE	NO SEND SPACE 
	RB	ECGP10
* 
	XIF
* 
	IFT	ECHO=1	U	=12 
ECGP17	CF	A15,UPDAPP	UPDATE HEAD POSITION POINTER 
	XIF		U	=12 
	CF	A15,TENDIO	SET GP DWT FREE	=5 
ECGP20	ABL	ECHRTN	RETURN TO KEYBOARD
	IFT	ECHO=1	U	=12 
	EJECT
* 
*    BACKSPACE
* 
ECGP40	EQU	*
	LDK	A2,GPBSP	BACKSPACE CHARACTER 
	RB	ECGP05		=3
* 
*    CANCEL 
* 
ECGP50	EQU	*
	LC	A3,DWTBC+DWTDEV,A6	BYTE COUNTER	=3
	ANK	A3,/FF	CLEAN	=3
	ADK	A3,1	ADD FOR CLEAR CHAR.	=10 
	LDR	A2,A3	NUMBER OF BACKSPACE CHARACTERS	=3
	ADK	A2,2	ADD TO BLOCK LENGTH	=3
	CF	A5,STABLK	START OF BLOCK	=3 
	RB(NZ)	ECGP20	ERROR	=6 
	LDK	A2,GPCLR	CLEAR CHARACTER 
	LDK	A4,3 
	RB	ECGP10
ECGP60	LDK	A2,LF	LINE FEED
				=3
ECGP70	CF	A5,OUTPUT	SEND CHAR.
	RB(NZ)	ECGP20	ERROR	=6 
	LDK	A2,/08	BACKSPACE 
	SUK	A3,1 
	RB(NN)	ECGP70
	LDK	A3,0 
	SC	A3,DWTBC+DWTDEV,A6	RESET POSITION COUNTER	=3
ECGP80	EQU	*		=3
	CF	A5,ENDBLK	END OF BLOCK	=3 
	RB	ECGP20
	XIF		U	=12 
	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	*
				=3
				=6
	LDR	A8,A8	BUSY ?	=6
	ABL(Z)	ENDIO	NO	=11(=6)
	LDK	A2,1	BLOCK LENGTH	=10(=3)
	CF	A5,STABLK	START OF BLOCK	=3 
	RB(NZ)	ERGP	ERROR	=3 
	LDK	A2,SOH	RESET PRINT BUFFER CODE 
	CF	A5,OUTPUT	SEND IT 
	RB(NZ)	ERGP	ERROR	=3 
	CF	A5,ENDBLK	END OF BLOCK	=10
	RB(NZ)	ERGP	ERROR	=10
	CWK	A7,5 
	RF(E)	RCGP10 
	CWK	A7,6	ORDER 6?
	RF(E)	RCGP05	YES 
				=10(=6) 
				=10(=6) 
	CWK	A7,0	ORDER 0?
	ABL(E)	ENDIO	U	=7
				=6(=3)
	ABL	EXIT	U	=7
RCGP05	EQU	*
	LC	A2,DWTDEV,A6	GET LEFT BYTE OF STATUS WORD	=3
	ANK	A2,/4	LINE FEED DONE ? 
	ABL(E)	ACGP	NO	=3(=10) 
	LDK	A2,BLKMAX	BLOCK LENGTH	=10 
	CF	A5,STABLK	START OF BLOCK	=10
	RB(NZ)	ERGP	ERROR	=10
	LDK	A2,SPACE 
	CF	A5,OUTPUT	SEND SPACE
	RB(NZ)	ERGP	ERROR	=3 
				=3
	LDK	A2,CR	CARRIAGE RETURN
	LDK	A3,0 
	LD	A4,DWTAP+DWTDEV,A6	GET NUMBER OF SPACES TO SEND	=3
	ABL	ACGP46 
				=6
RCGP10	EQU	*		=6
				=10(=6) 
				=10(=6) 
	LDK	A1,TPERR	SET RETURN CODE	=6
	ABL	AGP430 
* 
* 
*    A B G P
* 
*    ABORT ROUTINE
* 
ABGP	EQU	*	U	=8 
	CF	A15,UPDAPP	UPDATE HEAD POSITION POINTER	=8
	ABL	ENDIO	END I/O AND DISPATCH	=8
* 
	END

Full view