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

⟦9c3287ef7⟧

    Length: 36662 (0x8f36)
    Notes: pts_type(SC)
    Names: »DRTP03.SC«

Derivation

└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
    └─⟦this⟧ »MONGEN/DRTP03.SC« 

PTS(SC)

	IDENT DRTP03 	REL 11.0 81-06-24 870105041100 

			=4,GREEK CHAR. INCL. 
			REL 11.0 81-01-26
			=3,IMPROV. OF ORDER 37 
			REL 11.0 81-01-26
			=2,CORR. FOR ODD ECBADDR.
			REL 11.0 81-01-26
			=1,ABORT PROBLEM 
			PRR 11.0 80-11-19
* 
******************************************************* 
*                                                     * 
*   PHILIPS TERMINAL SYSTEM PTS                       * 
*                                                     * 
*   DRTP03 = DRIVER TELLER TERMINAL PRINTER           * 
*                                                     * 
*                                                     * 
******************************************************* 
* 
*   THIS DRIVER HANDLES TELLER TERMINAL PRINTER PTS 6371
* 
*   AND CONSISTS OF THE FOLLOWING PARTS:
* 
*   A C T P :	  ACTIVATION PART 
* 
*   R C T P :	  RECOVERY ROUTINE
* 
*   THE ACTIVATION PART SELECTS THE ACTUAL ORDER PROCESSOR. 
*   A STRING IS SET UP AND TRANSFERED TO THE PRINTER. 
*   THE STRING BEGINS WITH A DEDICATED PRINTER CHARACTER. 
*   THE CONTENTS OF THE STRING IS EITHER A FIXED FORMATTED
*   BUFFER OR FOR ORDER WRITE THE USER BUFFER.
*   THE STRING IS TERMINATED WITH AN EXECUTION CHARACTER. 
*   AFTER EXECUTION THE PRINTER RESPONDS WITH A STATUS
*   CHARACTER INDICATING THE RESULT OF THE EXECUTED ORDER.
* 
*   THE RECOVERY ROUTINE IS ENTERED AFTER PROGRAM LOADING,
*   AFTER POWER ON FROM TERMINAL SIDE AND AFTER TRANSMISSION
*   TIME OUT. 
*   THE RECOVERY ROUTINE SENDS A FIXED FORMATTED STRING TO
*   THE PRINTER. THIS STRING CONTAINS THE ACTUAL PARAMETERS 
*   AND STATUS FOR THE PRINTER. 
	EJECT
* 
*   THE FOLLOWING ORDERS ARE TREATED: 
* 
*   ORDER 00 :      TEST STATUS 
*   ORDER 06 :      WRITE 
*   ORDER 0B :      POSITION DOCUMENT 
*   ORDER 24 :      SET PRINTER PARAMETERS
*   ORDER 27 :      SET DOCUMENT PARAMETERS 
*   ORDER 37 :      TRANSFER DOCUMENT PARAMETERS
*   ORDER 38 :      RELEASE DOCUMENT
* 
*   THE FOLLOWING RETURN CODES ARE USED:
* 
*   BIT  0 :        REQUEST ERROR 
*   BIT  2 :        END OF JOURNAL
*   BIT 10 :        DOCUMENT OUT
*   BIT 13 :        CODE CHECK ERROR
*   BIT 15 :        NOT OPERABLE
* 
* 
*   NORMAL REGISTER USAGE:
* 
*   REGISTER A1:	WORK REGISTER
*            A2:	INPUT/OUTPUT 
*            A3:	BUFFER POINTER 
*            A4:	OUTPUT COUNTER 
*            A5:	STACK POINTER
*            A6:	DWT-ADDRESS
*            A7:	ORDER
*            A8:	ECB-ADDRESS
* 
* 
	EJECT
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TPAD3	ADDRESS BLOCK
* 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	LDISP	DISPATCHING FROM INTERRUPT 
	EXTRN	LENDER	DISPATCH I/O ERROR
	EXTRN	LENDIS	END I/O AND DISPATCH
	EXTRN	OUTPUT	OUTPUT ONE CHARACTER
	EXTRN	GETCHR	GET CHARACTER FROM ECB BUFFER 
	EXTRN	DWTST	DWT STATUS DISPLACEMENT
	EXTRN	DWTECB	DWT ECB DISPLACEMENT
	EXTRN	DWTOR	DWT ORDER DISPLACEMENT 
	EXTRN	DWTSB2	STACK BASE
	EXTRN	DWTDEV	DEVICE STATUS 
	EXTRN	DTTP03	DOCUMENT TABLE ADDRESS
	EXTRN	TLTP03	DOCUMENT TABLE LENGTH 
	EXTRN	INPUT	GET STATUS INPUT CHAR
	EXTRN	STABLK	DEF. START OF BLOCK 
	EXTRN	ENDBLK	DEF. END OF BLOCK 
	EJECT
* 
************* 
* CONSTANTS * 
************* 
* 
*	DEDICATED PRINTER CHARACTERS (/00-/0F)
* 
POTEST	EQU	/00	TEST 
PORECV	EQU	/01	RECOVERY 
RESTRT	EQU	/02	RESTART (NOT USED) 
ETX	EQU	/03	EXECUTE ORDER 
POPPAR	EQU	/04	SET PRINTER PARAMETERS 
PODSTA	EQU	/05	DIAGNOSTIC STATUS
EXE	EQU	/06	EXECUTE (NOT USED)
POTDOC	EQU	/07	TRANSFER DOCUMENT PARAMETERS 
PORDOC	EQU	/08	RELEASE DOCUMENT 
POWDOC	EQU	/09	WRITE DOCUMENT 
LF	EQU	/0A	LINE FEED (NOT USED) 
POPDOC	EQU	/0B	POSITION DOCUMENT
RESET	EQU	/0C	RESET ORDER 
POWJRL	EQU	/0D	WRITE JOURNAL
SPEC	EQU	/0E	ROOMLESS POINT 
TEST	EQU	/0F	TEST (NOT USED)
* 
ENDJ	EQU	/2000	END OF JOURNAL STATUS
DOCOUT	EQU	/20	DOCUMENT OUT STATUS
	EJECT
* 
************************
* CONDITIONAL ASSEMBLY *
************************
* 
*	THE STANDARD NATIONAL CHARACTER SET IS CHOSEN 
*	BY SETTING X:A TO 0-10 ACCORDING TO THE LIST BELOW
* 
*  NCV =	0	GREAT BRITAIN
*	1	GERMANY 
*	2	FRANCE 1
*	3	SPAIN 
*	4	ITALY 
*	5	SWEDEN, FINLAND 
*	6	DENMARK, NORWAY 1 
*	7	PORTUGAL
*	8	YUGOSLAVIA OR FRANCE 2 (DEPENDING ON CHAR GEN)
*	9  	USA 
*	10	DENMARK, NORWAY 2
* 
X:A	EQU	0 
STDNCV	EQU	01 
* 
*	THE CHARACTER FONT CAN BE SELECTED
*	BY SETTING X:B TO : 0=UPPER CASE/SMALL NUMERIC, 1=LOWER CASE/SMALL NUMERIC
*	                    2=UPPER CASE/WIDER NUMERIC, 3=LOWER CASE/WIDER NUMERIC
* 
X:B	EQU	0 
FONT	EQU	0
* 
*	THE STANDARD CHARACTER PITCH FOR THE DOCUMENT STATION IS CHOSEN 
*	BY SETTING X:C TO : 0=15 CH/INCH, 1=12 CH/INCH OR 2=10 CH/INCH
* 
X:C	EQU	2 
STDCPD	EQU	0
* 
*	THE JOURNAL STATION CAN BE EXCLUDED 
*	BY SETTING X:D=0
* 
X:D	EQU	1 
JOURNL	EQU	1
* 
*	THE STANDARD CHARACTER PITCH FOR THE JOURNAL STATION IS CHOSEN
*	BY SETTING X:F TO : 0=15 CH/INCH, 1=12 CH/INCH OR 2=10 CH/INCH
* 
X:E	EQU	0 
STDCPJ	EQU	0
* 
*	THE "SET PARAMETER" ORDERS 24 AND 27 CAN BE INCLUDED
*	BY SETTING X:F=1
* 
X:F	EQU	0 
PARORD	EQU	1
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	1
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	0
* 
*   MMU BUFFER SIZE 
* 
X:G	EQU	126 
DVBLEN	EQU	250
* 
*	A REQUEST IS ALLWAYS ENDED FOR NOT OPERABLE PRINTERS
*	BY SETTING X:H=1
X:H	EQU	0 
REQEND	EQU	1
* 
*	THE CHARACTERS /B0-/B9 WILL BE CONVERTED TO /1B,/41-/1B,/4A 
*	BY SETTING X:I=1. GREEK ADDITIONAL CHARACTERS.
* 
X:I	EQU	0	*	=4
GREEK	EQU	X:I	*	=4
* 
* 
* 
* 
PRIPAR	FORM	1=1,1=0,2=FONT,4=STDNCV,2=1,2=STDCPJ,2=1,2=STDCPD 
	EJECT
* 

********************* 
* DWT-DISPLACEMENTS * 
********************* 
* 
* 
* 
PP	EQU	/2	PRINTER PARAMETERS
PPJ	EQU	/4	PRINT POS JOURNAL
APJ	EQU	PPJ+1	ACTUAL PRINT POS JOURNAL
RPJ	EQU	PPJ	REQUESTED PRINT POS JOURNAL 
PPD	EQU	/6	PRINT POS DOCUMENT 
APD	EQU	PPD+1	ACTUAL PRINT POS DOCUMENT 
RPD	EQU	PPD	REQUESTED PRINT POS DOCUMENT
LN	EQU	/8	LINE NUMBER ON DOCUMENT 
ALN	EQU	LN+1	ACTUAL LINE NUMBER ON DOCUMENT 
RLN	EQU	LN	REQUESTED LINE NUMBER ON DOCUMENT
DP	EQU	/A	DOCUMENT PARAMETERS 
* 
* 
********************* 
* ECB-DISPLACEMENTS * 
********************* 
* 
ECBBA	EQU	2	BUFFER ADDRESS IN ECB 
ECBRL	EQU	4	REQUESTED LENGTH IN ECB 
ECBEL	EQU	6	EFFECTIVE LENGTH IN ECB 
ECBRC	EQU	8	RETURN CODE IN ECB
ECBCW	EQU	10	CONTROL WORD IN ECB
	EJECT
* 
**********
* TABLES *
**********
* 
* 
*	ADDRESS BLOCK 
* 
	DATA	DVBLEN	MMU BUFFER SIZE
	DATA	2	DEVICE INDEX
TPAD3	EQU	*	ADDRESS BLOCK 
	DATA	ACTP	ACTIVATION DRIVER
	DATA	0	ABORT ROUTINE ADDRESS 
	DATA	0	INTERRUPT HANDLER 
	DATA	RCTP	RECOVERY ROUTINE 
* 
*	VALID ORDERS WITH ACTIVATION ADDRESSES
* 
TPTAB	EQU	* 
	DATA	TPTAB0	DEVICE INDEX 0 TABLE 
	DATA	TPTAB1	DEVICE INDEX 1 TABLE 
	DATA	TPTAB2	DEVICE INDEX 2 TABLE 
	DATA	TPTAB3	DEVICE INDEX 3 TABLE 
* 
TPTAB0	EQU	*	DEVICE INDEX 0 
	IFT	JOURNL=1 
	DATA	0	TEST STATUS (JOURNAL) 
	DATA	TSTSTA
	DATA	6	WRITE JOURNAL 
	DATA	WRTJRL
	IFT	PARORD=1 
	DATA	/24	SET PRINTER PARAMETERS
	DATA	PRTPAR
	XIF
	DATA	/FFFF	END OF ORDERS 
* 
TPTAB1	EQU	*	DEVICE INDEX 1 
	DATA	0	TEST STATUS (DOCUMENT)
	DATA	TSTSTA
	DATA	6	WRITE DOCUMENT
	DATA	WRTDOC
	DATA	/0B	POSITION DOCUMENT 
	DATA	POSDOC
	DATA	/38	RELEASE DOCUMENT
	DATA	RELDOC
	DATA	/37	TRANSFER DOCUMENT PARAMETERS
	DATA	TRFDOC
	IFT	PARORD=1 
	DATA	/24	SET PRINTER PARAMETERS
	DATA	PRTPAR
	DATA	/27	SET DOCUMENT PARAMETERS 
	DATA	DOCPAR
	XIF
	DATA	/FFFF	END OF ORDERS 
* 
TPTAB2	EQU	*	DEVICE INDEX 2 
	DATA	/FFFF	END OF ORDERS 
* 
TPTAB3	EQU	*	DEVICE INDEX 3 
	DATA	/FFFF	END OF ORDERS 
* 
*	SYSTEM STANDARD PRINTER PARAMETERS
* 
STDPP	PRIPAR		STANDARD PRINTER PARAMETERS 
	EJECT
* 
* 
*   A C T P 
* 
*   THIS IS THE ACTIVATION PART OF THE DRIVER 
*   CHECKS VALIDITY OF ORDERS AND JUMPS TO ORDER PROCESSOR
* 
* 
* 
ACTP	EQU	*	ACTIVATION ENTRY 
* 
* 
*   GET DWT INDEX: 0=JOURNAL, 1=DOCUMENT
* 
	LC	A2,DWTOR,A6	GET DWT INDEX 
	ANK	A2,3	MASK
	SLL	A2,6	SHIFT 
	LD	A3,DWTDEV,A6	GET OLD DEVICE INDEX 
	ANKL	A3,/FF1F	RESET OLD INDEX AND LF IND 
	ORR	A3,A2
	ST	A3,DWTDEV,A6	STORE NEW INDEX
ACT005	LD	A1,DWTDEV,A6	GET DEVICE INDEX 
	ANK	A1,/C0 
	SRL	A1,5	GET CORESPONDING ORDER TABLE
	LD	A2,TPTAB,A1 
ACT010	LDR*	A3,A2 
	ABL(N)	LENDER	NO MORE VALID ORDERS 
	SUR	A3,A7	TEST IF ORDER VALID
	RF(E)	ACT020	VALID ORDER FOUND 
	ADK	A2,4	TRY NEXT ORDER
	RB	ACT010
ACT020	EQU	*
	ABI	2,A2	EXECUTE ORDER 
	EJECT
* 
* 
*   ORDER 00 : TEST STATUS
* 
* 
TSTSTA	EQU	*
	CM	ECBCW,A8	CLEAR CONTROL WORD 
	LDK	A2,3	BLOCK LENGTH
	LDK	A3,POTEST	LOAD TEST ORDER
	CF	A5,ORDER	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=1 
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/15	TEST PRINTER STATUS 
	RF(Z)	TSST10	NO PERMANENT ERRORS 
TSST05	EQU	*
	LDK	A2,3	BLOCK LENGTH
	LDK	A3,PODSTA	LOAD DIAGNOSTIC ORDER
	CF	A5,ORDER	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	SC	A2,ECBCW+1,A8	SET UP DIAGN STATUS IN ECB
	LDK	A1,1	INDICATE NOT OPERABLE 
	RF	TSST80
TSST10	LDR	A1,A2	GET PRINTER STATUS 
	IFT	JOURNL=1 
	LD	A3,DWTDEV,A6	GET DEVICE INDEX 
	ANK	A3,/C0	TEST DEVICE INDEX 
	RF(NZ)	TSST40	DEVICE INDEX > 0 
	ANK	A1,/22	TEST PRINTER STATUS 
	RF(Z)	TSST80	NO ERRORS 
	ANK	A1,2	TEST PRINTER STATUS 
	RB(NZ)	TSST05	JOURNAL ERROR = NOT OP 
	LDKL	A1,ENDJ	END OF JOURNAL
	RF	TSST80
	XIF	 
TSST40	ANK	A1,/40	TEST PRINTER STATUS 
	RF(Z)	TSST80	NO ERRORS 
	LDK	A1,DOCOUT	DOCUMENT OUT 
TSST80	ABL	LENDIS	END REQUEST 
	EJECT		
* 
* 
*   ORDER 06 : WRITE JOURNAL
* 
* 
	IFT	JOURNL=1 
WRTJRL	EQU	*
	LD	A1,DWTDEV,A6	GET STATUS 
	ANK	A1,/20	TEST LF INDICATOR 
	RF(NZ)	WRJL10	LF EXECUTED
	LD	A1,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A1,2	TEST REQUESTED LENGTH 
	RF(N)	WRJL80	REQUEST ERROR 
	LD	A2,ECBBA,A8	GET CONTROL CHARACTER	=2
	LC	A2,1,A2	*	=2
	ANK	A2,/FF 
	SUK	A2,/2B	TEST CTRL CHAR
	RF(Z)	WRJL10	CTRL CHAR =/2B
	LDK	A4,2	SET UP 2 LF (CTRL CH =/30)
	SUK	A2,5	TEST CTRL CHAR
	RF(Z)	WRJL05	CTRL CHAR =/30
	LDK	A4,1	SET UP 1 LF (CTRL CH NOT DEF) 
	SUK	A2,1	TEST CTRL CHAR
	RF(NZ)	WRJL05	CTRL CHAR NOT =/31 
	LDK	A4,3	SET UP 3 LF (CTRL CH =/31)
WRJL05	EQU	*
	LDK	A2,4	BLOCK LENGTH
	LDK	A3,POWJRL	LOAD WRITE JOURNAL ORDER 
	CF	A5,ORDER	AND SEND 
	LDR	A2,A4	RELOAD NO OF LINE FEED 
	CF	A5,OUT	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=1 
	ANK	A2,7	TEST PRINTER STATUS 
	RF(NZ)	WRJL65	JOURNAL LINE FEED ERROR
	CM	DWTDEV+PPJ,A6	CLEAR PRINT POSITION
	LDK	A1,/20	SET UP LF EXECUTED
	ORS	A1,DWTDEV,A6	IND IN STATUS 
WRJL10	EQU	*
	LD	A2,ECBRL,A8 
	ADK	A2,2	BLOCK LENGTH
	LC	A1,DWTDEV+APJ,A6	GET ACTUAL PRINT POS 
	SC	A1,DWTDEV+RPJ,A6	SET UP START REQ PRINT POS 
	LDK	A3,2	SET UP BUFFER POINTER 
	CF	A15,GETCHR	GET CHARACTER FROM ECB BUFFER
	LDR	A1,A1	TEST IF NO BUFFER
	RF(Z)	WRJL60	NO BUFFER TO PRINT
	LDK	A3,POWJRL	LOAD WRITE JOURNAL ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A2,0	LOAD ZERO LINE FEED 
	CF	A5,OUT	AND SEND 
	LDKL	A4,/100	SET UP NORMAL CHAR COUNTER IN A4
	LDK	A3,2	SET UP BUFFER POINTER 
WRJL20	CF	A15,GETCHR	GET CHARACTER FROM ECB BUFFER
	LDR	A1,A1
	RF(Z)	WRJL50	BUFFER FINISHED 
	LDR	A1,A2	GET CHAR IN A1 
* 
*   EXAMINE CHAR AND UPDATE PRINT POS AND SEND
*   DEPENDING ON TYPE OF CHARACTER
* 
	SUK	A1,/10 
	RB(N)	WRJL20	CHAR </10 
	RF(Z)	WRJL30	CHAR = /10
	SUK	A1,9 
	RF(NZ)	WRJL25	CHAR NOT /19 (=EXPAND) 
	XRKL	A4,/300	SWITCH CHAR COUNTER IN A4 
	RF	WRJL40	SEND EXPAND CHAR 
WRJL25	SUK	A1,7 
	RF(N)	WRJL40	CHAR </20 SEND
	SUK	A1,/5F 
	RB(Z)	WRJL20	CHAR=/7F
	RF(N)	WRJL30	CHAR = NORMAL 
	SUK	A1,/2F 
	RF(Z)	WRJL28	CHAR =/AE 
	IFT	GREEK=1	*	=4 
	CF	A5,GRECON	CONVERSION FOR GREEK CHARACTERS	=4
	LDR	A1,A1	*	=4 
	RF(Z)	WRJL30	SUCCESSFUL CONVERSION	=4
	XIF		*	=4
	IFT	JOURNL=1	*	=4
	LDK	A1,4	IND CODE CHECK ERROR
	ORS	A1,ECBRC,A8	IN RETURN CODE 
	RB	WRJL20
WRJL28	LDK	A2,/0E 
	RF	WRJL40

*   UPDATE PRINT POSITION 

WRJL30	ADS	A4,DWTDEV+RPJ,A6	ADD 1 OR 2 TO REQ PRINT POS 

*   SEND CHARACTER TO DEVICE

WRJL40	CF	A5,OUTPUT	SEND CHARACTER
	ABL(NZ)	ERTP	JMP IF ERROR
	RB	WRJL20	GET NEXT CHARACTER 

*   SEND ETX

WRJL50	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=1 
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/27	TEST PRINTER STATUS 
	RF(Z)	WRJL60	NO ERRORS 
	ANK	A1,3	TEST PRINTER STATUS 
	RF(NZ)	WRJL65	NOT OPERABLE 
	ANK	A2,4	TEST PRINTER STATUS 
	RF(NZ)	WRJL80	REQUEST ERROR
	LDKL	A1,ENDJ	END OF JOURNAL
WRJL60	LC	A3,DWTDEV+RPJ,A6	GET REQUESTED PRINT POSITION 
	SC	A3,DWTDEV+APJ,A6	SET UP ACTUAL PRINT POSITION 
	RF	WRJL70
WRJL65	LDK	A1,1	INDICATE NOT OPERABLE 
WRJL70	ABL	LENDIS	END REQUEST 
WRJL80	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	XIF		
	EJECT		
* 
* 
*   ORDER 06 : WRITE DOCUMENT 
* 
* 
WRTDOC	EQU	*
	LC	A4,DWTDEV+ALN,A6	GET ACTUAL LINE
	ANK	A4,/FF 
	LD	A1,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A1,2	TEST REQUESTED LENGTH 
	RF(N)	WRDO80	REQUEST ERROR 
	LD	A2,ECBBA,A8	GET CONTROL CHARACTER	=2
	LC	A2,1,A2	*	=2
	ANK	A2,/FF 
	LC	A3,DWTDEV+APD,A6	PREPARE NEW REQ PRINT POS
	SUK	A2,/2B 
	RF(Z)	WRDO07	CTRL CHAR = /2B 
	LDK	A3,0	PREPARE NEW REQ PRINT POS 
	ADK	A4,2	SET REQ LINE = ACT LINE + 2 
	SUK	A2,5 
	RF(Z)	WRDO05	CTRL CHAR = /30 
	SUK	A4,1	SET REQ LINE = ACT LINE + 1 
	SUK	A2,1 
	RF(NZ)	WRDO05	CTRL CHAR NOT = /31
	LDK	A4,1	SET REQ LINE = 1
WRDO05	LD	A1,DWTDEV+DP,A6	GET NUMBER OF LINES	=3
	CC	A4,2,A1	*	=3
	RF(G)	WRDO80	REQ LINE > MAX LINES
WRDO07	SC	A3,DWTDEV+RPD,A6	SET UP START REQ PRINT POS 
	SC	A4,DWTDEV+RLN,A6	SET UP REQ LINE NO 
	LDR	A4,A4
	RF(Z)	WRDO80	REQ LINE=ZERO 
WRDO10	EQU	*
	LD	A2,ECBRL,A8 
	ADK	A2,2	BLOCK LENGTH
	LDK	A3,POWDOC	SET UP PRINTER ORDER 
	CF	A5,ORDER	AND SEND 
	LDR	A2,A4	GET REQ LINE NO
	CF	A5,OUT	AND SEND 
	LDKL	A4,/100	SET UP NORMAL CHARACTER COUNT 
	LDK	A3,2	SET UP BUFFER POINTER 
WRDO20	CF	A15,GETCHR	GET CHARACTER FROM ECB BUFFER
	LDR	A1,A1
	RF(Z)	WRDO50	BUFFER FINISHED 
	LDR	A1,A2	GET CHARACTER

*   EXAMINE CHARACTER AND UPDATE PRINT POS AND SEND 
*   DEPENDING ON TYPE OF CHARACTER

	SUK	A1,/10 
	RB(N)	WRDO20	CHAR < /10
	RF(Z)	WRDO30	CHAR = /10 SEND 
WRDO22	SUK	A1,9 
	RF(NZ)	WRDO27	CHAR NOT /19 (=EXPAND) 
	XRKL	A4,/300	SWITCH CHAR COUNTER IN A4 
	RF	WRDO40	SEND EXPAND CHAR 
WRDO27	SUK	A1,7 
	RF(N)	WRDO40	CHAR < /20 SEND 
	SUK	A1,/5F 
	RF(N)	WRDO30	CHAR = NORMAL 
	RB(Z)	WRDO20	CHAR = /7F
	SUK	A1,/2F 
	RF(Z)	WRDO28	CHAR = /AE
	IFT	GREEK=1	*	=4 
	CF	A5,GRECON	CONVERSION FOR GREEK CHARACTERS	=4
	LDR	A1,A1	*	=4 
	RF(Z)	WRDO30	SUCCESSFUL CONVERSION	=4
	XIF		*	=4
	LDK	A1,4	INDICATE CODE CHECK ERROR 
	ORS	A1,ECBRC,A8	IN RETURN CODE 
	RB	WRDO20
WRDO28	LDK	A2,SPEC	SET UP CHAR /0E
	RF	WRDO40

*   UPDATE PRINT POS

WRDO30	ADS	A4,DWTDEV+RPD,A6	ADD 1 OR 2 TO REQ PRINT POS 

*   SEND CHARACTER TO PRINTER 

WRDO40	CF	A5,OUTPUT	SEND CHARACTER
	ABL(NZ)	ERTP	JMP IF ERROR
	RB	WRDO20	GET NEXT CHAR

*   SEND ETX

WRDO50	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=1 
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/45	TEST PRINTER STATUS 
	RF(Z)	WRDO60	NO ERRORS 
	ANK	A1,1	TEST PRINTER STATUS 
	RF(NZ)	WRDO70	NOT OPERABLE 
	ANK	A2,4	TEST PRINTER STATUS 
	RF(NZ)	WRDO80	REQUEST ERROR
	LC*	A1,DWTDEV+DP,A6	DOCUMENT OUT	=3
	ANK	A1,/78	TEST DOC PAR (TIME OUT) 
	RB(NZ)	WRTDOC	NO TIME OUT USED,REPEAT ORDER
	LDK	A1,DOCOUT	DOCUMENT OUT 
	LDK	A3,0	RESET LINE COUNTER
	LDK	A4,0	RESET PRINT POSITION COUNTER
	RF	WRDO65
WRDO60	LC	A3,DWTDEV+RLN,A6	GET REQUESTED LINE NUMBER
	LC	A4,DWTDEV+RPD,A6	GET REQUESTED PRINT POSITION 
WRDO65	SC	A3,DWTDEV+ALN,A6	SET UP ACTUAL LINE NUMBER
	SC	A4,DWTDEV+APD,A6	SET UP ACTUAL PRINT POSITION 
	ANK	A3,/FF 
	ST	A3,ECBCW,A8	SET UP ACTUAL LINE IN CONTROL WORD
WRDO70	ABL	LENDIS	END REQUEST 
WRDO80	LC	A3,DWTDEV+APD,A6	GET ACTUAL LINE NUMBER 
	ANK	A3,/FF 
	ST	A3,ECBCW,A8	SET UP ACTUAL LINE IN CONTROL WORD
	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	EJECT
* 
* 
*   ORDER 0B : POSITION DOCUMENT
*   CONTROL WORD CONTAINS REQUESTED LINE NO 
* 
* 
POSDOC	EQU	*
	LD	A4,ECBCW,A8	GET REQ LINE NO 
	RF(Z)	PDOC80	REQ LINE = 0
	LD	A1,DWTDEV+DP,A6	GET NUMBER OF LINES	=3
	CC	A4,2,A1	*	=3
	RF(G)	PDOC80	REQ LINE > MAX LINE 
	SC	A4,DWTDEV+RLN,A6	SET UP REQ LINE NO 
	LDK	A2,4	BLOCK LENGTH
	LDK	A3,POPDOC	SET UP PRINTER POSITION DOCUMENT ORDER 
	CF	A5,ORDER	AND SEND 
	LDR	A2,A4	SET UP LINE NO 
	CF	A5,OUT	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/45	TEST PRINTER STATUS 
	RF(Z)	PDOC10	NO ERRORS 
	ANK	A1,1	TEST PRINTER STATUS 
	RF(NZ)	PDOC70	NOT OPERABLE 
	ANK	A2,4	TEST PRINTER STATUS 
	RF(NZ)	PDOC80	REQUEST ERROR
	LC*	A1,DWTDEV+DP,A6	DOCUMENT OUT	=3
	ANK	A1,/78	TEST DOC PAR (TIME OUT) 
	RB(Z)	POSDOC	NO TIME OUT USED, REPEAT ORDER
	LDK	A1,DOCOUT	INDICATE DOCUMENT OUT
	LDK	A4,0	RESET LINE COUNTER
PDOC10	SC	A4,DWTDEV+ALN,A6  PDATE OF LINE COUNTER 
	CM	DWTDEV+PPD,A6	RESET PRINT POSITION COUNTER
PDOC70	ABL	LENDIS	END REQUEST 
PDOC80	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	EJECT
*	CONVERSION ROUTINE FOR GREEK CHARACTERS 
*	CHARACTER CODES /B0-/BP IN REG A2 WILL BE CONVERTED 
*	TO /41-/4A. THE SPECIAL CHARACTER /1B WILL
*	BE SENT TO THE PRINTER BEFORE RETURN FROM 
*	THIS ROUTINE. REG A1 WILL BE SET TO ZERO IF SUCCESSFUL. 
	IFT	GREEK=1	*	=4 
GRECON	EQU	*	*	=4 
	SUK	A1,2	*	=4
	RF(N)	GRCO80	CHAR < /B0	=4 
	SUK	A1,/A	*	=4 
	RF(P)	GRCO80	CHAR > /B9	=4 
	ANK	A2,/FF	*	=4
	ORR	A4,A2	SAVE CHAR TEMP	=4
	LDK	A2,/1B	SET UP SPECIAL CHAR	=4
	CF	A5,OUTPUT	SEND CHARACTER	=4 
	LDR	A2,A4	RESTORE CHAR	=4
	ANK	A2,/FF	*	=4
	SUK	A2,/6F	CONVERT CHAR (/B0 = /41 ETC.)	=4
	ANKL	A4,/FF00	CLEAR USED BITS	=4 
	LDK	A1,0	INDICATE SUCCESSFUL CONVERSION	=4 
GRCO80	RTN	A5	*	=4
	XIF		*	=4
	EJECT		
* 
* 
*   ORDER 37 : TRANSFER DOCUMENT PARAMETERS 
*   CONTROL WORD CONTAINS DOCUMENT TABLE NUMBER 
* 
* 
TRFDOC	EQU	*
	LD	A1,ECBCW,A8 
	ADK	A1,1 
	LDR	A4,A1
	SLL	A4,3 
	ADR	A4,A1
	ADR	A4,A1
	CWK	A4,TLTP03
	RF(G)	ODOC80	REQ DOC TABLE NOT DEFINED 
	ADKL	A4,DTTP03-10	ADJUST DOCTAB POINTER	=3 
	LC	A1,DWTDEV+ALN,A6	GET ACTUAL LINE
	ANK	A1,/FF	TEST LINE NUMBER
	RF(Z)	ODOC20	DOCUMENT NOT YET POS (OK) 
	LCR	A1,A4	GET DOCUMENT TYPE	=3 
	ANK	A1,4 
	RF(Z)	ODOC80	REQUEST ERROR FOR DOC TYPE 0-3
ODOC20	EQU	*
	ST	A4,DWTDEV+DP,A6	SAVE DOC PAR ADDR	=3
	LDK	A2,/13	BLOCK LENGTH
	LDK	A3,POTDOC	LOAD TRANSFER DOC PAR ORDER
	CF	A5,ORDER	AND SEND 
	LDK	A3,10	SET UP TABLE LENGTH	=3 
ODOC30	LCR	A2,A4	GET DOC PARAMETER	=3 
	CF	A5,OUT	SEND PARAMETER	=3
	ADK	A4,1	INC TABLE POINTER	=3
	SUK	A3,1	DEC PARAMETER COUNTER	=3
	RB(NE)	ODOC30	WHOLE TABLE NOT SENT 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=1 
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,1	TEST PRINTER STATUS 
ODOC70	ABL	LENDIS	END REQUEST 
ODOC80	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	EJECT		
* 
* 
*   ORDER 24 : SET PRINTER PARAMETERS 
*   CONTROL WORD CONTAINS:
*   BIT 0     : INDICATE CHANGE OF CH FONT AND NCV
*   BIT 01-03 : CHARACTER FONT
*   BIT 04-07 : NATIONAL CHARACTER VARIATION
*   BIT 08-11 : CHARACTER PITCH FOR JOURNAL STATION 
*   BIT 12-15 : CHARACTER PITCH FOR DOCUMENT STATION
* 
* 
	IFT	PARORD=1 
PRTPAR	EQU	*
	LDK	A2,0 
	LD	A4,DWTDEV+PP,A6	GET OLD DWT VALUE 
	ABL(NN)	LDISP	WAIT FOR INITIAL RECOVERY	=1 
	LD	A1,ECBCW,A8	GET CONTROL WORD
	RF(NN)	PPAR10	NO NEW L/NCV SET UP IN CTRL WORD 
	ECR	A2,A1
	ANK	A2,/FF 
	SC	A2,DWTDEV+PP,A6	STORE NEW L/NCV IN DWT
PPAR10	LDK	A2,0 
	LDR	A3,A1
	ANK	A3,/F0	GET CTRL WORD 
	RF(NZ)	PPAR15	NEW CPJ SET UP IN CTRL WORD
	LDR	A3,A4
	ANK	A3,/F0 
PPAR15	EQU	*
	ORR	A2,A3	STORE NEW CPJ IN A2
	XRR	A3,A4
	ANK	A3,/F0	NEW AND OLD CPJ EQUAL ? 
	RF(Z)	PPAR22	YES 
	CM	DWTDEV+PPJ,A6	NO, RESET PRINT POS FOR JOURNAL 
PPAR22	EQU	*
	LDR	A3,A1
	ANK	A3,/F	GET CTRL WORD
	RF(NZ)	PPAR25	NEW CPD SET UP IN CTRL WORD
	LDR	A3,A4
	ANK	A3,/F	GET CPD FROM DWT 
		
PPAR25	EQU	*
	ORR	A2,A3	STORE NEW CPD IN A2
	XRR	A3,A4
	ANK	A3,/F	NEW AND OLD CPD EQUAL ?
	RF(Z)	PPAR32	YES 
	CM	DWTDEV+PPD,A6	NO, RESET PRINT POS FOR DOC 
PPAR32	EQU	*
	SC	A2,DWTDEV+PP+1,A6	STORE NEW PARAMETERS IN DWT 
	LDK	A2,5	BLOCK LENGTH
	LDK	A3,POPPAR	LOAD PRINTER PRINTER PARAMETER ORDER 
	CF	A5,ORDER	AND SEND 
	LC	A2,DWTDEV+PP,A6 
	CF	A5,OUT	SEND L/NCV 
	LC	A2,DWTDEV+PP+1,A6 
	CF	A5,OUT	SEND CPJ/CPD 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=1 
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,1	TEST PRINTER STATUS 
PPAR70	ABL	LENDIS	END REQUEST 
	XIF
	EJECT		
* 
* 
*   ORDER 27 : SET DOCUMENT PARAMETERS
*   CONTROL WORD CONTAINS TABLE NO OF GIVEN PARAMETERS
* 
* 
	IFT	PARORD=1 
DOCPAR	EQU	*
	LD	A1,ECBCW,A8	GET CONTROL WORD
	ADK	A1,1 
	LDR	A4,A1
	SLL	A4,3 
	ADR	A4,A1
	ADR	A4,A1
	CWK	A4,TLTP03
	RF(G)	DPAR80	DEFINED TABLE TOO SMALL 
	SUK	A4,10	ADJUST DOCTAB POINTER
	LD	A3,ECBBA,A8	GET BUFFER ADDRESS
	CF	A5,BYTE1	GET DOC TYPE 
	SUK	A1,7 
	RF(P)	DPAR80	ILLEGAL VALUE 
	SC	A2,DTTP03,A4
	CF	A5,BYTE1	GET TIME OUT VALUE 
	SLL	A2,11
	ORS	A2,DTTP03,A4 
	CF	A5,DOC	GET LINE SPACING 
	SUK	A2,15
	RF(P)	DPAR80	TOO LARGE 
	CF	A5,DOC	GET NO OF LINES
	SUK	A2,0 
	RF(Z)	DPAR80	NO LINES
	CF	A5,DOC	GET BOTTOM LINES 
	SUK	A2,14
	RF(N)	DPAR80	TOO SMALL 
	CF	A5,DOC	GET MARGIN 
	SUK	A2,0 
	RF(Z)	DPAR80	TOO SMALL 
	SUK	A2,80
	RF(P)	DPAR80	TOO LARGE 
	ADK	A4,1 
	CF	A5,BYTE1	GET MARGIN FINE
	SUK	A1,0 
	RF(Z)	DPAR80	TOO SMALL 
	SUK	A1,7 
	RF(P)	DPAR80	TOO LARGE 
	SC	A2,DTTP03,A4
	CF	A5,BYTE1	GET LEFT MARGIN
	SUK	A1,1 
	RF(P)	DPAR80	ILLEGAL VALUE 
	SLL	A2,3 
	ORS	A2,DTTP03,A4 
	CF	A5,BYTE1	GET CRITICAL MARGIN
	SUK	A1,1 
	RF(P)	DPAR80	ILLEGAL VALUE 
	SLL	A2,5 
	ORS	A2,DTTP03,A4 
	CF	A5,BYTE1	GET HIGH PRINT PRESSURE
	SUK	A1,1 
	RF(P)	DPAR80	ILLEGAL VALUE 
	SLL	A2,6 
	ORS	A2,DTTP03,A4 
	LC*	A1,ECBBA,A8	GET DOC TYPE 
	ANK	A1,/B
	RF(Z)	DPAR60	DOC TYPE = 0
	CF	A5,DOC	GET UPPER EDGE 
	SUK	A2,15
	RF(N)	DPAR80	TOO SMALL 
	SUK	A2,67
	RF(P)	DPAR80	TOO LARGE 
	CF	A5,DOC	GET BOTTOM EDGE
	SUK	A2,0 
	RF(Z)	DPAR30	OK
	SUK	A2,24
	RF(N)	DPAR80	TOO SMALL 
DPAR30	LC*	A1,ECBBA,A8	GET DOC TYPE 
	ANK	A1,/B
	SUK	A1,2 
	RF(N)	DPAR70	DOC TYPE = 1
	RF(P)	DPAR40	DOC TYPE = 3
	CF	A5,DOC	GET DOCUMENT WIDTH 
	SUK	A2,40
	RF(N)	DPAR80	TOO SMALL 
	SUK	A2,57
	RF(P)	DPAR80	TOO SMALL 
	RF	DPAR50
DPAR40	CF	A5,DOC	GET UPPER LINES
	SUK	A2,0 
	RF(Z)	DPAR80	TOO SMALL 
	SUK	A2,40
	RF(P)	DPAR80	TOO LARGE 
DPAR50	CF	A5,DOC	GET CENTER WIDTH 
	RF	DPAR75	OK 
DPAR60	LDK	A2,0	DT=0 SET 4 LAST PARAMETERS=0
	ADK	A4,1 
	ST	A2,DTTP03,A4
	ADK	A4,1 
DPAR70	LDK	A2,0	DT=1 SET 2 LAST PARAMETERS=0
	ADK	A4,1 
	ST	A2,DTTP03,A4
DPAR75	LDK	A1,0	IND STATUS OK FOR RETURN CODE 
	ABL	LENDIS	END REQUEST 
DPAR80	ABL	LENDER	END REQUEST WITH REQUEST ERROR

*   GET ONE BYTE FROM ECB BUFFER TO A1 AND A2 
*   CONVERTED TO HEXA FROM ASCII

BYTE1	LCR	A2,A3	GET CHARACTER 
	CF	A5,CHECK	TEST IF NUMERIC
	ANK	A2,/F	GET HEXA 
	LDR	A1,A2	SAVE IN A1 ALSO
	ADK	A3,1	INC ECB BUFFER POINTER
	RTN	A5 

*   GET TWO BYTES FROM ECB BUFFER TO A2 
*   CONVERTED TO HEXA AND STORED IN DOC TABLE 

DOC	LDK	A1,0	CLEAR HEXA VALUE 
	ADK	A4,1	INC TABLE POINTER 
	LCR	A2,A3	GET CHARACTER FROM ECB BUFFER
	CF	A5,CHECK	TEST IF NUMERIC
	ANK	A2,/F
DOC10	SUK	A2,1
	RF(N)	DOC20	TENTH FINISHED 
	ADK	A1,10  PDATE TENTH 
	RB	DOC10 
DOC20	ADK	A3,1	INC ECB BUFFER POINTER 
	LCR	A2,A3	GET NEXT CHARACTER FROM ECB BUFFER 
	CF	A5,CHECK	TEST IF NUMERIC
	ANK	A2,/F
	ADR	A2,A1	ADD TO PREV HEXA VALUE 
	SC	A2,DTTP03,A4	STORE IN DOC TABLE 
	ADK	A3,1	INC ECB BUFFER POINTER
	RTN	A5 
* 
*   CHECK IF CHARACTER IS NUMERIC 
CHECK	ANK	A2,/FF	MASK OUT CHARACTER 
	SUK	A2,/30 
	RB(N)	DPAR80	TOO LOW ERROR 
	SUK	A2,9 
	RB(P)	DPAR80	TOO HIGH ERROR
	ADK	A2,/39	RESTORE CHARACTER 
	RTN	A5 
	XIF
	EJECT		
* 
* 
*   ORDER 38 : RELEASE DOCUMENT 
* 
* 
RELDOC	EQU	*
	LDK	A2,3	BLOCK LENGTH
	LDK	A3,PORDOC	LOAD PRINTER REL DOC ORDER 
	CF	A5,ORDER	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,1	TEST PRINTER STATUS 
	RF(NZ)	RDOC70	NOT OPERABLE 
	CM	DWTDEV+LN,A6	RESET LINE COUNTERS
	CM	DWTDEV+PPD,A6	RESET PRINT POSITION COUNTERS 
RDOC70	ABL	LENDIS	END REQUEST 
	EJECT
* 
*   S U B R O U T I N E S 
* 
* 

* 
*   O R D E R 
*   SEND START OF BLOCK CHAR TO COM. AND ORDER CODE TO PRINTER
* 
ORDER	EQU	* 
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP	JMP IF ERROR 
	LDK	A2,RESET	SEND RESET JUST IN CASE 
	CF	A5,OUTPUT 
	RF(NZ)	ERTP	JMP IF ERROR 
	LDR	A2,A3
	RF	OUT10	SEND PRINTER ORDER
* 
*   E X E C U T E 
*   SEND EXECUTE CHAR (/03) TO PRINTER AND END OF BLOCK CHAR TO COM.
* 
EXECUT	EQU	*
	LDK	A2,ETX	SEND EXECUTE CHAR TO PRINTER
	CF	A5,OUTPUT 
	RF(NZ)	ERTP	JMP IF ERROR 
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	ERTP	JMP IF ERROR 
EXE05	CF	A5,INPUT	GET STATUS CHARACTER	=1 
	LDR	A1,A7	TEST IF ORDER = POS OR REL	=1
	SUK	A1,/0B	U	=1
	RF(Z)	EXE10	POS, BIT 3 IN STATUS DON'T CARE	=1 
	SUK	A1,/38-/0B	U	=1
	RF(Z)	EXE10	REL, BIT 3 IN STATUS DON'T CARE	=1 
	LDR	A1,A2	TEST IF STATUS BIT 3 = 1	=1
	ANK	A1,/18	*	=3
	RB(Z)	EXE05	BIT 3 = 0, READ NEW STATUS	=1
EXE10	EQU	*	U	=1
	SC	A2,DWTDEV,A6	SAVE IN DWT STATUS 
	RTN	A5 
* 
*   0 U T 
*   ADD CONST. AND SEND 
* 
OUT	EQU	* 
	ANK	A2,/7F 
	ADK	A2,/10 
	CWK	A2,/7F 
	RF(NG)	OUT10	CHARACTER NOT GREATER THAN /7F
	LDK	A2,/7F	IF GREATER SET CHAR TO /7F
OUT10	EQU	* 
	CF	A5,OUTPUT 
	RF(NZ)	ERTP	JMP IF ERROR 
	RTN	A5 
			9 LINES DELETED	=1 
* 
*   ERROR ROUTINE FOR STABLK,OUTPUT & ENDBLK
* 
* 
ERTP	EQU	*
	IFF	REQEND=1 
	LDR	A7,A7
	RF(Z)	ERTP20	ORDER /00, TEST STATUS ?
	ANK	A1,/1A	OUTP ERR, SOFTW T-OUT, LRC-ERR ?
	RF(NZ)	RCTP	YES, RECOVERY
	ABL	LDISP	NO 
	XIF
ERTP20	LDK	A1,1	SET NOT OPERABLE
	ABL	LENDIS	END OF REQ. 
	EJECT
* 
*	R C T P 
* 
*	THIS IS THE RECOVERY ROUTINE FOR THE DRIVER 
*	DWT ORDER IS RESET IF NO REQUEST RUNING 
*	DWT IS SET BUSY 
*	AFTER PROGRAM LOADING SYSTEM PARAMETERS ARE SET UP IN DWT 
*	TEST STRING IS SENT TO PRINTER TO GET SYNCRONISM
*	A FIXED FORMATTED RECOVERY STRING IS THEN SENT TO PRINTER 
*	THIS STRING CONTAINS THE ACTUAL PARAMETERS AND THE ACTUAL 
*	STATUS FOR THE PRINTER. 
*	A RUNING REQUEST IS AT LAST REPEATED. 
* 
RCTP	EQU	*
	LD	A1,DWTECB,A6	GET ECB ADDRESS
	RF(NZ)	RCTP02	REQUEST RUNNING
	CM	DWTOR,A6	RESET ORDER
RCTP02	EQU	*
	LDKL	A1,/7FFF	INDICATE DEVICE BUSY 
	ANS	A1,DWTST,A6
	LDKL	A5,DWTSB2	STACK BASE
	ADR	A5,A6
			 
	LD	A1,DWTDEV+DP,A6	*	=3
	RF(NZ)	RCTP08	NOT SYSTEM START RECOVERY	=3 
	LDKL	A1,DTTP03	SET UP DOC PAR TABLE 0 IN DWT	=3
	ST	A1,DWTDEV+DP,A6	*	=3
	LD	A3,STDPP	SET UP ST PR PAR IN DWT
	ST	A3,DWTDEV+PP,A6 
			*	=3 
RCTP08	EQU	*
	LDK	A2,3	BLOCK LENGTH
	LDK	A3,POTEST	LOAD PRINTER ORDER TEST STATUS 
	CF	A5,ORDER	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
RCTP10	EQU	*
	LDK	A2,/19	BLOCK LENGTH
	LDK	A3,PORECV	SET UP PRINTER RECOVERY ORDER
	CF	A5,ORDER	AND SEND 
	LD	A3,DWTDEV+PP,A6	GET PRINTER PARAMETERS
RCTP20	ECR	A2,A3
	CF	A5,OUT	SEND L/NCV 
	LDR	A2,A3
	CF	A5,OUT	SEND CPJ/CPD 
	LC	A2,DWTDEV+APJ,A6	GET ACTUAL POS JOURNAL 
	CF	A5,OUT	AND SEND 
	LC	A2,DWTDEV+APD,A6	GET ACTUAL POS DOCUMENT
	LDR	A3,A2	SAVE DOC POS 
	ANK	A2,/3F	MASK OFF MSB
	CF	A5,OUT	SEND APD 
	LDR	A2,A3	GET DOC POS BACK 
	ANK	A2,/40	MASK OUT MSB
	CF	A5,OUT	SEND AP6 
	LC	A2,DWTDEV+ALN,A6	GET ACTUAL LINE NO 
	CF	A5,OUT	AND SEND 
RCTP40	LDK	A4,10
	LD	A3,DWTDEV+DP,A6	GET DOC PAR ADDRESS	=3
RCTP50	LCR	A2,A3	GET DOC PARAMETER
		
	CF	A5,OUT	AND SEND 
	ADK	A3,1	INC DOC TABLE POINTER 
	SUK	A4,1	DEC CHARACTER COUNTER 
	RB(NZ)	RCTP50	WHOLE TABLE NOT SENT 
RCTP60	CF	A5,EXECUT	EXECUTE RECOVERY IN PRINTER 
RCTP70	LD	A1,DWTECB,A6
	ABL(NZ)	ACT005	REQ RUNNING 
	ABL	LENDIS	REQ NOT RUNNING 
	END

Full view