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

⟦5a8ef00a0⟧

    Length: 33344 (0x8240)
    Notes: pts_type(SC)
    Names: »DRTP03.SC«

Derivation

└─⟦110b7ed5e⟧ Bits:30009664 Philips computer tape "600106"
    └─⟦this⟧ »TOSSWORK/DRTP03.SC« 

PTS(SC)

	IDENT DRTP03 	REL 9.2 79-11-16  870105040920 

			=6,COMB OF REL 8,9&10
			PRR 10.1 79-11-14
			=5,SET PR PAR ERR, REL DOC ERR 
			PRR 10.1 79-10-04
			=4,GEN UPDATE REL 10 
			REL 9.1 79-09-26 
			=3,ANK A2,/7F
			PRR 9.1 79-08-14 
			=2,GEN UPDATE
			PRR 9.1 79-06-20 
			=1,GEN UPDATE
			PRR 9.1 79-06-17 
* 
******************************************************* 
*                                                     * 
*   PHILIPS TERMINAL SYSTEM PTS                       * 
*                                                     * 
*   DRTP03 = DRIVER TELLER TERMINAL PRINTER           * 
*                                                     * 
*   ADAPTED FOR TOSS RELEASE INDICATED IN "REL EQU X" * 
*                                                     * 
******************************************************* 
* 
*   THIS DRIVER HANDLES TELLER TERMINAL PRINTER PTS 6371
* 
*   AND CONSISTS OF THE FOLLOWING PARTS:
* 
*   A C T P :	  ACTIVATION PART 
* 
*   I H T P :	  INTERRUPT HANDLER 
* 
*   R C T P :	  RECOVERY ROUTINE
* 
*   THE ACTIVATION PART PREPARES ORDERS AND SENDS 
*   A FIXED FORMATTED STRING TO 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  **IN REL 10...**	=6(=4) 
*   BIT 10 :        END OF JOURNAL  **IN REL 8 & 9**     	=6
*   BIT 10 :        DOCUMENT OUT             	=4
*   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	TDISP	DISPATCHING FROM INTERRUPT 
	EXTRN	DISIOE	DISPATCH I/O ERROR
	EXTRN	DISEND	END I/O AND DISPATCH
	EXTRN	OUTPUT	OUTPUT ONE CHARACTER
	EXTRN	LDREG	RESTORE REGISTERS
	EXTRN	SAVE8	SAVE REG. A1-A8
	EXTRN	GETCHR	GET CHARACTER FROM ECB BUFFER 
	EXTRN	DWTST	DWT STATUS DISPLACEMENT
	EXTRN	DWTECB	DWT ECB DISPLACEMENT
	EXTRN	DWTOR	DWT ORDER DISPLACEMENT 
	EXTRN	DTTP03	DOCUMENT TABLE ADDRESS
	EXTRN	TLTP03	DOCUMENT TABLE LENGTH 
	EXTRN	STREG	STORE REG = GET STATUS INPUT CHAR
	EXTRN	DWTTP	DWT TIMER POINTER
	EXTRN	SETIMP	SET TIMER ROUTINE 
	EJECT
* 
* 
************* 
* CONSTANTS * 
************* 
* 
REL	EQU	9	ADAPTED FOR TOSS REL X	=6 
* 
STB	EQU	/82	START OF TEXT BLOCK 
ETB	EQU	/97	END OF TEXT BLOCK 
SPEC	EQU	/0E	SPECIAL CHARACTER
EXE	EQU	/06	EXECUTE TP71 ORDER
ETX	EQU	/03	END OF TEXT 
RESET	EQU	/0C	RESET CHARACTER 
			U	=4 
TIME	EQU	10	TIME OUT (1S) 
	IFF	REL=8	U	=6 
	IFF	REL=9	U	=6 
ENDJ	EQU	/2000	END OF JOURNAL STATUS	=6 
	XIF		U	=6
	IFT	REL=8	U	=6 
ENDJ	EQU	/20	END OF JOURNAL STATUS	=6 
	XIF		U	=6
	IFT	REL=9	U	=6 
ENDJ	EQU	/20	END OF JOURNAL STATUS	=6 
	XIF		U	=6
* 
*   PRINTER ORDERS (PO) SENT TO PRINTER 
* 
POTEST	EQU	/00	TEST	
POPPAR	EQU	/04	SET PRINTER PARAMETERS	
POTDOC	EQU	/07	TRANSFER DOCUMENT PARAMETERS	
POPDOC	EQU	/0B	POSITION DOCUMENT	 
POWDOC	EQU	/09	WRITE DOCUMENT	
POWJRL	EQU	/0D	WRITE JOURNAL	 
PORDOC	EQU	/08	RELEASE DOCUMENT	
PODSTA	EQU	/05	DIAGNOSTIC STATUS	 
PORECV	EQU	/01	RECOVERY	
	EJECT
* 
************************
* CONDITIONAL ASSEMBLY *
************************
* 
*   THE STANDARD NATIONAL CHARACTER SET IS CHOOSEN
*   BY SETTING X:A TO 0-11 ACCORDING TO THE LIST BELOW	=4 
* 
*   NCV=0 GREAT BRITAIN 
*       1 GERMANY 
*       2 FRANCE
*       3 SPAIN 
*       4 ITALY 
*       5 SWEDEN, FINLAND 
*       6 DENMARK, NORWAY 1		 
*       7 PORTUGAL
*       8 YOGUSLAVIA
*       9 USA 
*      10 DENMARK, NORWAY 2		 
*      11 FRANCE 2  (NOT YET IMPLEMENTED IN THE PRINTERS)   	=4 
* 
X:A	EQU	0 
STDNCV	EQU	X:A
* 
*   THE LOWER CASE SET CAN BE INCLUDED AS STANDARD
*   BY SETTING X:B=1
* 
X:B	EQU	0 
STDL	EQU	X:B
* 
*   THE STANDARD CHARACTER PITCH FOR THE DOCUMENT 
*   STATION IS CHOOSEN BY SETTING X:C TO            	=4 
*   0=15 CH/INCH, 1=12 CH/INCH OR 2=10 CH/INCH      	=4 
* 
X:C	EQU	2 
STDCPD	EQU	X:C
* 
*   THE JOURNAL STATION CAN BE EXCLUDED 
*   BY SETTING X:D=0
* 
X:D	EQU	1 
JOURNL	EQU	X:D
* 
*   THE STANDARD CHARACTER PITCH FOR THE JOURNAL
*   STATION IS CHOOSEN BY SETTING X:E TO              	=4 
*   0=15 CH/INCH, 1=12 CH/INCH OR 2=10 CH/INCH        	=4 
* 
X:E	EQU	0 
STDCPJ	EQU	X:E
* 
*	THE "SET PARAMETER" ORDERS 24 AND 27 CAN BE INCLUDED	=6 
*	BY SETTING X:F=1                               	=6
* 
X:F	EQU	0	U	=6
PARORD	EQU	X:F
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	0
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	1
* 
*   MMU BUFFER SIZE 
* 
X:G	EQU	095	U	=4
DVBLEN	EQU	X:G
* 


PRIPAR	FORM	1=1,2=0,1=STDL,4=STDNCV,2=1,2=STDCPJ,2=1,2=STDCPD	=4
	EJECT
* 
* 
********************* 
* DWT-DISPLACEMENTS * 
********************* 
* 
* 
* 
DWTDRD	EQU	/10	START OF DRIVER DEFINED PART 
* 
	IFT	MMUPAG=0 
START	EQU	DWTDRD
	XIF
* 
	IFT	MMUPAG=1 
START	EQU	DWTDRD+4
	XIF
* 
DWTPP	EQU	START+18	PRINTER PARAMETERS 
DWTPPJ	EQU	START+20	PRINT POS JOURNAL 
DWTAPJ	EQU	DWTPPJ+1	ACTUAL PRINT POS JOURNAL
DWTRPJ	EQU	DWTPPJ	REQUESTED PRINT POS JOURNAL 
DWTPPD	EQU	START+22	PRINT POS DOCUMENT
DWTAPD	EQU	DWTPPD+1	ACTUAL PRINT POS DOCUMENT 
DWTRPD	EQU	DWTPPD	REQUESTED PRINT POS DOCUMENT
DWTLN	EQU	START+24	LINE NUMBER ON DOCUMENT
DWTALN	EQU	DWTLN+1	ACTUAL LINE NUMBER ON DOCUMENT 
DWTRLN	EQU	DWTLN	REQUESTED LINE NUMBER ON DOCUMENT
DWTDP	EQU	START+26	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 *
**********
* 
* 
	DATA	DVBLEN	MMU BUFFER SIZE
	DATA	2	DEVICE INDEX
TPAD3	EQU	*	ADDRESS BLOCK 
	DATA	ACTP	ACTIVATION DRIVER
	IFF	REL=8	U	=6 
	DATA	0	ABORT ROUTINE ADDRESS 
	XIF		U	=6
	DATA	IHTP	INTERRUPT HANDLER
	DATA	RCTP	RECOVERY ROUTINE 
TPTAB	EQU	* 
	IFT	JOURNL=1 
	DATA	/0006 
	IFT	PARORD=1 
	DATA	/2424 
	XIF
	IFT	PARORD=1 
	DATA	/2528 
	XIF
	DATA	/0107,/0C38,/3939 
TPLEN	EQU	*-TPTAB 


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,1	MASK
	LC	A3,DWTST+1,A6	GET OLD DEVICE VALUE
	ANK	A3,/FE 
	ORR	A3,A2
	SC	A3,DWTST+1,A6	STORE INDEX 
	ADR	A7,A2	ADD DWT INDEX TO ORDER 
	SC	A7,DWTOR+1,A6	STORE MODIFIED ORDER
ACT005	LDK	A3,TPLEN-1 
ACT010	CC	A7,TPTAB,A3	CHECK IF LEGAL ORDER
	RF(E)	ACT020	VALID ORDER 
	SUK	A3,1 
	RB(NN)	ACT010	TRY NEXT 
* 
	ABL	DISIOE	ILLEGAL ORDER 
* 
* 
ACT020	EQU	*
	ADR	A3,A3	GET INDEX
	ABI	TPFUC,A3	EXECUTE ORDER 
TPFUC	EQU	* 
	DATA	TSTSTA,WRTJRL 
	IFT	PARORD=1 
	DATA	PRTPAR,PRTPAR 
	XIF
	IFT	PARORD=1 
	DATA	PRTPAR,DOCPAR 
	XIF
	DATA	TSTSTA,WRTDOC,POSDOC,TRFDOC,RELDOC,RELDOC 
	EJECT
* 
* 
*   ORDER 00 : TEST STATUS
* 
* 
TSTSTA	EQU	*
	LDR	A1,A6	SAVE DWT AS PARAMETER
	LDKL	A4,DWTTP	 
	ADR	A4,A6	SET UP TIMER POINTER 
	CF	A15,SETIMP	START TIMER OF 1S
	DATA	TSST20,TIME	TIME OUT ADRESS AND VALUE 
	LDK	A3,POTEST	LOAD TEST ORDER
	CF	A5,ORDER	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDK	A3,8	
	TM	A3,A2	
	RF(Z)	TSST10	NOT PRINTER ANSWER
	LDK	A3,3	
	TM	A3,A2	
	RF(Z)	TSST10	NOT JE OR GE
	LDK	A3,PODSTA	JE OR GE EXECUTE 
	CF	A5,ORDER	DIAGNOSTICSTATUS 
	CF	A5,EXECUT	
TSST10	EQU	*	 
	INH		
	CM*	DWTTP,A6	RESET TIMER 
	CM	DWTTP,A6	RESET TIMER POINTER
	CM	ECBCW,A8	CLEAR CTRL WORD	=2 
	ABL	STATUS	UPDATE STATUS 
TSST20	LDR	A6,A1	GET DWT ADDRESS
	LDK	A2,1	INDICATE NOT OPERABLE 
	RB	TSST10	 
	IFT	JOURNL=1	
	EJECT		

* 
* 
*   ORDER 06 : WRITE JOURNAL
* 
* 
WRTJRL	EQU	*
	LDK	A3,POWJRL	SET UP PRINTER WRITE JOURNAL ORDER 
	CF	A5,ORDER	AND SEND 
	LD	A1,DWTST,A6 
	ANKL	A1,/400 
	RF(NZ)	WRJL10	LF EXECUTED
	LDK	A3,1	SET UP ECB BUFFER POINTER 
	CF	A15,GETCHR	GET CONTROL CHARACTER
	LDR	A1,A1
	RF(NP)	WRJL70	REQ LENGTH TOO SHORT 
	LDR	A1,A2	SET UP CTRL CHAR IN A1 
	SUK	A1,/2B 
	RF(Z)	WRJL10	CTRL CHAR =/2B
	CM	DWTPPJ,A6	CLEAR PRINT POS 
	LDK	A2,2 
	SUK	A1,5 
	RF(Z)	WRJL05	CTRL CHAR =/30
	LDK	A2,1 
	SUK	A1,1 
	RF(NZ)	WRJL05	CTRL CHAR NOT =/31 
	LDK	A2,3 
WRJL05	CF	A5,OUT	SEND LF INF
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	LDK	A1,7 
	TM	A1,A2 
	RF(NZ)	WRJL90	GE,JE OR RE
	LDKL	A1,/400 
	ORS	A1,DWTST,A6	IND LF EXECUTED
	LDK	A1,2 
	CW	A1,ECBRL,A8 
	RF(E)	WRJL90	NO BUFFER TO PRINT
	RB	WRTJRL
WRJL10	LDK	A2,0 
	CF	A5,OUT	SEND 0 LF
	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 
	RF(Z)	WRJL40	CHAR =/7F SEND
	RF(N)	WRJL30	CHAR = NORMAL 
	SUK	A1,/2F 
	RF(Z)	WRJL28	CHAR =/AE 
	CF	A5,ERROR	ILLEGAL CHAR = SEND RESET
	LDK	A2,/80	IND CODE CHECK ERROR
	RF	WRJL90
WRJL28	LDK	A2,/0E 
	RF	WRJL40

*   UPDATE PRINT POSITION 

WRJL30	ADS	A4,DWTRPJ,A6	ADD 1 OR 2 TO REQ PRINT POS 

*   SEND CHARACTER TO DEVICE

WRJL40	CF	A5,OUTPUT	SEND CHARACTER
	RB	WRJL20	GET NEXT CHARACTER 

*   SEND ETX

WRJL50	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	RF	WRJL90
WRJL70	CF	A5,ERROR	SEND RESET 
WRJL80	LDK	A2,4	IND REQ ERROR 
WRJL90	ABL	STATUS 
	XIF		
	EJECT		
* 
* 
*   ORDER 06 : WRITE DOCUMENT 
* 
* 
WRTDOC	EQU	*
	LC	A4,DWTALN,A6	GET ACTUAL LINE
	ANK	A4,/FF 
	ABL(Z)	WRDO80	DOC NOT POSITIONED 
	LDK	A3,1	SET BUFFER INDEX
	CF	A15,GETCHR	GET CONTROL CHARACTER
	LDR	A1,A1
	ABL(NP)	WRDO80	REQ LENGTH < 2
	SUK	A2,/2B 
	RF(Z)	WRDO05	CTRL CHAR = /2B 
	CM	DWTPPD,A6	CLEAR 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	CC	A4,DWTDP+2,A6 
	ABL(G)	WRDO80	REQ LINE > MAX LINES 
	SC	A4,DWTRLN,A6	SET UP REQ LINE NO 
	LDKL	A4,/100	SET UP NORMAL CHAR COUNTER IN A4
WRDO10	LDK	A3,POWDOC	SET UP PRINTER ORDER 
	CF	A5,ORDER	AND SEND 
	LC	A2,DWTRLN,A6	GET REQ LINE NO
	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 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 
	RF(Z)	WRDO40	CHAR = /7F SEND 
	SUK	A1,/2F 
	RF(Z)	WRDO28	CHAR = /AE
	CF	A5,ERROR	SEND RESET 
	LDK	A2,/80	IND CODE CHECK ERROR
	RF	WRDO90
WRDO28	LDK	A2,SPEC	SET UP CHAR /0E
	RF	WRDO40

*   UPDATE PRINT POS

WRDO30	ADS	A4,DWTRPD,A6	ADD 1 OR 2 TO REQ PRINT POS 

*   SEND CHARACTER TO PRINTER 

WRDO40	CF	A5,OUTPUT	SEND CHARACTER
	RB	WRDO20	GET NEXT CHAR

*   SEND ETX

WRDO50	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	RF	WRDO90
WRDO70	CF	A5,ERROR	SEND RESET 
WRDO80	LDK	A2,4	IND REQ ERROR 
WRDO90	ABL	STATUS	UPDATE STATUS 
	EJECT
* 
* 
*   ORDER 0B : POSITION DOCUMENT
*   CONTROL WORD CONTAINS REQUESTED LINE NO 
* 
* 
POSDOC	EQU	*
	LD	A4,ECBCW,A8	GET REQ LINE NO 
	CC	A4,DWTDP+2,A6 
	RF(G)	PDOC30	REQ LINE > MAX LINES
	SC	A4,DWTRLN,A6	SET UP REQ LINE NO 
	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
	CM	DWTPPD,A6	CLEAR PRINT POS 
	LC	A1,DWTDP,A6	TIME OUT USED ?	=4
	ANK	A1,/78	U	=4
	RF(NZ)	PDOC20	YES	=4 
	LDK	A1,/40	NO, DOC OUT SIGNALLED ?	=4
	TM	A1,A2	U	=4
	RB(NZ)	POSDOC	YES, TRY ONCE MORE	=4
PDOC20	ABL	STATUS	UPDATE STATUS 
PDOC30	LDK	A2,4	INDICATE REQ ERROR
	RB	PDOC20
	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)	ODOC10	REQ DOC TABLE NOT DEFINED 
	SUK	A4,10	ADJUST DOCTAB POINTER
	LD	A1,DWTALN,A6		
	RF(Z)	ODOC20	DOC. NOT POSITIONED =OK 
ODOC10	LDK	A2,4	IND REQ ERROR 
	RF	ODOC40
ODOC20	LDK	A3,POTDOC	LOAD PRINTER TRANSFER DOC PARAMETERS ORDER 
	CF	A5,ORDER	AND SEND 
	LDK	A3,DWTDP	SET UP POINTER
ODOC30	LC	A2,DTTP03,A4
	LDR	A1,A6
	ADR	A1,A3
	SCR	A2,A1
			U	=4 
	CF	A5,OUT
	ADK	A4,1 
	ADK	A3,1 
	CWK	A3,DWTDP+10
	RB(NE)	ODOC30	WHOLE TABLE NOT SENT 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	ANK	A2,5	MASK OFF GE AND RE
			U	=1 
ODOC40	ABL	STATUS	UPDATE STATUS 
			U	=1 
			U	=1 
	IFT	PARORD=1	
	EJECT		
* 
* 
*   ORDER 24 : SET PRINTER PARAMETERS 
*   CONTROL WORD CONTAINS:
*   BIT 0     : INDICATE CHANGE OF CH FONT AND NCV        	=4 
*   BIT 01-03 : CHARACTER FONT                                	=4 
*   BIT 04-07 : NATIONAL CHARACTER VARIATION                  	=4 
*   BIT 08-11 : CHARACTER PITCH FOR JOURNAL STATION           	=4 
*   BIT 12-15 : CHARACTER PITCH FOR DOCUMENT STATION          	=4 
* 
* 
PRTPAR	EQU	*
	LDK	A2,0 
	LD	A4,DWTPP,A6	GET OLD DWT VALUE 
	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,DWTPP,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	=1 
	LDR	A3,A4
	ANK	A3,/F0 
			U	=5(=1) 
PPAR15	EQU	*	U	=5(=1) 
	ORR	A2,A3	STORE NEW CPJ IN A2	=5 
	XRR	A3,A4	U	=5 
	ANK	A3,/F0	NEW AND OLD CPJ EQUAL ?	=5
	RF(Z)	PPAR22	YES	=5
	CM	DWTPPJ,A6	NO, RESET PRINT POS FOR JOURNAL	=5
PPAR22	EQU	*	U	=5 
	LDR	A3,A1
	ANK	A3,/F	GET CTRL WORD
	RF(NZ)	PPAR25	NEW CPD SET UP IN CTRL WORD	=1 
	LDR	A3,A4
	ANK	A3,/F	GET CPD FROM DWT 
			U	=5(=1) 
PPAR25	EQU	*	U	=5(=1) 
	ORR	A2,A3	STORE NEW CPD IN A2	=5 
	XRR	A3,A4	U	=5 
	ANK	A3,/F	NEW AND OLD CPD EQUAL ?	=5 
	RF(Z)	PPAR32	YES	=5
	CM	DWTPPD,A6	NO, RESET PRINT POS FOR DOC	=5
PPAR32	EQU	*	U	=5 
	SC	A2,DWTPP+1,A6	STORE NEW PARAMETERS IN DWT 
	LDK	A3,POPPAR	LOAD PRINTER PRINTER PARAMETER ORDER 
	CF	A5,ORDER	AND SEND 
	LC	A2,DWTPP,A6 
			U	=4(=2) 
	CF	A5,OUT	SEND L/NCV 
	LC	A2,DWTPP+1,A6 
	ANK	A2,/77 
	CF	A5,OUT	SEND CPJ/CPD 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
	ANK	A2,1	MASK OUT GE	=1
			U	=1 
			U	=1 
			U	=1 
			U	=1 
PPAR40	ABL	STATUS	UPDATE STATUS 
	EJECT		
* 
* 
*   ORDER 27 : SET DOCUMENT PARAMETERS
*   CONTROL WORD CONTAINS TABLE NO OF GIVEN PARAMETERS
* 
* 
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,3 
	RF(P)	DPAR80	ILLEGAL VALUE 
			U	=2 
	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,/F
	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,/F
	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 
	RF	DPAR90
DPAR80	LDKL	A1,/8000	IND REQ ERROR FOR RETURN CODE
DPAR90	ABL	STAT50	SET RETURN CODE 

*   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	UPDATE 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 
	RF(N)	CHCK10	TOO LOW ERROR 
	SUK	A2,9 
	RF(P)	CHCK10	TOO HIGH ERROR
	ADK	A2,/39	RESTORE CHARACTER 
	RTN	A5 
CHCK10	ADK	A5,4	UPDATE STACK POINTER
	RB	DPAR80
	XIF
	EJECT		
* 
* 
*   ORDER 38 : RELEASE DOCUMENT 
* 
* 
RELDOC	EQU	*
	LDK	A3,PORDOC	LOAD PRINTER REL DOC ORDER 
	CF	A5,ORDER	AND SEND 
	CF	A5,EXECUT	EXECUTE ORDER IN PRINTER
			U	=5(=4) 
	EJECT		
* 
* 
*   UPDATE OF STATUS AND DWT
* 
* 
STATUS	EQU	*
	LDK	A1,0	CLEAR STATUS REGISTER 
	LDK	A3,/10 
	TM	A3,A2 
	RF(NZ)	STAT70	DIAGNOSTIC STATUS
	LDK	A3,/87 
	TM	A3,A2 
	RF(Z)	STAT20	NOT RE, GE, JE OR CE
	CF	A5,SETBK	SET BACK REQ POS AND LINE	 
	LDK	A3,1	U	=5
	TM	A3,A2 
	RF(Z)	STAT10	NOT GE	=5 
	ORK	A1,1	IND NOT OPERABLE
STAT10	LDK	A3,/80 
	TM	A3,A2 
	RF(Z)	STAT15	NOT CE
	ORK	A1,4	IND CODE CHECK ERROR
STAT15	LDK	A3,4 
	TM	A3,A2 
	RF(Z)	STAT20	NOT REQ ERROR 
	SRC	A3,3	ADJUST REQ ERROR
	ORR	A1,A3
STAT20	LD	A3,DWTST,A6 
	ANK	A3,1 
	RF(Z)	STAT60	JOURNAL 
	LDK	A3,/40	DOCUMENT
	TM	A3,A2 
	RF(Z)	STAT30	NOT DOC OUT 
	ORKL	A1,/20	INDICATE DOC OUT	=5
	CM	DWTLN,A6	CLEAR LINE NO FOR DOC
	CM	DWTPPD,A6	CLEAR PRINT POS DOCUMENT
	RF	STAT40
STAT30	LC	A3,DWTRLN,A6
	SC	A3,DWTALN,A6
STAT40	LC	A3,DWTRPD,A6
	SC	A3,DWTAPD,A6
STAT45	ST	A3,ECBEL,A8	SET UP EFFECTIVE LENGTH=ACT PRINT POS 
STAT50	LDKL	A3,/FB01	RESET STATUS BITS
	INH
	ANS	A3,DWTST,A6
	IFF	REL=8	U	=6 
	IFF	REL=9	U	=6 
	SUK	A7,/39	REL DOC ORDER ?	=5
	RF(NZ)	STAT55	NO	=5
	ANK	A1,1	YES IND ONLY NOT OP IF SET	=5 
STAT55	EQU	*	U	=5 
	XIF		U	=6
	ABL	DISEND 
STAT60	LDK	A3,/20 
	TM	A3,A2 
	RF(Z)	STAT62	NOT END OF JOURNAL	=5 
	ORKL	A1,ENDJ	IND END OF JOURNAL	=6(=4) 
STAT62	LDK	A3,2	U	=5
	TM	A3,A2	U	=5
	RF(Z)	STAT65	NOT JOURNAL ERROR (JE)	=5 
	ORKL	A1,1	IND NOT OPERABLE	=5
STAT65	LC	A3,DWTRPJ,A6
	SC	A3,DWTAPJ,A6
	RB	STAT45
STAT70	SC	A2,ECBCW+1,A8	SET UP DIAGN STAT IN CTRL WORD	=2 
	LDK	A1,1	IND ECB RETURN CODE= 1
	RB	STAT50	SET UP RETURN CODE 
	EJECT
* 
*   S U B R O U T I N E S 
* 
* 

* 
*   O R D E R 
*   SEND STB, STX AND ORDER CODE TO PRINTER 
* 
ORDER	EQU	* 
	LDK	A2,STB	SEND STB
	CF	A5,OUTPUT 
	LDR	A2,A3
	CF	A5,OUTPUT	SEND PRINTER ORDER
	RTN	A5 

* 
*   E X E C U T E 
*   SEND ETB AND ETX TO PRINTER 
* 
EXECUT	EQU	*
	LDK	A2,ETB	SEND ETB
	CF	A5,OUTPUT 
	LDK	A2,ETX	SEND ETX
	CF	A5,OUTPUT 
	CF	A5,STREG	GET STATUS CHARACTER 
	RTN	A5 
* 
*   ERROR 
*   SENDS RESET CODE TO PRINTER 
* 
ERROR	EQU	* 
	LDK	A2,RESET 
	CF	A5,OUTPUT 
	RTN	A5 
* 
*   0 U T 
*   ADD CONST. AND SEND 
* 
OUT	EQU	*	U	=3
	ANK	A2,/7F	U	=3
	ADK	A2,/10	U	=3
	CWK	A2,/7F	U	=1
	RF(NG)	OUT10	CHARACTER NOT GREATER THAN /7F	=1 
	LDK	A2,/7F	IF GREATER SET CHAR TO /7F	=1 
OUT10	EQU	*	U	=1
	CF	A5,OUTPUT 
	RTN	A5 
*				 
*   SETBK			
*   SET BACK REQ LINE AND POS TO ACTUAL LINE AND POS	 
*				 
SETBK	LC	A3,DWTALN,A6		 
	SC	A3,DWTRLN,A6		
	LC	A3,DWTAPD,A6		
	SC	A3,DWTRPD,A6		
	LC	A3,DWTAPJ,A6		
	SC	A3,DWTRPJ,A6		
	RTN	A5		 
	EJECT
* 
*   I H T P 
* 
*   INTERRUPT HANDLER: PROCESS OF INTERRUPT 
* 
* 
* 
IHTP	EQU	*
	LDR	A1,A1
	RF(NZ)	IHTP20	LINE NOT OPERABLE
	ECR	A1,A2
	ANK	A1,/70 
	RF(Z)	IHTP40	ACK 
	LDKL	A1,/FF3F
	ANRS	A1,A6	CLEAR PAPER INF IN DWT
	LDR	A1,A2
	ANK	A1,/60	MASK OUT PAPER INF FROM PRINTER ANSWER
	XRK	A1,/60	INVERT BITS 
	SLC	A1,1	ADJUST POS
	ORRS	A1,A6	SET UP NEW PAPER INFORMATION
	LDK	A1,/18	
	TM	A1,A2 
	RF(NZ)	IHTP40	DATA REQUEST OR DIAGNOSTIC STATUS 1
IHTP20	ABL	TDISP	GO TO DISPATCHER 
IHTP40	ABL	LDREG	RETURN FROM CF A5,OUTPUT/STREG 
	EJECT
* 
*   R C T P 
* 
*   RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT POWER ON
* 
RCTP	CF	A15,SAVE8	SAVE REG. A1-A8 
	LDKL	A1,/7FFF	INDICATE DEVICE BUSY 
	ANS	A1,DWTST,A6
	LDK	A3,PORECV	SET UP PRINTER RECOVERY ORDER
	LD	A1,DWTPP,A6 
	RF(N)	RCTP10	NOT SYSTEM START UP RECOVERY	=2 
	LD	A3,STDPP	SET UP ST PR PAR IN DWT	=2 
	ST	A3,DWTPP,A6	U	=2
	LDK	A4,8	SET UP DOC PAR TABLE 0 IN DWT	=2
	LDR	A3,A6	U	=2 
	ADK	A3,DWTDP+8	U	=2
RCTP05	LD	A1,DTTP03,A4	U	=2 
	STR	A1,A3	U	=2 
	SUK	A3,2	U	=2
	SUK	A4,2	U	=2
	RB(NN)	RCTP05	U	=2 
	LDK	A3,PORECV+1	SET UP SYSTEM START UP RECOVERY	=2 
RCTP10	CF	A5,ORDER	SEND ORDER 
	LD	A3,DWTPP,A6	GET PRINTER PARAMETERS	=2 
			U	=2 
			U	=2 
			U	=2 
RCTP20	ECR	A2,A3
			U	=4(=2) 
	CF	A5,OUT	SEND L/NCV 
	LDR	A2,A3
	ANK	A2,/77 
	CF	A5,OUT	SEND CPJ/CPD 
	LC	A2,DWTAPJ,A6	GET ACTUAL POS JOURNAL 
	CF	A5,OUT	AND SEND 
	LC	A2,DWTAPD,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,DWTALN,A6	GET ACTUAL LINE NO 
	CF	A5,OUT	AND SEND 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
			U	=2 
RCTP40	LDK	A4,10
	LDR	A3,A6
	ADK	A3,DWTDP 
RCTP50	LCR	A2,A3	GET DOC PARAMETER
			U	=4 
	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 
	CF	A5,SETBK	SET BACK REQ POS AND LINE	 
	LDK	A1,/40 
	TM	A1,A2 
	RF(Z)	RCTP70	DOC NOT OUT 
	CM	DWTLN,A6	CLEAR LINE NO FOR DOC
	CM	DWTPPD,A6	CLEAR PRINT POS DOC 
RCTP70	LD	A1,DWTECB,A6
	ABL(NZ)	ACT005	REQ RUNNING 
	ABL	DISEND	REQ NOT RUNNING 
	END

Full view