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

⟦d54d1135c⟧

    Length: 30186 (0x75ea)
    Notes: pts_type(SC)
    Names: »DRTP02.SC«

Derivation

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

PTS(SC)

	IDENT DRTP02 	REL 11.0 81-02-16 870105041100 

			=2, STATUS HANDLING CHANGED
			REL 11.0 81-01-30
			=1, BLOCK DEF. ADJUSTED
			REL 11.0 81-01-26
******************************************************* 
*                                                     * 
*   PHILIPS TERMINAL SYSTEM PTS                       * 
*                                                     * 
*   DRTP02 = DRIVER TELLER TERMINAL PRINTER           * 
*                                                     * 
*                                                     * 
* 
* 
* 
*                                                     * 
******************************************************* 
* 
*   THIS DRIVER HANDLES TELLER TERMINAL PRINTERS PTS 6221,
*   6222 OR 6223
* 
* 
*   THIS 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 DRIVER CONTAINS THE FOLLOWING SUBROUTINES:
* 
*   P R B U F :	  GET CHARACTERS FROM ECB-BUFFER AND SEND THEM
* 
*   B C D T B Y :   CONVERT TO BINARY FROM DECIMAL
* 
*   B U F C H R :	  SEND THE NUMBER OF CHARACTERS GIVEN IN FIRST
*		  CHARACTER IN OUTPUT BUFFER 
* 
*   G R A S P :     SEND GRASP TO VOUCHER 
* 
*   R E L E A S :   SEND LIFT TO TOP AND RELEASE
	EJECT
* 
*   THE FOLLOWING ORDERS ARE TREATED: 
* 
*   ORDER 00 :      TEST STATUS 
*   ORDER 06 :      WRITE 
*   ORDER 0B :      POSITION LIFT AND WRITE 
*   ORDER 22 :      CUT JOURNAL 
*   ORDER 26 :      PERFORATE JOURNAL 
*   ORDER 37 :      GRASP VOUCHER/PASSBOOK
*   ORDER 38 :      RELEASE VOUCHER/PASSBOOK
* 
*   THE FOLLOWING RETURN CODES ARE USED:
* 
*   BIT  0 :        REQUEST ERROR 
*   BIT  2 :        END OF JOURNAL TAPE, VOUCHER OUT
*   BIT  7 :        RECOVERY EXECUTED ON REQUEST
*   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
* 
*   SYSTEM ADAPTATION:
* 
*  BY MEANS OF CONDITIONAL ASSEMBLY THE FOLLOWING FUNCTIONS CAN 
*   BE EXCLUDED:
* 
*   RETURN CODE IS SET IF RECOVERY IS EXECUTED ON REQUEST 
*   CUT/PERFORATE JOURNAL TAPE  (PTS 6221,6222) 
*   ACCAPTANCE OF SPECIAL CHARACTER /13,/14 
*   COMPLETION OF REQUEST AT 'VOUCHER OUT' BEFORE MESSAGE IS WRITTEN
* 
* 
*   THE CHARACTER CODES FOR ROOMLESS POINT DIGITS IS DEFINED
*   IN A TABLE NAMED ROMTAB.STANDARD IS SHB CHARACTER SET 
* 
* 
	EJECT
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TPAD	ADDRESS BLOCK 
* 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	LDISP	DISPATCHING FROM INTERRUPT 
	EXTRN	LENDER	DISPATCH I/O ERROR
	EXTRN	LENDIS	END I/O AND DISPATCH
	EXTRN	TENDIO	END I/O 
	EXTRN	OUTPUT	OUTPUT ONE CHARACTER
	EXTRN	DWTST	STATUS 
	EXTRN	DWTECB	ECB ADDRESS 
	EXTRN	DWTOR	ORDER
	EXTRN	DWTSB2	STACK BASE 2 IN DWT 
	EXTRN	DWTDEV	DEVICE STATUS 
	EXTRN	STABLK	DEF. START OF BLOCK 
	EXTRN	ENDBLK	DEF. END OF BLOCK 
	EXTRN	NDSAV8	SAVE A3-A5, A7-A8 IN DWT	=2 
	EXTRN	NDREP	GET REGISTERS AND RETURN	=2
	EJECT
* 
*	ECB DISPLACEMENTS 
* 
	EXTRN	ECBBA	BUFFER ADDRESS 
	EXTRN	ECBRL	REQUESTED LENGTH 
	EXTRN	ECBEL	EFFECTIVE LENGTH 
	EXTRN	ECBRC	RETURN CODE
	EXTRN	ECBCW	CONTROL WORD 
	EJECT
************************
* CONDITIONAL ASSEMBLY *
************************
* 
* 
*   WHEN RECOVERY EXECUTED ON REQUEST RETURN CODE IS SET
*   BY SETTING X:A = 1
* 
* 
X:A	EQU	0 
RECOV	EQU	X:A 
* 
* 
*   JOURNAL TAPE MAY BE CUT/PERFORATED FOR PTS 6223 BY
*   SETTING X:B = 1 
* 
* 
X:B	EQU	0 
CUTPER	EQU	X:B
* 
* 
*   SPECIAL CHARACTER /13, /14 IS ACCEPTED BY SETTING X:C = 1 
*   AND X:D = 1 RESPECTIVLY 
* 
* 
X:C	EQU	0 
CHR13	EQU	X:C 
* 
* 
X:D	EQU	0 
CHR14	EQU	X:D 
* 
* 
*   PRINTING VOUCHER/PASSBOOK, IS COMPLETED IF
*   PRINT OBJECT IS REMOVED UNDER PRINTING IF X:E = 1 
* 
* 
X:E	EQU	0 
COMPL	EQU	X:E 
* 
* 
*   IN SITUATIONS WHERE PRINTER HARDWARE OR SELECTOR UNIT 
*   IS INACTIVE,END OF REQUEST MAY BE CHOSEN BY SETTING 
*   THE CONSTANT RELEND=1. RETURN CODE NOT OPERABLE IS SET
* 
* 
X:F	EQU	0 
RELEND	EQU	X:F
* 
* 
*   MMU BUFFER SIZE 
* 
* 
X:H	EQU	20
DVBLEN	EQU	X:H
* 
	EJECT
* 
* 
************* 
* CONSTANTS * 
************* 
* 
* 
CCERR	EQU	/4	RETURN CODE. CODE CHECK ERROR
PROUT	EQU	/2000	RETURN CODE. END OF JOURNAL TAPE
VOIN	EQU	/8	'VOUCHER IN' BIT IN DATA-REQUEST
EOJT	EQU	/4	'END OF JOURNAL' BIT IN DATA-REQ. 
WAICHA	EQU	/100	BIT #7 DWTDEV;WAIT FOR STATUS CHANGE
VOCHA	EQU	/200	BIT #6 DWTDEV;VOUCHER STATUS CH. NOT ALLOWED 
MESS	EQU	/400	BIT #5 DWTDEV;TEST MESSAGE WRITTEN
ETX	EQU	/03	LAST DUMMY
REMOT	EQU	/01	RESET PRINT BUFFER REMOTE 
TAB	EQU	/11	TABULATION CHAR IN BUFFER 
CR1	EQU	/0D	CR JOURNAL TAPE 
LF1	EQU	/18	LF JOURNAL TAPE 
CR2	EQU	/09	CR TALLY ROLL,VOUCHER/PASSBOOK
LF2	EQU	/19	LF TALLY ROLL 
LDO	EQU	/0B	LIFT DOWN 1 POSITION
LUP	EQU	/0A	LIFT UP ONE POSITION
LFF	EQU	/0C	LIFT TO TOP POSITION
GRA	EQU	/1A	WAIT FOR INSERTION OF VOUCHER/PASSBOOK
REL	EQU	/1B	RELEASE VOUCHER/PASSBOOK
APH	EQU	/1D	ATTACH PRINT HEAD 
RPH	EQU	/1E	RETURN PRINT HEAD 
TETX	EQU	/83	LAST DUMMY AFTER GRASP AND RELEASE 
* 
* 
********************* 
* DWT-DISPLACEMENTS * 
********************* 
* 
RLN	EQU	/4	REQUESTED LINE NUMBER
ALN	EQU	/5	ACTUAL LINE NUMBER 
PCO	EQU	/6	POSITION COUNTER 
* 
*********** 
* BUFFERS * 
*********** 
* 
* 
BUF1	DATA	/020D,/1D00	CR1,APH 
	IFT	CUTPER=0 
BUF2	DATA	/0209	CR2 
	XIF
	IFT	CUTPER=1 
BUF2	DATA	/0309	
	XIF
	DATA	/1D20	APH,SPACE 
BUF3	DATA	/0209,/1D00	CR2,APH 
				=2
* 
* 
* 
**********
* TABLES *
**********
* 
* 
	DATA	DVBLEN	MMU BUFFER SIZE
	DATA	2	DEVICE INDEX
TPAD	EQU	*	ADDRESS BLOCK
	DATA	ACTP	ACTIVATIONDRIVER 
	DATA	1	ABORT ROUTINE ADDRESS 
	DATA	IHTP	INTERRUPTHANDLER 
	DATA	RCTP	RECOVERY ROUTINE 
* 
*    TABLE TO GET ROOMLESS POINT
* 
ROMTAB	EQU	*
	DATA	/2122,/2426,/3B3C,/3E40,/5E5F 
* 
*   TABLE TO GET ACTUAL LF-CHARACTER
* 
* 
LFTAB	EQU	* 
	DATA	/1819	LINE FEED JOURNAL/TALLY ROLL
	IFT	CUTPER=1	
CPTAB	DATA	/1F0F	CODES FOR PERFORATE/CUT JOURNAL TAPE 
	XIF
TPTAB	EQU	*	ORDER TABLE 
	DATA	/0002,/0607,/080D 
	IFT CUTPER=1 
	DATA	/2226 
	XIF
	DATA	/393A 
TPLEN	EQU	*-TPTAB 
	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=TALLY,2=VOUCHER/PASSBOOK 
	LC	A1,DWTOR,A6	GET DWT INDEX 
	ANK	A1,7	MASK
	ADR	A7,A1	ADD DWT INDEX TO ORDER 
	SC	A7,DWTOR+1,A6	SAVE NEW ORDER IN DWT 
	LDK	A4,0	ACTIVATION
ACT005	LDK	A3,TPLEN-1 
ACT010	CC	A7,TPTAB,A3	FIND OUT IF LEGAL ORDER 
	RF(E)	ACT020	VALID ORDER 
	SUK	A3,1 
	RB(NN)	ACT010	TRY NEXT 
* 
	ABL	LENDER	ILLEGAL ORDER 
* 
* 
ACT020	LDK	A1,1 
	ST	A1,DWTDEV+PCO,A6	RESET BYTE COUNTER 
	ADR	A3,A3	GET INDEX
	ABI	TPFUC,A3	EXECUTE ORDER 
TPFUC	DATA	TPTEST,TPTEST,TP200,TP405,ACT055,ACT050	 
	IFT CUTPER=1 
	DATA	TP700,TP750 
	XIF
	DATA	TP800,TP900 
	EJECT			 
*				 
*				 
*   ORDER 00: TEST  		
*              IMPROVED TEST OF BOTH SUM OFF AND PRINTER NOT THERE	 
*				 
*				 
*				 
*				 
TPTEST	EQU	*
	LDK	A2,/5	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP1	JMP IF ERROR
	LDK	A2,/02	SEND CHAR /02	
	CF	A5,OUTPUT		 
	RF(NZ)	ERTP1	JMP IF ERROR
	LDK	A2,0	SEND CHAR /00=END OF TEST	
	CF	A5,OUTPUT		 
	RF(NZ)	ERTP1	JMP IF ERROR
	RF	TPDUMY		
	EJECT
* 
* 
*   ORDER 06,0B: WRITE VOUCHER/PASSBOOK 
*                GET REQUESTED LINE NUMBER AND SAVE IN DWT
* 
* 
* 
ACT050	LD	A1,ECBCW,A8	GET LINE NUMBER FROM CONTROL WORD IN ECB
	RF	ACT085
* 
ACT055	LD	A3,ECBBA,A8	GET BUFFER ADDRESS
	LC	A3,1,A3	GET CONTROL CHARACTER 
	ANK	A3,/FF	REQUESTED LINE STEPS
	SUK	A3,/39 
	RF(G)	ACT070	> /39 = ONE LF
	ADK	A3,/9
	RF(NE)	ACT060
	LDK	A3,2	/30 = TWO LF
	RF	ACT080
ACT060	RF(G)	ACT080	/31-/39 = 1-9 LF
	ADK	A3,/5
	ABL(Z)	TP605	/2B = NO LF 
ACT070	LDK	A3,1	ONE LF
ACT080	LC	A1,DWTDEV+RLN,A6	GET LINE NUMBER FROM DWT 
	SUR	A1,A3	GET REQUESTED LINE POSITION
ACT085	RF(NN)	ACT090	LINE POSITION LESS ZERO ?
	LDK	A1,0	YES; SET LINE POSITION ZERO 
* 
ACT090	LDR	A4,A4	RECOVERY ? 
	RF(NZ)	TP605	YES 
	SC	A1,DWTDEV+RLN,A6	SAVE REQUESTED LINE NUMBER 
	RF	TP605 
	EJECT
* 
* 
* 
*   ORDER 06 : PRINT JOURNAL
* 
* 
* 
TP200	LDKL	A3,BUF1	SEND CR1 AND ATTACH
TP210	EQU	* 
				=2
	LD	A2,ECBRL,A8 
	ADK	A2,/F	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
ERTP1	RF(NZ)	ERTP2	JMP IF ERROR 
	LC	A1,DWTDEV,A6	GET LEFT BYTE IN STATUS WORD 
	ANK	A1,4	TEXT MESSAGE WRITTEN ?
	RF(NE)	TP220	YES; COMPLETE REQUEST 
	LD	A1,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A1,3	REQUESTED LENGTH 0-2 ?
	RF(N)	TP230	YES; COMPLETE REQUEST
	RF(P)	TP215
	LD	A1,2,A8	BUFFER ADDRESS
	LC	A2,2,A1	THIRD CHARACTER 
	CCK	A2,/2020	CONTROL CHARACTER 
	RF(NL)	TP215 
	RF	TP220 
TP215	EQU	* 
	CF	A5,BUFCHR	SEND BUFFER 
	CF	A5,PRBUF	PRINT ECB-BUFFER 
TP220	EQU	* 
	LDK	A1,0 
TP230	LDKL	A2,/FDFF	VOUCHER STATUS CHANGE ALLOWED 
	ANS	A2,DWTDEV,A6 
	EJECT
* 
* 
*   ECB-BUFFER IS WRITTEN 
* 
*   SEND LINE FEED IF JOURNAL OR TALLY
* 
* 
TPLF	EQU	*
	LDR	A1,A1
	RF(NE)	TPLF10
	LDK	A2,RPH	DETACH PRINT HEAD 
	CF	A5,OUTPUT	SEND
	RF(NZ)	ERTP2	JMP IF ERROR
TPLF10	EQU	*
	SUK	A7,8 
	RF(NN)	TPL010	NOT JOURNAL AND TALLY
	ADK	A7,2	GET INDEX TABLE 
	LC	A2,LFTAB,A7	GET LF CHARACTER
	CF	A5,OUTPUT	SEND LF CHAR. 
	RF(NZ)	ERTP2	JMP IF ERROR
TPL010	LD	A1,ECBRL,A8	GET REQUESTED LENGTH
	ST	A1,ECBEL,A8	STORE EFFECTIVE LENGTH
	EJECT
* 
* 
*   COMMON END OF PRINT 
* 
* 
*   SEND LAST DUMMY CHARACTER 
* 
TPDUMY	EQU	*
	LDK	A2,ETX 
	CF	A5,OUTPUT 
	RF(NZ)	ERTP2	JMP IF ERROR
	EJECT
* 
* 
*   CHECK STATUS AFTER LAST DUMMY CHARACTER 
* 
TPTST	EQU	* 
	SUK	A7,2	TEST STATUS : VOUCHER/PASSBOOK ?
	RF(NZ)	TST010	NO 
TST005	LC	A2,DWTDEV+1,A6	GET STATUS	=2
	ANK	A2,VOIN	VOUCHER OUT ?
	RF(NZ)	ENDIO	NO
	RF	TST015	YES
* 
TST010	SUK	A7,4 
	IFT	CUTPER=0 
	RF(G)	ENDIO	NOT TEST STATUS, JOURNAL 
	XIF
	IFT	CUTPER=1 
	RF(G)	TST020	NOT TEST STATUS, JOURNAL
TST012	EQU	*
	XIF
	LC	A2,DWTDEV+1,A6	GET STATUS	=2
	ANK	A2,EOJT	END OF JOURNAL TAPE? 
	RF(NZ)	ENDIO	NO: PERFORM ENDIO 
TST015	ORKL	A1,PROUT	SET RETURN CODE: 

			END OF JOURNAL TAPE, VOUCHER OUT 
* 
*   PERFORM END I/O AND GO TO DISPATCHER
* 
ENDIO	EQU	* 
	LDR	A4,A1	SAVE RETURN CODE 
	CF	A5,ENDBLK	END OF BLOCK
ERTP2	RF(NZ)	ERTP3	JMP IF ERROR 
	LDKL	A1,/FBFF	RESET MESSAGE WRITTEN IND. 
	ANS	A1,DWTDEV,A6 
	LDR	A1,A4	RESTORE RETURN CODE
	ABL	LENDIS	PERFORM END I/O AND GO TO DISPATCHER
* 
	IFT	CUTPER=1 
TST020	SUK	A7,16
	RB(L)	ENDIO	VOUCHER/PASSBOOK 
	SUK	A7,4 
	RB(G)	ENDIO	GRASP,RELEASE
	RB	TST012	CUT,PERFORATE
	XIF
	EJECT
* 
* 
* 
*   ORDER 06 : PRINT TALLY ROLL 
* 
* 
* 
TP405	CF	A5,RELEAS	ERROR. VOUCHER IN
				=2(=1)
* 
TP407	LDKL	A3,BUF3	SEND CR2 AND ATTACH
TP410	EQU	* 
	LDKL	A1,VOCHA
	ORS	A1,DWTDEV,A6	INDICATE VOUCHER STATUS CHANGE NOT ALLOWED
	RB	TP210 
	EJECT
* 
* 
* 
*   ORDER 06 : WRITE  VOUCHER/PASSBOOK
*         OB : POSITION LIFT AND WRITE
* 
* 
TP605	EQU	*		 
	LDK	A2,5	BLOCK LENGTH	=2 
	CF	A5,STABLK	START OF BLOCK	=2 
	RF(NZ)	ERTP3	JMP IF ERROR	=2 
	CF	A5,GRASP	GRASP VOUCHER	=2 
	LC	A2,DWTDEV+RLN,A6	GET REQUESTED LINE NO.	=2
	ANK	A2,/FF	CLEAN	=2
	SUR	A2,A3	GET /REQ.-ACT./ LINE NO. 
	RF(NN)	TP608 
				=2
	NGR	A2,A2		=2
TP608	ADK	A2,/9 
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP3	JMP IF ERROR
				=2
	EJECT
* 
* 
*   SEND ELEVATOR UP/DOWN UNTIL ACTUAL
*   LINE NUMBER IS EQUAL REQUESTED
* 
* 
TP610	CC	A3,DWTDEV+RLN,A6	COMPARE LINE NUMBER 
	RF(E)	TP650	EQUAL
	RF(G)	TP630	SEND ELEVATOR UP 
	LDK	A2,LDO	SEND ELEVATOR DOWN
	ADK	A3,1	INCREMENT ACTUAL LINE NUMBER
	RF	TP640 
TP630	LDK	A2,LUP	SEND ELEVATOR UP 
	SUK	A3,1	DECREMENT ACTUAL LINE NUMBER
* 
TP640	CF	A5,OUTPUT	SEND LIFT CHAR 
	RF(NZ)	ERTP3	JMP IF ERROR
* 
	SC	A3,DWTDEV+ALN,A6	SAVE ACTUAL LINE NUMBER
	LC	A2,DWTDEV+1,A6	GET STATUS	=2
	ANK	A2,VOIN	VOUCHER IN ? 
	IFT	COMPL=0
	ABL(Z)	RCTP	NO: ERROR RECOVERY 
	RB	TP610	YES: CHECK IF LIFT  POSITIONED
	XIF
	IFT	COMPL=1
	RB(NZ)	TP610	YES: CHECK IF LIFT IS POSITIONED
TP645	LDKL	A1,PROUT	'VOUCHER OUT' 
	ORS	A1,ECBRC,A8	INDICATE IN RETURN CODE
	LDK	A2,RPH	RETURN PRINTHEAD
	CF	A5,OUTPUT 
	RF(NZ)	ERTP3	JMP IF ERROR
	RB	TPDUMY
	XIF
	EJECT
* 
* 
*   ORDER 06 AND 0B: LIFT IS POSITIONED 
*                    ATTACH AND PRINT 
* 
* 
TP650	EQU	* 
	CF	A5,ENDBLK	END OF BLOCK
ERTP3	RF(NZ)	ERTP4	JMP IF ERROR 
	LDKL	A3,BUF2	SEND CR2 AND ATTACH 
	RB	TP410	PRINT ECB-BUFFER
	EJECT
	IFT CUTPER=1 
* 
*   ORDER 22 AND 26   CUT AND PERFORATE JOURNAL 
* 
TP700	EQU	* 
	LDK	A3,1	SET INDEX 
	RF	TP760 
TP750	EQU	* 
	LDK	A3,0	SET INDEX 
TP760	LDK	A2,/4	BLOCK LENGTH
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP4	JMP IF ERROR
	LC	A2,CPTAB,A3	GET CHAR
	CF	A5,OUTPUT	SEND
	RF(NZ)	ERTP4	JMP IF ERROR
	LDK	A2,LF1	LINE FEED 
	CF	A5,OUTPUT	SEND
	RF(NZ)	ERTP4	JMP IF ERROR
	RB	TPDUMY
	XIF
* 
*   ORDER 37 AND 38   GRASP AND RELEASE VOUCHER/PASSBOOK
* 
TP800	EQU	* 
	LDK	A2,/9	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP4	JMP IF ERROR
	CF	A5,GRASPA 
TP850	LDK	A2,1	BLOCK LENGTH	=2
	CF	A5,STABLK	START OF BLOCK	=2 
	RF(NZ)	ERTP4	JMP IF ERROR	=2 
	RB	TPDUMY
TP900	EQU	* 
	CF	A5,RELEAS 
	RB	TP850		=2 

	EJECT
* 
*   P R B U F 
* 
*   SUBROUTINE TO SEND CHARACTERS FROM ECB-BUFFER UNTIL REQUESTED 
*   LENGTH IS REACHED 
* 
PRBUF	LD	A4,ECBRL,A8	GET REQUESTED LENGTH 
	SUK	A4,2	ADJUST REQUESTED LENGTH 
	LD	A3,ECBBA,A8	BUFFER ADDRESS
*   SKIP PRECEDING SPACES IN BUFFER 
	ADK	A3,2 
PRB010	LCR	A1,A3	GET CHARACTER
	CCK	A1,/2020 
	RF(NE)	PRB050	NOT BLANK
	ADK	A3,1	BLANK 
	SUK	A4,1 
	RB	PRB010	GET NEXT CHARACTER 
*   LOOK IF CARRIAGE RETURN CHAR (/09,/0D) LAST IN BUFFER 
PRB050	LDR	A1,A3	GET ADDRESS TO 
	ADR	A1,A4	LAST CHARACTER IN BUFFER 
	LC	A1,-1,A1	GET CHAR 
	CCK	A1,/0909	CARRIAGE RETURN - CR2 ? 
	RF(E)	PRB060	YES 
	CCK	A1,/0D0D	CARRIAGE RETURN - CR1 ? 
	RF(E)	PRB060	YES 
	LDK	A1,0	DUMMY CHARACTER 
	RF	PRB070
PRB060	SUK	A4,1	DECREMENT REQUESTED LENGTH
PRB070	ST	A1,ECBEL,A8	SAVE CHAR. IN ECB 
* 
* 
PRB100	SUK	A4,1	DECREMENT REQUESTED LENGTH
	RF(NN)	PRB105	PRINT BUFFER 
	LD	A2,ECBEL,A8	GET CARRIAGE RETURN CHAR (/09,/0D)
	RF(E)	PRB101 
	CF	A5,OUTPUT	SEND CHAR 
	RF(NZ)	ERTP4	JMP IF ERROR
PRB101	EQU	*
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	ERTP5	JMP IF ERROR
	LDK	A2,1	BLOCK LENGTH
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP5	JMP IF ERROR
	LDK	A2,ETX 
	CF	A5,OUTPUT	WAIT FOR WHOLE BUFFER TO BE PRINTED 
ERTP4	RF(NZ)	ERTP5	JMP IF ERROR 
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	ERTP5	JMP IF ERROR
	LDK	A2,3	BLOCK LENGTH
	CF	A5,STABLK	START OF BLOCK
	RF(NZ)	ERTP5	JMP IF ERROR
	LDKL	A1,MESS	INDICATE MESSAGE PRINTED
	ORS	A1,DWTDEV,A6 
PRB102	RTN	A5 
	EJECT
* 
* 
* 
*   PRINT BUFFER
* 
* 
PRB105	EQU	*
	ADR	A3,A4	ADDRESS TO CHARACTER TO BE PRINTED 
	SUK	A7,7	CHECK ORDER 
	RF(L)	PRB200	PRINT JOURNAL 
	RF(G)	PRB110	PRINT VOUCHER 
	EJECT
* 
* 
* 
*   PRINT TALLY ROLL
* 
* 
* 
	LC	A2,DWTDEV+1,A6	GET STATUS	=2
	ANK	A2,VOIN	VOUCHER IN ? 
	RF(Z)	PRB200	NO. GO AND PRINT
	ADK	A5,4	RESET STACK POINTER 
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	ERTP5	JMP IF ERROR
	ABL	TP405	SEND LIFT TO TOP AND RELEAS
* 
* 
* 
*   PRINT VOUCHER/PASSBOOK
* 
* 
PRB110	LC	A2,DWTDEV+1,A6	GET STATUS	=2
	ANK	A2,VOIN	VOUCHER IN ? 
	IFT	COMPL=0
	RF(Z)	RCTP	ERROR .VOUCHER NOT IN 
	XIF
	IFT	COMPL=1
	RB(Z)	TP645
	XIF
	LDR	A1,A4	COPY REQUESTED LENGTH
	SUK	A1,2	R.L. < 3? 
	RF(N)	PRB200	YES: NO TABULATION
	LDK	A1,TAB 
	CC	A1,-2,A3	TABULATION?
	RF(NE)	PRB200	NO 
	EJECT
* 
* 
*   IF TABULATION CHARACTER: DETACH PRINT HEAD, 
*   SEND CHARACTERS UNTIL TABULATION POSITION IS REACHED
*   AND ATTACH PRINT HEAD 
* 
* 
PRB115	LDK	A2,RPH	DETACH PRINT HEAD 
	CF	A5,OUTPUT	SEND DETACH 
	RF(NZ)	ERTP5	JMP IF ERROR
PRB117	LC	A2,-1,A3	GET 1ST TAB POS CHAR 
	LCR	A1,A3	GET 2ND TAB POS CHAR 
	ANK	A1,/F	LINE UNIT
	SLL	A2,4 
	ANK	A2,/F0	LINE DECADE 
	ORR	A1,A2	DECIMAL LINE NUMBER
	CF	A5,BCDTBY	CONVERT TO BINARY 
PRB120	EQU	*
	CW	A1,DWTDEV+PCO,A6	COMPARE WITH ACTUAL TAB. POS.
	RF(NG)	PRB125	PRINT
* 
* 
	IM	DWTDEV+PCO,A6	INCREMENT POSITION COUNTER
	LDK	A2,/20	LOAD BLANK
	CF	A5,OUTPUT	SEND BLANKS OR DETACH 
ERTP5	RF(NZ)	ERTP6	JMP IF ERROR 
	RB	PRB117
* 
* 
* 
PRB125	SUK	A4,2	DECREMENT REQUESTED LENGTH
	SUK	A3,2	DECREMENT BUFFER ADDRESS
	LDK	A2,APH	ATTACH
	RF	PRB240	SEND ATTACH
	EJECT
* 
* 
* 
*   GET OUTPUT CHARACTER FROM BUFFER. CHECK IF
*   - ROOMLESS POINT
*   - ILLEGAL CHARACTER 
*   - SPECIAL CHARACTER (/13,/14) 
* 
PRB200	EQU	*
PRB205	LCR	A7,A3	LOAD OUTPUT CHARACTER
	CCK	A7,/AEAE	ROOMLESS POINT ?
	RF(NE)	PRB210	NO 
	SUK	A3,1	DECREMENT BUFFER POINTER
	SUK	A4,1 
	LCR	A7,A3	GET OUTPUT CHARACTER 
	ANK	A7,/F	MASK 
	LC	A7,ROMTAB,A7	GET CODE IN TABLE
* 
* 
* 
PRB210	CCK	A7,/2020	ILLEGAL CHARACTER ? 
	RF(L)	PRB225	YES 
PRB215	CCK	A7,/5F5F	ILLEGAL CHARACTER ? 
	RF(NG)	PRB230	NO 
* 
* 
PRB225	EQU	*
	IFT	CHR13=1
	CCK	A7,/1313	SPECIAL CHARACTER ? 
	RF(E)	PRB230	YES 
	XIF
	IFT	CHR14=1
	CCK	A7,/1414	SPECIAL CHARACTER ? 
	RF(E)	PRB230	YES 
	XIF
* 
	LDK	A1,CCERR	CODE CHECK ERROR
	ORS	A1,ECBRC,A8	STORE IN RETURN CODE 
	RF	PRB245
* 
* 
* 
PRB230	IM	DWTDEV+PCO,A6	INCREMENT BYTE COUNTER
	LDR	A2,A7	GET OUTPUT CHARACTER 
PRB240	CF	A5,OUTPUT	SEND CHARACTER
	RF(NZ)	ERTP6	JMP IF ERROR
PRB245	SUR	A3,A4	START OF BUFFER ADDRESS
	LD	A7,DWTOR,A6	GET ORDER 
	ANK	A7,/FF 
	RB	PRB100
* 
* 
* 
	EJECT
* 
*   I H T P 
* 
*   INTERRUPT HANDLER: PROCESS OF INTERRUPT 
* 
* 
* 
IHTP	EQU	*
				=2
	LD	A3,DWTDEV,A6	TERMINAL DEVICE STATUS	=2
	LDR	A4,A3	SAVE OLD STATUS	=2 
	SC	A2,DWTDEV+1,A6	STORE NEW STATUS IN DWT	=2 
	ANKL	A4,VOCHA	STATUS CHANGE ALLOWED ?	=2 
	RF(Z)	IHTP10	YES	=2
	XRS	A4,DWTDEV,A6	RESET BIT	=2
	XRR	A3,A2	COMPARE OLD AND NEW STATUS	=2
	ANK	A3,VOIN	VOUCHER STATUS CHANGED ?	=2
	RF(Z)	RCTP10	NO, GO TO DISPATCHER	=2 
	LDK	A4,/08	INDICATE STATUS CHANGE	=2 
	RF	RCTP	FOR RECOVERY ROUTINE	=2
IHTP10	LDR	A4,A3	OLD STATUS	=2
	ANKL	A4,WAICHA	WAITING FOR STATUS CHANGE ?	=2
	RF(Z)	RCTP10	NO, GO TO DISPATCHER	=2 
	XRR	A3,A2	COMPARE OLD AND NEW STATUS	=2
	ANK	A3,VOIN	VOUCHER STATUS CHANGED ?	=2
	RF(Z)	RCTP10	NO, GO TO DISPATCHER	=2 
	XRS	A4,DWTDEV,A6	RESET 'WAIT FOR STATUS' BIT	=2
	ABL	NDREP	GET A3-A5,A7-A8 AND RET VIA A5	=2
* 
* 
* 
	EJECT
* 
*   R C T P 
* 
*   RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT POWER ON
* 
RCTP	EQU	*
* 
	LDKL	A2,/FFFF-WAICHA		=2 
	ANS	A2,DWTDEV,A6	RESET 'WAIT FOR STATUS' BIT	=2
	LDKL	A2,/7FFF	IND DEVICE BUSY	 
	ANS	A2,DWTST,A6		
	LDKL	A5,DWTSB2	STACK BASE
	ADR	A5,A6
	LDK	A2,/3	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
ERTP6	RF(NZ)	ERTP	JMP IF ERROR
	LD	A2,DWTECB,A6		
	RF(Z)	RCTP05	REQUEST NOT RUNNING	
* 
	LDK	A2,REMOT	RESET PRINT BUFFER REMOTE AND LOCAL DUMMY 
	CF	A5,OUTPUT	SEND DUMMY
	RF(NZ)	ERTP	JMP IF ERROR 
	IFT	COMPL=1
	ANK	A4,/08	STATUS CHANGE ? 
	RF(Z)	RCTP05	NO
	ABL	TP645	COMPLETE REQUEST 
	XIF
RCTP05	EQU	*
	LDK	A2,0 
	SC	A2,DWTDEV+ALN,A6	STORE 0 AS ACTUAL LINE NUMBER
	LDK	A2,LFF	LIFT TO TOP 
	CF	A5,OUTPUT 
	RF(NZ)	ERTP	JMP IF ERROR 
	LD	A2,DWTECB,A6		
	RF(NZ)	RCTP07	REQUEST RUNNING	 
	LDK	A2,ETX	SEND LAST DUMMY TO STOP TIMER	
	CF	A5,OUTPUT		 
	RF(NZ)	ERTP	JMP IF ERROR 
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	ERTP	JMP IF ERROR 
	ABL	LENDIS		 
RCTP07	EQU	*		
	IFT	RECOV=1
	LDKL	A2,/100	INDICATE POWER OFF
	ORS	A2,8,A8	SET RETURN CODE
	XIF
	LDK	A4,1	IND RECOVERY
	CF	A5,ENDBLK	END OF BLOCK
	RF(NZ)	ERTP	JMP IF ERROR 
	LD	A7,DWTOR,A6	SET ORDER IN A7 
	ANK	A7,/FF 
	ABL	ACT005	START RECOVERY OF PRINTER 
RCTP10	ABL	LDISP	GO TO DISPATCHER 
	EJECT
* 
*   B C D T B Y 
* 
*   SUBROUTINE TO CONVERT TO BINARY FROM DECIMAL
* 
* 
* 
BCDTBY	LDR	A2,A1	PUT DECIMAL NUMBER IN A2 
BCDTB1	SUK	A2,/10	
	RF(N)	BCDTB2	END 
	SUK	A1,6	DECREMENT BY 6
	RB	BCDTB1	 
BCDTB2	RTN	A5	RETURN TO CALLER
* 
* 
* 
* 
* 
*   G R A S P 
* 
*   SUBROUTINE TO SEND GRASP TO VOUCHER/PASSBOOK
* 
* 
GRASPA	EQU	*
	LDK	A2,LFF	LIFT TO TOP 
	CF	A5,OUTPUT 
	RF(NZ)	ERTP	JMP IF ERROR 
GRASP	EQU	* 
	LDK	A3,0 
	LDK	A2,GRA	GRASP 
	CF	A5,OUTPUT 
	RF(NZ)	ERTP	JMP IF ERROR 
	LC	A4,DWTDEV+1,A6	GET STATUS	=2
	ANK	A4,VOIN	VOUCHER IN ?	=2
				=2
	RF(Z)	COM010	NO	=2 
	LC	A3,DWTDEV+ALN,A6	GET ACTUAL LINE NO.	=2 
GRAS10	CF	A5,ENDBLK	END OF BLOCK	=2 
	RF(NZ)	ERTP	JMP IF ERROR	=2
	RTN	A5	RETURN	=2 
* 
* 
* 
* 
*	ERROR ROUTINE FOR STABLK,OUTPUT AND ENDBLK
* 
*	INPUT : A1 = RETURN CODE
* 
ERTP	EQU	*
	LDK	A4,0 
	LD	A7,DWTOR,A6	SET ORDER IN A7 
	ANK	A7,/FF 
	RF(NZ)	ERTP20	ORDER /00 ?
ERTP15	LDK	A1,1	YES,SET RETURN CODE 
	ABL	LENDIS	NOT OPER. & END OF REQUEST
ERTP20	ANK	A1,/1A	SOFTW. TIME OUT,LRC OR LINK ERROR 
	RB(NZ)	RCTP	YES RECOVERY 
	IFT	RELEND=0 
	ABL	LDISP	DISPATCH 
	XIF
	IFT	RELEND=1 
	RB	ERTP15	END OF REQ.
	XIF
	EJECT
* 
* 
*   R E L E A S 
* 
*   SUBROUTINE TO SEND LIFT TO TOP AND RELEASE
* 
* 
* 
RELEAS	EQU	*
	LDK	A2,/4	BLOCK LENGTH 
	CF	A5,STABLK	START OF BLOCK
	RB(NZ)	ERTP	JMP IF ERROR 
	LDK	A1,0 
	SC	A1,DWTDEV+ALN,A6	SET ACTUAL LINE NUMBER TO 0
	LDK	A2,LFF	LIFT TO TOP 
	CF	A5,OUTPUT 
	RB(NZ)	ERTP	JMP IF ERROR 
	LC	A4,DWTDEV+1,A6	GET STATUS	=2
	ANK	A4,VOIN	VOUCHER IN ?	=2
	RB(Z)	GRAS10	NO, RETURN	=2 
	LDK	A2,REL	RELEASE	=2
	CF	A5,OUTPUT		=2 
	RB(NZ)	ERTP	JMP IF ERROR	=2
* 
*   COMMON END FOR GRASP AND RELEASE SUBROUTINES
*   WHEN A CHANGE OF VOUCHER STATUS IS WANTED 
* 
COM010	CF	A5,ENDBLK	END OF BLOCK	=2 
	RB(NZ)	ERTP	JMP IF ERROR	=2
	LDK	A2,1	BLOCK LENGTH	=2 
	CF	A5,STABLK	START OF BLOCK	=2 
	RB(NZ)	ERTP	JMP IF ERROR	=2
	LDK	A2,TETX	DUMMY AFTER GRASP AND REL	=2 
	CF	A5,OUTPUT		=2 
	RB(NZ)	ERTP	JMP IF ERROR	=2
	CF	A5,ENDBLK	END OF BLOCK	=2 
	RB(NZ)	ERTP	JMP IF ERROR	=2
	LC	A2,DWTDEV+1,A6	GET STATUS	=2
	XRR	A4,A2	VOUCHER ST. CHANGED SINCE LAST?	=2 
	RF(NZ)	COM020	YES, DON'T WAIT	=2 
	CF	A5,WAIT	WAIT FOR STATUS	=2
COM020	EQU	*		=2
	RTN	A5	RETURN WITH NEW STATUS	=2 
* 
*   B U F C H R 
* 
*   SUBROUTINE TO OUTPUT A NUMBER OF CHARACTERS GIVEN IN
*   FIRST CHARACTER IN OUTPUT BUFFER
* 
* 
BUFCHR	LCR	A4,A3	GET NUMBER OF OUTPUT CHARACTERS
	ANK	A4,/FF	MASK
BUFC10	ADK	A3,1	INCREMENT BUFFER POINTER
	LCR	A2,A3	GET OUTPUT CHARACTER 
	CF	A5,OUTPUT	SEND CHARACTER
	RB(NZ)	ERTP	JMP IF ERROR 
	SUK	A4,1	DECREMENT COUNTER 
	RB(NZ)	BUFC10	NOT LAST CHARACTER 
BUFRTN	EQU	*
	RTN	A5	RETURN TO CALLER
* 
* 
*   W A I T 
* 
*   SUBROUTINE USED TO INITIATE WAIT FOR CHANGE 
*   IN VOUCHER STATUS.
*   RETURN AFTER SUBROUTINE IS MADE THROUGH 
*   INTERRUPT HANDLER WHEN STATUS IS CHANGED. 
* 
WAIT	EQU	*	=2 
	INH			=2 
	CF	A15,NDSAV8	SAVE A3-A5,A7-A8 IN DWT	=2 
	LDKL	A3,WAICHA		=2 
	ORS	A3,DWTDEV,A6	INDICATE 'WAIT FOR STATUS'	=2 
	ABL	LDISP	DISPATCH	=2
* 
* 
* 
* 
	END

Full view