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

⟦9ce60db05⟧

    Length: 30176 (0x75e0)
    Notes: pts_type(SC)
    Names: »DRGP01.SC«

Derivation

└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
    └─⟦this⟧ »MODMON/DRGP01.SC« 

PTS(SC)

	IDENT	DRGP01	AUSTRIA DRIVER FOR 8081 800624

			=1,IMPROVEMENT OF FORM LENGTH CON- 
			 TROL & FORM FEED FUNCTION ON CONT.
			 STATIONARY. PRR 10.0 79-12-07 
			=2,XIF MOVED TO RIGHT PLACE
			PRR 10.0 80-01-25
			=3A,TIME-OUT FUER DRUCKERSTATUS
			*
* 
******************************************************* 
*                                                     * 
*   PHILIPS TERMINAL SYSTEM PTS                       * 
*                                                     * 
*   DRGP01 = DRIVER GENERAL PRINTER           * 
*                                                     * 
*                                                     * 
*                                                     * 
******************************************************* 
* 
*   THIS DRIVER HANDLES GENERAL PRINTER PTS 8081
* 
*   THE DRIVER CONSISTS OF THE FOLLOWING PARTS :
* 
*   A C T P :	  ACTIVATION PART 
* 
*   I H T P :	  INTERRUPT HANDLER 
* 
*   R C T P :	  RECOVERY ROUTINE
* 
* 
	 
* 
*   THE FOLLOWING ORDERS ARE TREATED: 
* 
*   ORDER 00 :      TEST STATUS 
*   ORDER 06 :      WRITE 
*   ORDER 0B :      POSITION DOCUMENT 
*   ORDER 24 :      SET PRINTER PARAMETERS
*   ORDER 38 :      RELEASE DOCUMENT
* 
*   THE FOLLOWING RETURN CODES ARE USED:
* 
*   BIT  0 :        REQUEST ERROR 
*   BIT  2 :        END OF JOURNAL TAPE, 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:	WORK REGISTER
*            A5:	STACK POINTER
*            A6:	DWT-ADDRESS
*            A7:	ORDER
*            A8:	ECB-ADDRESS
* 
* 
	 
* 
* 
******************************************* 
* 
*	ENTRIES 
* 
******************************************* 
* 
* 
	ENTRY	GPAD	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	STREG	STORE REG = GET STATUS INPUT CHAR
	EXTRN	INIFLG	SYSTEM START INDICATOR
	EXTRN	DWTTP
	EXTRN	SETIMP 
	EXTRN	DWTSB1 
	 			 
* 
* 
******************************************
* 
*	CONSTANTS 
* 
******************************************
* 
* 
STB	EQU	/82	START OF TEXT BLOCK 
ETB	EQU	/97	END OF TEXT BLOCK 
SPEC	EQU	/2E	SPECIAL CHARACTER
STX	EQU	/02	START OF TEXT 
ETX	EQU	/03	END OF TEXT 
LF	EQU	/0A	LINE FEED
FF	EQU	/0C	FORM FEED
CR	EQU	/0D	CARRIAGE RETURN
SO	EQU	/0E	SHIFT OUT
SI	EQU	/0F	SHIFT IN 
ESC	EQU	/1B	ESCAPE
CSI	EQU	/5B	CONTROL SEQUENCE INTRODUCER 
REP	EQU	/62	REPEAT
VPR	EQU	/65	VERTICAL POSITION RELATIVE
INFF	EQU	/74	INPUT FRONT FEED 
VPFF	EQU	/71	VERTICAL POSITION FRONT FEED 
EJFF	EQU	/38	  FRONT FEED 
SNV	EQU	/77	SELECT NATIONAL VERSION 
SLPL	EQU	/76	SELECT PAGE LENGTH 
RIS	EQU	/63	RESET TO INITIAL STATE
DSR	EQU	/6E	DEVICE STATUS REPORT
DCS	EQU	/50	DEVICE CONTROL STRING 
ST	EQU	/5C	STRING TERMINATOR
DEL	EQU	/7F	DELETE
ZERO	EQU	/30	ZERO 
NEG	EQU	/FF 
* 
* 
ZEIT	EQU	15	1,5 SEC. FUER TIME-OUT
* 
* 
	 			 
* 
* 
********************************************************* 
* 
*	CONTROL SEQUENCES 
* 
********************************************************* 
* 
* 
BYTE	FORM	8,8 
* 
* 
CSREP	EQU	*	REPEAT
	BYTE	ESC,CSI 
	BYTE	ZERO,ZERO 
	BYTE	ZERO,REP
	BYTE	NEG,NEG 
CSVPR	EQU	*	VERTICAL POSITION RELATIVE
	BYTE	ESC,CSI 
	BYTE	ZERO,ZERO 
	BYTE	ZERO,VPR
	BYTE	NEG,NEG 
CSINFF	EQU	*	INPUT FRONT FEED 
	BYTE	ESC,CSI 
	BYTE	ZERO,ZERO 
	BYTE	INFF,NEG
CSVPFF	EQU	*	VERTICAL POSITION FRONT FEED 
	BYTE	ESC,CSI 
	BYTE	ZERO,ZERO 
	BYTE	VPFF,NEG
CSEJFF	EQU	*	  FRONT FEED 
	BYTE	ESC,EJFF
	BYTE	NEG,NEG 
	 
CSSNV	EQU	* 
			SELECT NATIONAL VERSION
	BYTE	ESC,CSI 
	BYTE	ZERO,ZERO 
	BYTE	SNV,NEG 
CSSLPL	EQU	*	SELECT PAGELENGTH
	BYTE	ESC,CSI 
	BYTE	ZERO,ZERO 
	BYTE	SLPL,NEG	*	 
	BYTE	NEG,NEG 
CSRIS	EQU	*	RESET TO INITIAL STATE
	BYTE	ESC,RIS 
	BYTE	NEG,NEG 
CSDSR	EQU	*	DEVICE STATUS REPORT
	BYTE	ESC,CSI 
	BYTE	/35,DSR 
	BYTE	NEG,NEG 
	 
* 
* 
******************************************************* 
* 
*	CONDITIONAL ASSEMBLY
* 
******************************************************* 
* 
* 
* 
*	THE STANDARD NATIONAL CHARACTER SET IS CHOOSEN
*	BY SETTING X:A TO 1-15 ACCORDING TO THE LIST BELOW
* 
* 
*		NCV=1 GERMANY,AUSTRIA,LUXEMBOURG,SWITZERLAND 
	   =2 GREAT BRITAIN,NETHERLANDS,BELGIUM,NEW ZEELAND,SOUTH AFRICA 
	   =3 FRANCE,SWITZERLAND,BELGIUM,LUXEMBOURG
	   =4 SPAIN,MEXICO,ARGENTINA,VENEZUELA 
	   =5 ITALY,SWITZERLAND
	   =6 SWEDEN,FINLAND 
	   =7 DENMARK,NORWAY 
	   =8 PORTUGAL,BRAZIL
	   =9 YUGOSLAVIA 
	   =10 USA,CANADA,AUSTRALIA
	   =11 SWEDEN (SPECIAL VERSION)
	   =13 GREEK 
	   =14 JAPAN (KATAKANA VERSION)
	   =15 ISRAEL (HEBREW  VERSION)
* 
* 
X:A	EQU	02	GREAT BRITAIN AS STANDARD
STDNCV	EQU	07 
	 
* 
* 
*	THE FRONT FEED DEVICE CAN BE EXCLUDED 
*	BY SETTING X:B = 0
* 
* 
X:B	EQU	1	
FFDEV	EQU	0	FRONT FEED DEVICE 
* 
* 
* 
*	THE STANDARD PAGELENGTH IS DEFINED
*	BY SETTING X:C = NUMBER OF LINES
* 
* 
X:C	EQU	48
PAGLEN	EQU	51 
* 
* 
*	THE STANDARD NUMBER OF LINES IS DEFINED 
*	BY SETTING X:D = NUMBER OF LINES
* 
* 
X:D	EQU	36	*	 
DOCLEN	EQU	48 
	 
* 
* 
* 
*	MMU BUFFER SIZE 
* 
* 
X:E	EQU	132 
DVBLEN	EQU	162
* 
* 
* 
*	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
	 
* 
* 
******************************************* 
* 
*	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
* 
DWTDCS	EQU	START+/12	DOCUMENT CHARACTER SET 
DWTPCS	EQU	START+/14	PRINTER CHARACTER SET
DWTPL	EQU	START+/16	PRINTER PAPER LENGTH
DWTDL	EQU	START+/18	DOCUMENT PAPER LENGTH 
DWTALN	EQU	START+/1A	ACTUAL LINE ON DOCUMENT
DWTRLN	EQU	START+/1C	REQUESTED LINE ON DOCUMENT 
DWTRC	EQU	START+/1F	RETURN CODE (ACKUMULATED) 
DWTSTR	EQU	START+/20	CONTROL SEQUENCE ADRESS
DWTDISP	EQU	START+/22	DWT-DISPLACEMENT TO LINE NO,CHAR.SET,ETC. 
DWTACD	EQU	START+/24	ACTUAL COLUMN DOCUMENT 
DWTACP	EQU	START+/27	ACTUAL COLUMN PAPER
DWTCO1	EQU	START+/2A	COLUMN COUNTER 1 
DWTCO2	EQU	START+/2B	COLUMN COUNTER 2 
DWTSYST	EQU	START+/30	SYSTEM START IND.	
DWTLFD	EQU	START+/32	LINE/FORM FEED INDICATOR	
	 
* 
* 
******************************************* 
* 
*	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
	 
* 
******************************************* 
* 
*	TABLES
* 
******************************************* 
* 
* 
	DATA	DVBLEN	MMU BUFFER SIZE
	DATA	2	DEVICE INDEX
GPAD	EQU	*	ADDRESS BLOCK
	DATA	ACTP	ACTIVATION DRIVER
	DATA	0	ABORT ROUTINE ADDRESS 
	DATA	IHTP	INTERRUPT HANDLER
	DATA	RCTP	RECOVERY ROUTINE 
TPTAB	EQU	* 
	IFT	FFDEV=1
	DATA	/0107,/0C25,/3939 
	XIF
	DATA	/0006,/2424 
TPLEN	EQU	*-TPTAB 


	 
* 
* 
*   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=CONTINUOUS STATIONARY, 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	* 
	IFT	FFDEV=1
	DATA	TSTSTA,WRTDOC,POSDOC,DOCPAR,RELDOC,RELDOC 
	XIF
	DATA	TSTSTA,WRTCON,CSTPAR,CSTPAR 
	 
* 
* 
*   ORDER 00 : TEST STATUS
* 
* 
TSTSTA	EQU	*	TEST STATUS
	CF	A5,RESREC 
	CF	A5,GTSTAT	GET STATUS FROM PRINTER 
	ABL	DISEND	END REQUEST 
	 
	IFT	FFDEV=1
* 
* 
*   ORDER 06: WRITE DOCUMENT
* 
* 
WRTDOC	EQU	*
	CF	A5,GTSTAT 
	LD	A4,DWTST,A6	DEVICE STATUS 
	ANKL	A4,/200	HAS POWER OFF OCCURED ? 
	RF(NZ)	WRDO05	YES
	LDKL	A3,/2000	*	 
	TM	A1,A3	DOCUMENT OUT ?
	RF(Z)	WRDO06	NO
	LDKL	A3,/8000	YES SET BIT 0 (REQ ERROR)
	ORS	A3,ECBRC,A8	 
	ABL	DISEND	END REQUEST 
WRDO05	EQU	*	*	 
WRDO06	LDK	A3,1 
	TM	A1,A3	NOT OPERABLE? 
	RF(Z)	WRDO10	NO
	ABL	DISEND	END REQUEST 
WRDO10	LD	A3,DWTALN,A6	GET ACTUAL LINE
	RF(NZ)	WRDO15
	LDK A3,1	SET UP ECB BUFFER POINTER	
	CF	A15,GETCHR	GET CONTROL CHARACTER	 
	CWK	A2,/31	CTRL CHAR=/31 ?	
	ABL(NE)	POSERR	NO,DOC NOT POSITIONED 
	LD	A3,DWTDL,A6	*	
	ST	A3,DWTRLN,A6	FIRST LINE ON DOC.	
WRDO12	LDKL	A2,CSINFF	INPUT FRONT FEED	 
	LDK	A3,DWTRLN	REQUESTED LINE NO DISPLACEMENT 
	CF	A5,SEND	SEND INPUT FRONT FEED 
	LD	A3,DWTRLN,A6
	ST	A3,DWTALN,A6	SET DWTALN=DWTRLN

WRDO15	LDKL	A2,CSSNV	SELECT NATIONAL VERSION
	LDK	A3,DWTDCS	DOCUMENT CHARACTER SET DISPLACEMENT
	CF	A5,SEND	SEND SELECT NATIONAL VERSION
			*	=1 
			*	=1 
			*	=1 
	RF	WRT01	GOTO GET CONTROL CHARACTER
	XIF
	 
* 
* 
*   ORDER 06: WRITE CONTINOUS STATIONARY
* 
* 
WRTCON	EQU	*
				*	
	CF	A5,GTSTAT	GET DEVICE STATUS 
	LDKL	A3,/2000	*	 
	TM	A1,A3	END OF PAPER? 
	RF(Z)	WRCO05	NO. 
	ABL	ENDIO	END REQUEST
WRCO05	LDK	A3,1	NOT OPERABLE? 
	TM	A1,A3 
	RF(Z)	WRCO10	NO
	ABL	ENDIO	END REQUEST

WRCO10	LDKL	A2,CSSNV	SELECT NATIONAL VERSION
	LDK	A3,DWTPCS	PRINTER CHAR. SET DISPLACEMENT 
	CF	A5,SEND	SEND SELECT NATIONAL VERSION
			U	=1 
			U	=1 
			U	=1 
* 
*	GET CONTROL CHARACTER 
* 
WRT01	LDK	A3,1	SET UP ECB BUFFER POINTER
	CF	A15,GETCHR	GET CONTROL CHARACTER

	LDR	A4,A1
	LD	A1,DWTST,A6	GET DEVICE STATUS	
	ANKL	A1,/200	HAS POWER OFF OCCURED ?	
	RF(Z)	WRT04	NO	
	CF	A5,RESREC	YES	
	CWK	A2,/2B	CTRL. CHAR.=/2B ?	
	RF(NE)	WRT08	NO	 
	LC	A1,DWTOR+1,A6	GET DWT INDEX	
	ANK	A1,1	DOCUMENT ?	 
	RF(NZ)	WRT09	YES	
	RF	WRT07	NO	 
WRT04	CWK	A2,/2B	CTRL. CHAR.=/2B	 
	RF(NE)	WRT02	NO	 
	LC	A2,DWTOR+1,A6	GET DWT INDEX 
	ANK	A2,1	DOCUMENT? 
	RF(NZ)	WRT03	YES 
	LD	A4,DWTCO1,A6	GET ACTUAL COLUMN
	CF	A5,KONVER	CONVERT BINARY TO ASCII 

	SC	A2,DWTACP,A6	STORE THE VALUE IN ACTUAL COLUMN  PAPER D
	ST	A4,DWTACP+2,A6	STORE THE VALUE IN ACTUAL COLUMN PAPER DISPLACEMENT
WRT07	LDK	A2,/20	SEND SPACE	
	CF	A5,OUTPUT 
	LDKL	A2,CSREP	REPEAT 
	LDK	A3,DWTACP	ACTUAL COLUMN PAPER DISPLACEMENT 
	CF	A5,SEND	SEND REPEAT 
	LDK	A3,2	SET UP ECB BUFFER POINTER 
	RF	WRT15 
WRT03	LD 	A4,DWTCO2,A6	GET ACTUAL COLUMN
	CF	A5,KONVER	CONVERT BINARY TO ASCII 
	SC	A2,DWTACD,A6	STORE THE VALUE IN ACTUAL COLUMN DOC. DI 
	SC	A4,DWTACD+2,A6	STORE THE VALUE  IN ACTUAL COLUMN DOC.DISPLACEMENT 
	SRL	A4,8 
	SC	A4,DWTACD+1,A6	SHIFT FOR CORRECT DIGITS 
WRT09	LDK	A2,/20	SEND SPACE	
	CF	A5,OUTPUT 
	LDKL	A2,CSREP	REPEAT 
	LDK	A3,DWTACD	ACTUAL COLUMN DOCUMENT DISPLACEMENT
	CF	A5,SEND	SEND REPEAT 
	LDK	A3,2	SET UP ECB BUFFER POINTER 
	RF	WRT15 
WRT08	LC	A1,DWTLFD,A6	GET INDICATOR	
	ANK A1,/8	IS LINE/FORM FEED DONE ?	
	RF(Z)	WRT14	YES	 
WRT02	LC	A1,DWTOR+1,A6	DOCUMENT ?	
	ANK	A1,1	*	
	RF(Z)	WRT13	NO	
* 
	CWK	A2,/30	TWO LINE FEED ?	
	RF(E)	WRT11	YES	 
* 
	CWK	A2,/31	FORM FEED ?	
	RF(E)	WRT12	YES	 
	RF	WRT16	*	
WRT11	LD	A1,DWTRLN,A6	GET REQ LINE NO	
	CF	A5,BINARY	CONV ASCII TO BINARY	 
	SUK	A3,1	INCR REQ LINE NO	 
	RF	TWO	TWO LINE FEED	
WRT16	LD	A1,DWTRLN,A6	GET REQ LINE NO	
	CF	A5,BINARY	CONV ASCII TO BINARY	 
TWO	SUK	A3,1	INCR REQ LINE NO	
	LDR	A4,A3	*	 
	CF	A5,KONVER	CONV BINARY TO ASCII	 
	ST	A4,DWTRLN,A6	STORE REQ LINE NO	 
* 
	LDKL	A2,CSVPFF	VERTICAL POS FRONT FEED	
	LDK	A3,DWTRLN	REQ LINE NO DISPLACEMENT	
	CF	A5,SEND	*	
* 
	LD	A4,DWTRLN,A6	*	 
	ST	A4,DWTALN,A6	ACTUAL LINE =REQ LINE	 
	RF	WRT12 
* 
* 
WRT13	CWK	A2,/30	CONTINOUS STATIONARY	
	RF(E)	WRT05	TWO LINE FEED,YES	 
* 
	CWK	A2,/31	FORM FEED ?	
	RF(NE)	WRT10	NO	 
* 
	LDK	A2,FF	SEND FORM FEED	
	CF	A5,OUTPUT	*	
	RF	WRT12	*	
* 
WRT05	LDK	A2,LF	SEND LINE FEED
	CF	A5,OUTPUT 
WRT10	LDK	A2,LF	SEND LINE FEED
	CF	A5,OUTPUT 
WRT12	LC	A1,DWTLFD,A6	GET INDICATOR	
	ORK	A1,/4	INDICATE LINE/FORM FEED DONE	
	SC	A1,DWTLFD,A6	STORE INDICATOR	 
WRT14	LC	A2,DWTOR+1,A6	GET DWT INDEX
	ANK	A2,1	DOCUMENT? 
	RF(NZ)	WRT45	YES 
	CM	DWTCO1,A6	CLEAR PAPER COLUMN COUNTER 1
WRT45	CM	DWTCO2,A6	CLEAR DOCUMENT COLUMN COUNTER 2
* 
* 

WRT15	LDK	A3,2	*	 
	RF	WRT20	*	
WRT17	SUK	A3,/02	ECB BUFFER POINTER = /02 
	RF(Z)	WRT18	YES. 
	LDK	A2,CR	NO. SEND CARRIAGE RETURN 
	CF	A5,OUTPUT 
WRT18	CF	A5,GTSTAT	GET STATUS 
	RF	ENDIO	END REQUEST 
* 
WRT20	CF	A15,GETCHR	GET CHARACTER FRON ECB-BUFFER 
	LDR	A4,A1
	RB(NP)	WRT17	NO MORE CHARACTERS
	LDR	A4,A2
* 
*	EXAMINE CHARACTER AND SEND DEPENDING ON TYPE OF CHARACTER 
* 

	SUK	A4,/20	CHAR < /20? 
	RB(N)	WRT20	YES GET A NEW CHARACTER
	SUK	A4,/5F	CHAR < /7F? 
	RF(N)	WRT25	YES. 
	SUK	A4,/2F	NO. CHAR = /AE? 
	RF(Z)	WRT30	YES. CONVERT /AE TO /2E
	LDK	A4,/04	ILLEGAL CHARACTER SET BIT 13 IN R.C.
	ORS	A4,ECBRC,A8
	RB	WRT20 
WRT30	LDK	A2,/2E
WRT25	LDR	A4,A1 
	CF	A5,OUTPUT	SEND CHARACTER
	LC	A2,DWTOR+1,A6	GET DWT INDEX 
	ANK	A2,1	DOCUMENT? 
	RF(NZ)	WRT40	YES 
	IM	DWTCO1,A6	INC.COLUMN COUNTER 1
	RB	WRT20 
WRT40	IM	DWTCO2,A6	INC.COLUMN COUNTER 2 
	RB	WRT20 
ENDIO	EQU	* 
	LC	A2,DWTLFD,A6	*	 
	ANK	A2,/8	*	 
	SC	A2,DWTLFD,A6	RESET LF/FF IND.	
	ABL	DISEND	END REQUEST 

	 
	IFT	FFDEV=1
* 
* 
*   ORDER 0B : POSITION DOCUMENT
*   CONTROL WORD CONTAINS REQUESTED LINE NO 
* 
* 
POSDOC	EQU	*	POSITION DOCUMENT
	CF	A5,RESREC 
	CF	A5,GTSTAT	GET DEVICE STATUS	
	LDK	A3,1	NOT OPERABLE	 
	TM	A1,A3	*	
	RF(NZ)	POS020	YES	 
	LDKL	A2,CSSNV	SELECT NATIONAL VERSION
	LDK	A3,DWTDCS	DOCUMENT VERSION 
	CF	A5,SEND	SEND SNV
			*	=1 
			*	=1 
			*	=1 
	LD	A4,ECBCW,A8	GET REQUESTED LINE
	ANK	A4,/FF 
	RF(Z)	POSERR	ILLEGAL LINE NUMBER 
	LD	A1,DWTDL,A6	MAX. LINE 
	CF	A5,BINARY	CONVERT ASCII TO BINARY 
	CWR	A4,A3	REQ. LINE>MAX. LINE
	RF(G)	POSERR	YES 
	ADK	A3,1	CORRECT POSITION
	SUR	A4,A3	INVERT LINE NO.
	NGR	A4,A4	GET PRINTER REQ. LINE NO.
	CF	A5,KONVER	CONVERT BINARY TO ASCII 
	ST	A4,DWTRLN,A6	SET REQUESTED LINE 
	LD	A4,DWTALN,A6	GET ACTUAL LINE
	RF(NZ)	POS030	DOCUMENT ALREADY POSITIONED
POS005	EQU	*
	LDKL	A2,CSINFF	INPUT FRONT FEED
	LDK	A3,DWTRLN	REQUESTED LINE NUMBER DISPLACEMENT 
	CF	A5,SEND	SEND INPUT FRONT FEED 
POS010	EQU	*
	CF	A5,GTSTAT	GET STATUS
	LDR	A2,A1	GET RETURN CODE
	ANKL	A2,/2000	PAPER DOCUMENT OUT ? 
	RB(NZ)	POS005	YES WAIT FOR DOCUMENT TO BE INSERTED 
	LD	A4,DWTRLN,A6	GET REQUESTED LINE 
	ST	A4,DWTALN,A6	ACTUAL LINE = REQ LINE 
			*	=2 
POS020	ABL	DISEND	
POS030	EQU	*
	LDKL	A2,CSVPFF	VERTICAL POSITION FRONT FEED
	LDK	A3,DWTRLN	REQUESTED LINE NUMBER DISPLACEMENT 
	CF	A5,SEND	SEND VERTICAL POSITION FRONT FEED 
	RB	POS010
	XIF		=2	=2 
POSERR	EQU	*
	LDKL	A1,/8000	REQUEST ERROR
	RB	ENDIO	END REQUEST 
	 
	IFT	FFDEV=1
* 
* 
*	ORDER 24 : SET DOCUMENT PARAMETERS
* 
* 
DOCPAR	EQU	*	DOCUMENT PARAMETERS
	LDK	A1,0	CLEAR A1	 
	CF	A5,RESREC 
	LD	A4,ECBCW,A8	GET NUMBER OF LINES 
	SRL	A4,8	GET LINES 
	RF(Z)	DOC010	NO CHANGE OF LINES
	CWK	A4,/10	INDEX TO BIG
	RB(G)	POSERR	YES 
	ADR	A4,A4	ADJUST INDEX TO LINE TABLE 
	LD	A4,LINNUM,A4	GET LINE ACCORDING TO INDEX
	ST	A4,DWTDL,A6	SET PAGE LENGTH FOR DOCUMENT
DOC010	EQU	*
	LD	A4,ECBCW,A8	GET NATIONAL CHARACTER VARIATION
	ANK	A4,/FF	
	RF(Z)	DOC020	NO CHANGE OF NATIONAL CHARACTER SET 
	CWK	A4,/F	INDEX TO BIG 
	RB(G)	POSERR	YES 
	ADR	A4,A4	ADJUST TABLE INDEX 
	LD	A4,NCVTAB,A4	GET NAT. CHAR. SET ACC. TO INDEX 
	ST	A4,DWTDCS,A6	SET CHARACTER SET FOR DOCUMENT 
DOC020	EQU	*
	RB	ENDIO	END REQUEST 
	XIF
	 
* 
* 
*	ORDER 24 : SET CONTINUOUS STATIONARY PARAMETERS 
* 
* 
CSTPAR	EQU	*	SET PARAMETERS CONTINUOUS STATIONARY 
	LDK	A1,0	CLEAR A1	 
	CF	A5,RESREC 
	LD	A4,ECBCW,A8	GET NUMBER OF LINES CST.
	SRL	A4,8	GET LINES 
	RF(Z)	CST010	NO CHANGE OF LINES
	CWK	A4,/10	INDEX TO BIG
	RB(G)	POSERR	YES 
	ADR	A4,A4	ADJUST INDEX TO LINE TABLE 
	LD	A4,LINNUM,A4	GET LINES ACCORDING TO INDEX 
	ST	A4,DWTPL,A6	SET PAGE LENGTH FOR CONT.STAT.
	LDKL	A2,CSSLPL	SELECT PAGELENGTH	=1
	LDK	A3,DWTPL	PRINTER PAPER LENGTH DISPL.	=1
	CF	A5,SEND	SEND SELECT PAGELENGTH	=1 
CST010	EQU	*
	LD	A4,ECBCW,A8	GET NATIONAL CHARACTER VARIATION
	ANK	A4,/FF	
	RF(Z)	CST020	NO CHANGE OF NAT. CHAR. SET 
	CWK	A4,/F	INDEX TO BIG 
	RB(G)	POSERR	YES 
	ADR	A4,A4	ADJUST INDEX TO NAT. CHAR. TABLE 
	LD	A4,NCVTAB,A4	GET NAT. CHAR. SET ACC. TO INDEX 
	ST	A4,DWTPCS,A6	SET NAT. CHAR. SET FOR CONT.STAT.
CST020	EQU	*
	ABL	ENDIO	END REQUEST
* 
* 
* 
	 
	IFT	FFDEV=1
* 
* 
*	ORDER 38 : RELEASE DOCUMENT 
* 
* 
RELDOC	EQU	*
	CF	A5,RESREC 
	LDKL	A2,CSEJFF	CONTROL SEQ.   FRONT FEED 
	CF	A5,SEND	SEND SEQUENCE 
	CF	A5,GTSTAT	GET STATUS FROM PRINTER 
	LDR	A2,A1	GET RETURN CODE
	ANK	A2,/20	DOCUMENT RELEASED 
	RB(NZ)	RELDOC	NO , TRY AGAIN 
	ANKL	A1,/8000	REQUEST ERROR
	CM	DWTALN,A6	RESET ACTUAL LINE 
	CM	DWTRLN,A6	RESET REQUESTED LINE
	ABL	ENDIO	END REQUEST
	XIF
	 
* 
* 
*	I H T P 
* 
* 
*	INTERRUPT HANDLER : PROCESS OF INTERRUPT
* 
* 
* 
IHTP	EQU	*
	LD	A4,DWTST,A6	I/O-REQUEST 
	ABL(N)	TDISP	NO , DISPATCH 
	ABL	LDREG	RETURN TO READ ROUTINE 
	 
* 
* 
*	 R C T P
* 
*	RECOVERY ROUTINE REPEATS RUNNING REQUEST AT POWER ON
* 
* 
RCTP	EQU	*
	CF	A15,SAVE8	SAVE A1 - A8
	LC	A4,DWTLFD,A6	GET INDICATOR	 

	ANK	A4,/4	IS LINE/FORM FEED DONE ?	
	RF(NZ)	RCTP05	YES	 
	ORK	A4,/8	INDICATE:NO LINE/FORM FEED DONE	 
	SC	A4,DWTLFD,A6	*	  			  	                                *	 
	RF	RCTP07	*	  			  	                                *	 
RCTP05	LDK	A4,0	RESET INDICATORS	 
	ST	A4,DWTLFD,A6	*	 
RCTP07	LDKL	A1,/7FFF	SET DEVICE BUSY	 
	ANS	A1,DWTST,A6	BUSY 
	LDKL	A2,CSRIS	RESET TO INITIAL STATE 
	CF	A5,SEND	SEND RESET TO INITIAL STATE 
	LD	A1,DWTSYST,A6	INTERN. SYSTEM START IND.	
	RF(NZ)	RCTP10	NO SYSTEM START	 
			*	 
	IM	DWTSYST,A6	SET SYSTEM START INDICATOR	
			*	 
	LDKL	A4,STDNCV	GET STANDARD NAT. CHAR. SET 
	CF	A5,KONVER	CONVERT BIANARY TO ASCII
	ST	A4,DWTDCS,A6	SET CHAR. SET DOCUMENT 
	ST	A4,DWTPCS,A6	SET CHAR. SET CONT.STAT. 
	LDKL	A4,PAGLEN	STANDARD PAGE LENGTH
	CF	A5,KONVER	CONVERT BINARY TO ASCII 
	ST	A4,DWTPL,A6	SET PAGE LENGTH CONT.STAT.
	LDKL	A2,CSSLPL	SELECT PAGELENGTH	=1
	LDK	A3,DWTPL	PRINTER PAPER LENGTH DISPL.	=1
	CF	A5,SEND	SEND SELECT PAGELENGTH	=1 
	LDKL	A4,DOCLEN	GET STANDARD PAGE LENGTH DOCUMENT 
	CF	A5,KONVER	CONVERT BINARY TO ASCII 
	ST	A4,DWTDL,A6	SET PAGE LENGTH DOCUMENT
RCTP10	EQU	*
	CM	DWTALN,A6	RESET ACTUAL LINE 
	LDKL	A1,/200	INDICATE POWER OFF OCCURED
	ORS	A1,DWTST,A6	 
	LD	A1,DWTECB,A6	RUNNING REQUEST
	ABL(NZ)	ACT005	YES , REPEAT THE REQUEST
	ABL	DISEND	DISPATCH
	 
* 
* 
*	GTSTAT
* 
* 
*	THIS ROUTINE SENDS 'DEVICE STATUS REPORT TO THE PRINTER 
* 
*	AND ANALYZES THE DEVICE STATUS SENT FROM THE PRINTER
* 
*	AT EXIT A1 = RETURN CODE
* 
* 
GTSTAT	EQU	*
	CM	DWTRC,A6	RESET RETURN CODE
	LDK	A2,ESC	ESCAPE	 
	CF	A5,OUTPUT	SEND ESC
	LDK	A2,CSI	CONTROL SEQUENCE INTRODUCER 
	CF	A5,OUTPUT	SEND CSI
	LDK	A2,/35 
	CF	A5,OUTPUT	SEND /35
	LDK	A2,DSR	DEVICE STATUS REPORT
	CF	A5,OUTPUT	SEND DSR
	LDR*	A2,A6 
	ANK	A2,/F	*	 
	CWK	A2,/C	PTS 8000 ? 
	RF(L)	GTST05	NO
	SUK	A2,/F	SALCUZ ?	
	RF(Z)	GTST05	YES	
	LDK	A2,ETX	END OF TEXT 
	CF	A5,OUTPUT	SEND ETX
GTST05	LDKL	A4,TAB	GET TABLE ADDRESS
GTST10	EQU	*
	LDR	A3,A4	A4 WIRD NOCH GEBRAUCHT 
	LD	A4,DWTTP,A6	UHR LAUEFT ???
	RF(E)	ZEIT01	NEIN !
	LDKL	A4,-ZEIT
	ST*	A4,DWTTP,A6
	RF	ZEIT02
ZEIT01	EQU	*
	LDKL	A4,DWTTP
	ADR	A4,A6
	LDR	A1,A6
	CF	A15,SETIMP
	DATA	ZAUS,ZEIT 
	ST	A4,DWTTP,A6 
* 
ZEIT02	LDR	A4,A3	DANKE FUERS AUFHEBEN ! 
	LDK	A3,0 
	CF	A5,STREG	READ STATUS FROM PRINTER 
	LD	A3,DWTTP,A6 
	RF(E)	ZEIT03	ES LAUEFT KEINE UHR !!! 
	LDKL	A3,-ZEIT
	ST*	A3,DWTTP,A6	ZIEH DIE UHR WIEDER AUF
* 
ZEIT03	EQU	*
	ANK	A2,/FF	GET CHARACTER 
	CCK	A2,/5C5C	STRING TERMINATOR 
	RF(E)	GTSEND	YES 
	LCR	A3,A4	GET MASK RETURN CODE 
	ANR	A2,A3
	LDKL	A3,/3AC0	SHIFT LEFT CIRCULAR A2 
	LC	A3,1,A4	A3 TIMES
	EXR	A3	EXECUT SHIFT INSTRUCTION
	ORS	A2,DWTRC,A6	SAVE RETURN CODE TEMPORARILY 
	ADK	A4,2	INCREMENT ADRESS
	RB	GTST10	GET NEXT STATUS CHARACTER
GTSEND	EQU	*
	LD	A1,DWTTP,A6 
	RF(E)	ZEIT04	ES LAUEFT KEINE UHR 
	CM*	DWTTP,A6 
	CM	DWTTP,A6
ZEIT04	EQU	*
* 
* 
	LD	A1,DWTRC,A6	GET RETURN CODE 
	RTN	A5 
	 
* 
* 
* TIME OUT ROUTINE FUER LP 100
* 
* 
ZAUS	EQU	*
* 
	LDR	A6,A1	A6 WIEDERHERSTELLEN
	CM	DWTTP,A6
	LDKL	A5,DWTSB1 
	ADR	A5,A6
	RB	GTSTAT	MIT VIEL BAUCHWEH !!!!!!!!!!!!!!!!!
* 
* 
* 
	 
* 
*   THIS ROUTINE CONVERTS A BINARY VALUE TO ASCII CODE
* 
*	REGISTERS : 
*   A1= WORK REGISTER 
*   A4= BINARY INPUT
*   A2,A4= ASCII OUTPUT 
* 
* 
KONVER	EQU	*
*	BINARY TO DEC.
	LDK	A2,0	CLEAR A2
	CWK	A4,100	VALUE > 100 ? 
	RF(L)	KONV05	NO
	SUKL	A4,100
	LDKL	A2,/100	LEFT BYTE OF A2=X=1 
KONV05	CWK	A4,10	ARE THERE ANY TENS ? 
	RF(L)	KONV04	NO
	SUK	A4,10
	ADK	A2,/1	NUMBER OF TENS IN RIGHT B. OF A2=Y 
	RB	KONV05	NEXT 
KONV04	ORKL	A2,/3030	XY IN A2 
	ORK	A4,/30	Z IN A4 
	SRC	A2,8	YX IN A2
	LDR	A1,A2
	ANKL	A1,/FF00	KEEP Y IN A1 
	ANK	A2,/FF	KEEP X IN R. BYTE OF A2. ASCII
	ORR	A4,A1	YZ IN A1. ASCII
	RTN	A5 
	 
* 
*	RESET RECORVERY 
* 
RESREC	EQU	*
	LD	A4,DWTST,A6	DEVICE STATUS 
	ANKL	A4,/200	RECOVERY? 
	RF(E)	RESRTN	NO. 
	XRS	A4,DWTST,A6	YES. RESET RECOVERY BIT
RESRTN	RTN	A5	RETURN
	 
* 
* 
*	S E N D 
* 
*	THIS ROUTINE SENDS AN CONTROL SEQUENCE
*	TO THE PRINTER
* 
* 
*	AT ENTRY :
*	A2 = CONTROL SEQUENCE ADRESS
*	A3 = DWT-DISPLACEMENT TO LINE NO,CHAR.SET,ETC 
* 
* 
*	AT EXIT : 
*	A1,A2,A3 IS DESTROYED 
* 
* 
* 
SEND	EQU	*	SEND CONTROL SEQUENCE
	ST	A3,DWTDISP,A6	SAVE DWT-DISPLACEMENT 
	ST	A2,DWTSTR,A6	CONTROL SEQUENCE ADRESS
SEND10	EQU	*
	LD	A3,DWTSTR,A6	GET CONTROL SEQUENCE ADRESS
	LCR	A2,A3	GET CHARACTER
	ANK	A2,/FF	MAKE CHARACTER
	SLL	A2,8	END OF CONTROL SEQUENCE 
	RF(N)	SENDEND	YES,RETURN 
	CWK	A2,/3000	LINE NO,CHAR.SET,ETC
	RF(E)	SEND30	YES 
	SRL	A2,8	PREPARE TO SEND CHARACTER 
	CF	A5,OUTPUT	SEND CHARACTER
SEND20	EQU	*
	IM	DWTSTR,A6	INC. CONTROLSEQUENCE ADRESS 
	RB	SEND10	GET NEXT 
SEND30	EQU	*
	LD	A3,DWTDISP,A6	GET DWT-DISPLACEMENT
	ADR	A3,A6	GET PROPER VALUE 
	LCR	A2,A3	GET CHARACTER
	CF	A5,OUTPUT	SEND CHARACTER
	IM	DWTDISP,A6	INC. DISPLACEMENT ADRESS 
	RB	SEND20	GET NEXT 
SENDEND	EQU	* 
	RTN	A5 
	 
* 
* 
*	BINARY
* 
*	THIS ROUTINE CONVERTS ASCII CODE TO A BINARY VALUE
* 
*	REGISTERS:
*	A1= ASCII INPUT 
*	A2= WORK REGISTER 
*	A3= BINARY OUTPUT 
* 
* 
* 
BINARY	SUR	A3,A3	CLEAR A3 
	LDR	A2,A1	MAX. LINE ASCII
	SRL	A2,8 
	SUK	A2,/30 
	ADR	A3,A2
	ADR	A3,A2
	SLL	A2,3 
	ADR	A3,A2
	ANK	A1,/F
	ADR	A3,A1	MAX. LINE BINARY 
	RTN A5 
	 
LINNUM	EQU	*-2	NUMBER OF LINES
	DATA	/3132,/3135,/3138,/3234 
	DATA	/3235,/3330,/3333,/3335 
	DATA	/3336,/3438,/3530,/3531 
	DATA	/3630,/3636,/3730,/3732 
* 
* 
* 
* 
NCVTAB	EQU	*-2	NATIONAL CHARACTER VARIATION YABLE 
	DATA	/3031,/3032,/3033,/3034 
	DATA	/3035,/3036,/3037,/3038 
	DATA	/3039,/3130,/3131,/3131 
	DATA	/3133,/3134,/3135 
TAB	EQU	*	MASK TABLE FOR STATUS REPORT FROM PRINTER 
	DATA	/C0,/C0,/C0,/2CC	*	 
	DATA	/2CF,/4CB,/C0,/C0	*	
	DATA	/C0,/C0,/C0,/C0 
	DATA	/C0,/C0 
	END

Full view