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

⟦2566ed914⟧

    Length: 23248 (0x5ad0)
    Notes: pts_type(SC)
    Names: »DRTP04.SC«

Derivation

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

PTS(SC)

	IDENT DRTP04 	REL 11.0 81-06-17 870105041100 

			=1,CORR. FOR ODD ECBADDR 
			REL 11.0 81-01-26
* 
******************************************************* 
*                                                     * 
*   PHILIPS TERMINAL SYSTEM PTS                       * 
*                                                     * 
*   DRTP04 = DRIVER TELLER TERMINAL PRINTER           * 
*                                                     * 
*                                                     * 
******************************************************* 
* 
*   THIS DRIVER HANDLES TELLER TERMINAL PRINTER FT80
* 
*   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 22 :      CUT RECEIPT 
*   ORDER 24 :      SET PRINTER PARAMETERS
*   ORDER 26 :      PERFORATE RECEIPT 
* 
*   THE FOLLOWING RETURN CODES ARE USED:
* 
*   BIT  0 :        REQUEST ERROR 
*   BIT  2 :        END OF JOURNAL
*   BIT  7 :        RECOVERY EXECUTED 
*   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	TPAD4	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	INPUT	GET STATUS INPUT CHAR
	EXTRN	STABLK	DEF. START OF BLOCK 
	EXTRN	ENDBLK	DEF. END OF BLOCK 
	EXTRN	ECBBA	BUFFER ADDRESS 
	EXTRN	ECBRL	REQUESTED LENGTH 
	EXTRN	ECBEL	EFFECTIVE LENGTH 
	EXTRN	ECBRC	RETURN CODE
	EXTRN	ECBCW	CONTROL WORD 
	EJECT
* 
************* 
* CONSTANTS * 
************* 
* 
*	DEDICATED PRINTER CHARACTERS (/00-/0F)
* 
POTEST	EQU	/00	TEST 
PORECV	EQU	/01	RECOVERY (NOT USED)
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 (NOT USED)
PORDOC	EQU	/08	RELEASE DOCUMENT 
POWDOC	EQU	/09	WRITE DOCUMENT 
POWREC	EQU	/0A	WRITE RECEIPT
POPDOC	EQU	/0B	POSITION DOCUMENT
RESET	EQU	/0C	RESET ORDER 
POWJRL	EQU	/0D	WRITE JOURNAL
SPEC	EQU	/0E	NOT USED 
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	X:A
* 
*	THE RECEIPT STATION CAN BE EXCLUDED 
*	BY SETTING X:B=0
* 
X:B	EQU	1 
M2PRT	EQU	X:B 
* 
*   MMU BUFFER SIZE 
* 
X:C	EQU	095 
DVBLEN	EQU	X:C
* 
*	A REQUEST IS ALLWAYS ENDED FOR NOT OPERABLE PRINTERS
*	BY SETTING X:D=1
X:D	EQU	0 
REQEND	EQU	X:D
* 
* 
* 
* 
PRIPAR	FORM	1=1,2=0,5=STDNCV,8=0
	EJECT
* 

********************* 
* DWT-DISPLACEMENTS * 
********************* 
* 
* 
* 
PP	EQU	/2	PRINTER PARAMETERS
* 
	EJECT
* 
**********
* TABLES *
**********
* 
* 
*	ADDRESS BLOCK 
* 
	DATA	DVBLEN	MMU BUFFER SIZE
	DATA	2	DEVICE INDEX
TPAD4	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 
	DATA	0	TEST STATUS (JOURNAL) 
	DATA	TSTSTA
	DATA	6	WRITE JOURNAL 
	DATA	WRTJRL
	DATA	/24	SET PRINTER PARAMETERS
	DATA	PRTPAR
	DATA	/FFFF	END OF ORDERS 
* 
TPTAB1	EQU	*	DEVICE INDEX 1 
	DATA	0	TEST STATUS (DOCUMENT)
	DATA	TSTSTA
	DATA	6	WRITE DOCUMENT
	DATA	WRTDOC
	DATA	/24	SET PRINTER PARAMETERS
	DATA	PRTPAR
	DATA	/FFFF	END OF ORDERS 
* 
TPTAB2	EQU	*	DEVICE INDEX 2 
	IFT	M2PRT=1
	DATA	0	TEST STATUS (RECEIPT) 
	DATA	TSTSTA	U
	DATA	6	WRITE RECEIPT 
	DATA	WRTREC
	DATA	/22	CUT RECEIPT 
	DATA	CUTREC
	DATA	/26	PERFORATE RECEIPT 
	DATA	PERREC
	DATA	/24	SET PRINTER PARAMETERS
	DATA	PRTPAR
	XIF
	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, 2=RECEIPT 
* 
	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
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/1	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 
	LD	A3,DWTDEV,A6	GET DEVICE INDEX 
	ANK	A3,/C0	TEST DEVICE INDEX 
	RF(NZ)	TSST40	DEVICE INDEX > 0 
	ANK	A1,/20	TEST PRINTER STATUS 
	RF(Z)	TSST80	NO ERRORS 
	LDKL	A1,ENDJ	END OF JOURNAL
	RF	TSST80
TSST40	EQU	*
	ANK	A3,/80	TEST DEVICE INDEX 
	RF(NZ)	TSST70	DEVICE INDEX > 1 
	ANK	A1,/40	TEST PRINTER STATUS 
	RF(Z)	TSST80	NO ERRORS 
	LDK	A1,DOCOUT	DOCUMENT OUT 
	RF	TSST80
TSST70	LDK	A1,0	RECEIPT, NO ERRORS DETECTABLE 
TSST80	ABL	LENDIS	END REQUEST 
	EJECT		
* 
* 
*   ORDER 06 : WRITE JOURNAL
* 
* 
WRTJRL	EQU	*
	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	=1
	LC	A2,1,A2	*	=1
	ANK	A2,/FF 
	LDK	A4,0	SET UP 0 LF 
	SUK	A2,/2B	TEST CTRL CHAR
	RF(Z)	WRJL10	CTRL CHAR =/2B
	LDK	A4,2	SET UP 2 LF 
	SUK	A2,5 
	RF(Z)	WRJL10	CTRL CHAR =/30
	LDK	A4,1	SET UP 1 LF 
WRJL10	EQU	*
	LD	A2,ECBRL,A8 
	ADK	A2,2	BLOCK LENGTH
	LDK	A3,POWJRL	LOAD WRITE JOURNAL ORDER 
	CF	A5,ORDER	AND SEND 
	LDR	A2,A4	RELOAD LF INF
	CF	A5,OUT	AND SEND 
	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 CHARACTER 

	SUK	A1,/10 
	RB(N)	WRJL20	CHAR </10 
	SUK	A1,/6F 
	RB(Z)	WRJL20	CHAR=/7F
	RF(N)	WRJL40	CHAR = NORMAL 
	SUK	A1,/2F 
	RF(Z)	WRJL40	CHAR =/AE 
	LDK	A1,4	IND CODE CHECK ERROR
	ORS	A1,ECBRC,A8	IN RETURN CODE 
	RB	WRJL20

*   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
	SUK	A4,2 
	RF(NZ)	WRJL60	NOT 2 LF REQUESTED 
	LDR	A4,A2	SAVE FIRST STATUS
	LDK	A2,4	BLOCK LENGTH
	LDK	A3,POWJRL	LOAD WRITE JOURNAL ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A2,1	SET UP 1 LF 
	CF	A5,OUT	SEND LF INF
	CF	A5,EXECUT	EXECUTE 1 LF IN PRINTER 
	ORR	A2,A4	COMBINE FIRST AND SECOND STATUS
WRJL60	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/25	TEST PRINTER STATUS 
	RF(Z)	WRJL70	NO ERRORS 
	ANK	A1,1	TEST PRINTER STATUS 
	RF(NZ)	WRJL70	NOT OPERABLE 
	ANK	A2,4	TEST PRINTER STATUS 
	RF(NZ)	WRJL80	REQUEST ERROR
	LDKL	A1,ENDJ	END OF JOURNAL
WRJL70	ABL	LENDIS	END REQUEST 
WRJL80	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	EJECT		
* 
* 
*   ORDER 06 : WRITE DOCUMENT 
* 
* 
WRTDOC	EQU	*
	LD	A1,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A1,2	TEST REQUESTED LENGTH 
	RF(N)	WRDO80	REQUEST ERROR 
WRDO10	EQU	*
	LD	A2,ECBRL,A8 
	ADK	A2,2	BLOCK LENGTH
	LDK	A3,POWDOC	SET UP PRINTER ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A2,0	SET UP DUMMY LF 
	CF	A5,OUT	AND SEND 
	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 

	SUK	A1,/10 
	RB(N)	WRDO20	CHAR < /10
	SUK	A1,/6F 
	RF(N)	WRDO40	CHAR = NORMAL 
	RB(Z)	WRDO20	CHAR = /7F
	SUK	A1,/2F 
	RF(Z)	WRDO40	CHAR = /AE
	LDK	A1,4	INDICATE CODE CHECK ERROR 
	ORS	A1,ECBRC,A8	IN RETURN CODE 
	RB	WRDO20

*   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
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,/45	TEST PRINTER STATUS 
	RF(Z)	WRDO70	NO ERRORS 
	ANK	A1,1	TEST PRINTER STATUS 
	RF(NZ)	WRDO70	NOT OPERABLE 
	ANK	A2,4	TEST PRINTER STATUS 
	RF(NZ)	WRDO80	REQUEST ERROR
	RB	WRTDOC	DOCUMENT OUT REPEAT ORDER
WRDO70	ABL	LENDIS	END REQUEST 
WRDO80	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	EJECT
* 
* 
*   ORDER 06 : WRITE RECEIPT
* 
* 
	IFT	M2PRT=1
WRTREC	EQU	*
	LD	A1,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A1,2	TEST REQUESTED LENGTH 
	RF(N)	WRRC80	REQUEST ERROR 
	LD	A2,ECBBA,A8	GET CONTROL CHARACTER	=1
	LC	A2,1,A2	U	=1
	ANK	A2,/FF 
	LDK	A4,0	SET UP 0 LF 
	SUK	A2,/2B 
	RF(Z)	WRRC10	CTRL CHAR = /2B 
	LDK	A4,8	SET UP 8 LF 
	SUK	A2,6 
	RF(Z)	WRRC10	CTRL CHAR = /31 
	LDK	A4,5	SET UP 5 LF (FAST)
	SUK	A2,1 
	RF(Z)	WRRC10	CTRL CHAR = /32 
	LDK	A4,2	SET UP 2 LF 
	ADK	A2,2 
	RF(Z)	WRRC10	CTRL CHAR =/30
	LDK	A4,1	SET UP 1 LF 
WRRC10	EQU	*
	LD	A2,ECBRL,A8 
	ADK	A2,2	BLOCK LENGTH
	LDK	A3,POWREC	LOAD WRITE RECEIPT ORDER 
	CF	A5,ORDER	AND SEND 
	LDR	A2,A4	RELOAD LF INF
	CF	A5,OUT	AND SEND LF INFORMATION
	LDK	A3,2	SET UP BUFFER POINTER 
WRRC20	CF	A15,GETCHR	GET CHARACTER FROM ECB BUFFER
	LDR	A1,A1
	RF(Z)	WRRC50	BUFFER FINISHED 
	LDR	A1,A2	GET CHAR IN A1 

*   EXAMINE CHARACTER 

	SUK	A1,/10 
	RB(N)	WRRC20	CHAR </10 
	SUK	A1,/6F 
	RB(Z)	WRRC20	CHAR=/7F
	RF(N)	WRRC40	CHAR = NORMAL 
	SUK	A1,/2F 
	RF(Z)	WRRC40	CHAR =/AE 
	LDK	A1,4	IND CODE CHECH ERROR
	ORS	A1,ECBRC,A8	IN RETURN CODE 
	RB	WRRC20

*   SEND CHARACTER TO DEVICE

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

*   SEND ETX

WRRC50	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	SUK	A4,2 
	RF(NZ)	WRRC60	NOT 2 LF REQUESTED 
	LDR	A4,A2	SAVE FIRST STATUS
	LDK	A2,4	BLOCK LENGTH
	LDK	A3,POWREC	LOAD WRITE RECEIPT ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A2,1	SET UP 1 LF 
	CF	A5,OUT	SEND LF INF
	CF	A5,EXECUT	EXECUTE 1 LF IN PRINTER 
	ORR	A2,A4	COMBINE FIRST AND SECOND STATUS
WRRC60	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,5	TEST PRINTER STATUS 
	RF(Z)	WRRC70	NO ERRORS 
	ANK	A1,1	TEST PRINTER STATUS 
	RF(Z)	WRRC80	REQUEST ERROR 
WRRC70	ABL	LENDIS	END REQUEST 
WRRC80	ABL	LENDER	END REQUEST WITH REQUEST ERROR
	XIF
	EJECT
* 
* 
*   ORDER 22 : CUT RECEIPT
* 
* 
	IFT	M2PRT=1
CUTREC	EQU	*
	LDK	A2,4	BLOCK LENGTH
	LDK	A3,POWREC	SET UP WRITE RECEIPT ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A2,6	SET UP CUT (=6 LF)
	CF	A5,OUT	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,1	MASK STATUS 
CREC70	ABL	LENDIS	END REQUEST 
	XIF
	EJECT
* 
* 
*   ORDER 26 : PERFORATE RECEIPT
* 
* 
	IFT	M2PRT=1
PERREC	EQU	*
	LDK	A2,4	BLOCK LENGTH
	LDK	A3,POWREC	SET UP WRITE RECEIPT ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A2,7	SET UP PERFORATE (=7 LF)
	CF	A5,OUT	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,1	MASK STATUS 
PREC70	ABL	LENDIS	END REQUEST 
	XIF
	EJECT		
* 
* 
*   ORDER 24 : SET PRINTER PARAMETERS 
*   CONTROL WORD CONTAINS:
*   BIT 00    : INDICATE CHANGE 
*   BIT 01-02 : NOT USD 
*   BIT 03    : SMALL LETTER IND
*   BIT 04-07 : NATIONAL CHARACTER VARIATION
*   BIT 08-15 : NOT USED
* 
* 
PRTPAR	EQU	*
	LD	A1,ECBCW,A8	GET CONTROL WORD
	RF(NN)	PPAR10	NO NEW L/NCV SET UP IN CTRL WORD 
	ST	A1,DWTDEV+PP,A6	STORE NEW L/NCV IN DWT
PPAR10	EQU	*
	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 DUMMY 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDR	A1,A2	GET PRINTER STATUS 
	ANK	A1,1	TEST PRINTER STATUS 
PPAR70	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 
	CF	A5,INPUT	GET STATUS CHARACTER 
EXE10	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 
* 
*   ERROR ROUTINE FOR STABLK,OUTPUT & ENDBLK
* 
* 
ERTP	EQU	*
	ANK	A1,/12	OUTP.ERROR OR LRC-ERROR ? 
	RF(Z)	ERTP10	NO
	LDKL	A5,DWTSB2	STACK BASE
	ADR	A5,A6	ADD DWT ADDRESS
	RF	RCTP	DO RECOVERY
ERTP10	EQU	*
	IFF	REQEND=1 
	LDR	A7,A7	TEST ORDER OR RECOVERY ? 
	ABL(NZ)	LDISP	NO 
	XIF
	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
	LDK	A7,0	RESET ORDER 
RCTP02	EQU	*
	LDKL	A1,/7FFF	INDICATE DEVICE BUSY 
	ANS	A1,DWTST,A6
			 
	LD	A1,DWTDEV+PP,A6 
	RF(N)	RCTP08	NOT SYSTEM START UP RECOVERY
	LD	A3,STDPP	SET UP ST PR PAR IN DWT
	ST	A3,DWTDEV+PP,A6 
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,5	BLOCK LENGTH
	LDK	A3,POPPAR	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 LFCTRL/NCV
	LDR	A2,A3
	CF	A5,OUT	SEND DUMMY CODE
RCTP60	CF	A5,EXECUT	EXECUTE RECOVERY IN PRINTER 
RCTP70	LD	A1,DWTECB,A6
	ABL(Z)	LENDIS	REQ NOT RUNNING
	LDKL	A1,/100	IND RECOVERY EXECUTED 
	ST	A1,ECBRC,A8	IN RETURN CODE
	ABL	ACT005	REPEAT REQUEST
	END

Full view