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

⟦2e58a7b43⟧

    Length: 23650 (0x5c62)
    Notes: pts_type(SC)
    Names: »DRTP02.SC«

Derivation

└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
    └─⟦this⟧ »M:KMDV/DRTP02.SC« 
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
    └─⟦this⟧ »M:167D/DRTP02.SC« 

PTS(SC)

	IDENT DRTP02 	REL 8.2 78-09-15  870105040820 

* 
******************************************************* 
*                                                     * 
*   PHILIPS TERMINAL SYSTEM PTS                       * 
*                                                     * 
*   DRTP02 = DRIVER TELLER TERMINAL PRINTER           * 
*                                                     * 
*                                                     * 
* 
* 
* 
*                                                     * 
******************************************************* 
* 
*   THIS DRIVER HANDLES TELLER TERMINAL PRINTERS PTS 6221,
*   6222 OR 6223 CONNECTED TO CPU VIA CHLT OR CHRT
* 
* 
*   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  8 :        RECOVERY EXECUTED ON REQUEST
*   BIT 10 :        END OF JOURNAL TAPE, VOUCHER 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
* 
* 
* 
* 
*   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	TDISP	DISPATCHING FROM INTERRUPT 
	EXTRN	DISIOE	DISPATCH I/O ERROR
	EXTRN	DISEND	END I/O AND DISPATCH
	EXTRN	TENDIO	END I/O 
	EXTRN	OUTPUT	OUTPUT ONE CHARACTER
	EXTRN	LDREG	RESTORE REGISTERS
	EXTRN	STREG	STORE REGISTERS AND WAIT FOR INTERRUPT 
	EXTRN	SAVE8	SAVE REG. A1-A8
* 
* 
* 
*     DISPLACMENT IN DEVICE WORK TABLE DWT
* 
	EXTRN	DWTST	STATUS WORD
	EXTRN	DWTECB	ECB-ADDRESS 
	EXTRN	DWTOR	ORDER
	EJECT
************************
* CONDITIONAL ASSEMBLY *
************************
* 
* 
*   WHEN RECOVERY EXECUTED ON REQUEST RETURN CODE IS SET
*   BY SETTING X:A = 1
* 
* 
X:A	EQU	0 
RECOV	EQU	0 
* 
* 
*   JOURNAL TAPE MAY BE CUT/PERFORATED FOR PTS 6223 BY
*   SETTING X:B = 1 
* 
* 
X:B	EQU	0 
CUTPER	EQU	0
* 
* 
*   SPECIAL CHARACTER /13, /14 IS ACCEPTED BY SETTING X:C = 1 
*   AND X:D = 1 RESPECTIVLY 
* 
* 
X:C	EQU	0 
CHR13	EQU	0 
* 
* 
X:D	EQU	0 
CHR14	EQU	0 
* 
* 
*   PRINTING VOUCHER/PASSBOOK, IS COMPLETED IF
*   PRINT OBJECT IS REMOVED UNDER PRINTING IF X:E = 1 
* 
* 
X:E	EQU	0 
COMPL	EQU	0 
	EJECT
* 
* 
*   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	0
* 
*   TO INCREASE THE PRINTING SPEED IN THE SHB-PROJECT FOR 
*   LOCAL PRINTERS THE CONSTANT SHBDUM CAN BE SET TO 1. 
*   NOT ALLOWED FOR REMOTE PRINTERS.
* 
X:H	EQU	0 
SHBDUM	EQU	X:H
	EJECT
* 
* 
************* 
* CONSTANTS * 
************* 
* 
* 
CCERR	EQU	/4	RETURN CODE. CODE CHECK ERROR
PROUT	EQU	/20	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. 
VOCHA	EQU	/200	BIT #6 DWTTST;VOUCHER STATUS CH. NOT ALLOWED 
MESS	EQU	/400	BIT #5 DWTTST;TEST MESSAGE WRITTEN
* 
STX	EQU	/82	START OF TEXT BLOCK 
ETB	EQU	/97	END OF TEXT BLOCK 
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 * 
********************* 
* 
DWTBC	EQU	/3	BYTE COUNTER 
DWTSB2	EQU	/1E	STACK BASE 
DWTRLN	EQU	/22	REQUESTED LINE NUMBER
DWTALN	EQU	/23	ACTUAL LINE NUMBER 
* 
* 
********************* 
* 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
* 
*********** 
* BUFFERS * 
*********** 
* 
* 
BUF1	DATA	/0382,/0D1D	STX,CR1,APH 
	IFT	CUTPER=0 
BUF2	DATA	/0382	STX 
	XIF
	IFT	CUTPER=1 
BUF2	DATA	/0482	STX 
	XIF
	DATA	/091D,/2000	CR2,APH,SPACE 
BUF3	DATA	/0382,/091D	STX,CR2,APH 
BUF5	DATA	/021B,/8300	REL,ETX 
* 
* 
* 
**********
* TABLES *
**********
* 
* 
TPAD	EQU	*	ADDRESS BLOCK
	DATA	ACTP	ACTIVATIONDRIVER 
	DATA	IHTP	INTERRUPTHANDLER 
	DATA	RCTP	RECOVERY ROUTINE 
* 
*    TABLE TO GET ROOMLESS POINT
* 
ROMTAB	EQU	*
	DATA	/2122,/2627,/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	DISIOE	ILLEGAL ORDER 
* 
* 
ACT020	EQU	*
	SC	A4,DWTBC,A6	RESET BYTE COUNTER
	ADR	A3,A3	GET INDEX
	ABI	TPFUC,A3	EXECUTE ORDER 
TPFUC	DATA	TPDUMY,TPDUMY,TP200,TP405,ACT055,ACT050
	IFT CUTPER=1 
	DATA	TP700,TP750 
	XIF
	DATA	TP800,TP900 
	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
	RF(Z)	TP605	/2B = NO LF
ACT070	LDK	A3,1	ONE LF
ACT080	LC	A1,DWTRLN,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,DWTRLN,A6	SAVE REQUESTED LINE NUMBER 
	RF	TP605 
	EJECT
* 
* 
* 
*   ORDER 06 : PRINT JOURNAL
* 
* 
* 
TP200	LDKL	A3,BUF1	SEND CR1 AND ATTACH
TP210	EQU	* 
	LC	A1,DWTST,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 
	CF	A5,OUTPUT 
	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,DWTST,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
	IFT	SHBDUM=1 
	LDKL	A1,MESS	INDICATE MESSAGE PRINTED
	ORS	A1,DWTST,A6
	XIF
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. 
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 
	EJECT
* 
* 
*   CHECK STATUS AFTER LAST DUMMY CHARACTER 
* 
TPTST	EQU	* 
	SUK	A7,2	TEST STATUS : VOUCHER/PASSBOOK ?
	RF(NZ)	TST010	NO 
TST005	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
	ANK	A2,EOJT	END OF JOURNAL TAPE? 
	RF(NZ)	ENDIO	NO: PERFORM ENDIO 
TST015	ORK	A1,PROUT	SET RETURN CODE:
			END OF JOURNAL TAPE, VOUCHER OUT 
* 
* 
*   PERFORM END I/O AND GO TO DISPATCHER
* 
ENDIO	EQU	* 
	ABL	DISEND	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
* 
TP407	LDKL	A3,BUF3	SEND CR2 AND ATTACH
TP410	EQU	* 
	LDKL	A1,VOCHA
	ORS	A1,DWTST,A6	INDICATE VOUCHER STATUS CHANGE NOT ALLOWED 
	RB	TP210 
* 
	EJECT
* 
* 
* 
*   ORDER 06 : WRITE  VOUCHER/PASSBOOK
*         OB : POSITION LIFT AND WRITE
* 
* 
TP605	CF	A5,GRASP	GRASP VOUCHER 
	EJECT
* 
* 
*   SEND ELEVATOR UP/DOWN UNTIL ACTUAL
*   LINE NUMBER IS EQUAL REQUESTED
* 
* 
TP610	CC	A3,DWTRLN,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 
* 
	SC	A3,DWTALN,A6	SAVE ACTUAL LINE NUMBER
	ANK	A2,VOIN	VOUCHER IN ? 
	IFT	COMPL=0
	ABL(Z)	RCTP01	NO: ERROR RECOVERY 
	RB	TP610	YES: CHECK IF LIFT  POSITIONED
	XIF
	IFT	COMPL=1
	RB(NZ)	TP610	YES: CHECK IF LIFT IS POSITIONED
TP645	LDK	A1,PROUT	'VOUCHER OUT'
	ORS	A1,ECBRC,A8	INDICATE IN RETURN CODE
	RB	TPDUMY
	XIF
	EJECT
* 
* 
*   ORDER 06 AND 0B: LIFT IS POSITIONED 
*                    ATTACH AND PRINT 
* 
* 
TP650	EQU	* 
	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	A1,1	SET INDEX 
	RF	TP760 
TP750	EQU	* 
	LDK	A1,0	SET INDEX 
TP760	LC	A2,CPTAB,A1	GET CHAR 
	CF	A5,OUTPUT	SEND
	LDK	A2,LF1	LINE FEED 
	CF	A5,OUTPUT	SEND
	RB	TPDUMY
	XIF
* 
*   ORDER 37 AND 38   GRASP AND RELEASE VOUCHER/PASSBOOK
* 
TP800	EQU	* 
	CF	A5,GRASPA 
	RB	TPDUMY
TP900	EQU	* 
	CF	A5,RELEAS 
	RB	TPDUMY

	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 
PRB101	EQU	*
	LDK	A2,ETB 
	CF	A5,OUTPUT	SEND END OF MESSAGE 
	IFT	SHBDUM=0 
	LDK	A2,ETX 
	CF	A5,OUTPUT	WAIT FOR WHOLE BUFFER TO BE PRINTED 
	LDKL	A1,MESS	INDICATE MESSAGE PRINTED
	ORS	A1,DWTST,A6
	XIF
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
* 
* 
* 
	ANK	A2,VOIN	VOUCHER IN ? 
	RF(Z)	PRB200	NO. GO AND PRINT
	ADK	A5,4	RESET STACK POINTER 
	RB	TP405	SEND LIFT TO TOP AND RELEAS 
* 
* 
* 
*   PRINT VOUCHER/PASSBOOK
* 
* 
PRB110	ANK	A2,VOIN	VOUCHER IN ? 
	IFT	COMPL=0
	RF(Z)	RCTP01	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 
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	IM	DWTBC,A6	INCREMENT BYTE COUNTER 
	CC	A1,DWTBC,A6	COMPARE WITH ACTUAL TAB. POS. 
	RF(NG)	PRB125	PRINT
* 
* 
* 
	LDK	A2,/20	LOAD BLANK
	CF	A5,OUTPUT	SEND BLANKS OR DETACH 
	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 
	LD	A7,DWTOR,A6	GET ORDER 
	ANK	A7,/FF 
	RF	PRB245
* 
* 
* 
PRB230	IM	DWTBC,A6	INCREMENT BYTE COUNTER 
	LDR	A2,A7	GET OUTPUT CHARACTER 
PRB240	CF	A5,OUTPUT	SEND CHARACTER
PRB245	SUR	A3,A4	START OF BUFFER ADDRESS
	RB	PRB100
* 
* 
* 
	EJECT
* 
*   I H T P 
* 
*   INTERRUPT HANDLER: PROCESS OF INTERRUPT 
* 
* 
* 
IHTP	EQU	*
	LD	A4,DWTST,A6	GET STATUS
	RF(N)	RCTP10	NOT BUSY
	LDR	A7,A7	TEST STATUS;JOURNAL ?
	RF(Z)	IHTP20	YES 
	CWK	A7,2	TEST STATUS;VOUCHER/PASSBOOK ?
	RF(Z)	IHTP20	YES 
	LDR	A1,A1	RETURN CODE FROM CHANNEL UNIT
IHTP10	ABL(Z)	LDREG	NO RETURN CODE RESTORE REGISTERS
	IFT	RELEND=0 
	RF	RCTP10	ELSE GO TO DISPATCHER
	XIF
	IFT	RELEND=1 
	RF	IHTP30
	XIF
IHTP20	LDR	A1,A1
	ABL(Z)	TPTST 
IHTP30	EQU	*
	ABL	ENDIO
* 
* 
* 
	EJECT
* 
*   R C T P 
* 
*   RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT POWER ON
* 
RCTP	CF	A15,SAVE8	SAVE REG. A1-A8 
	LD	A2,DWTST,A6	GET STATUS
	RF(N)	RCTP05	NOT BUSY
* 
RCTP01	LDKL	A5,DWTSB2	STACK BASE
	ADR	A5,A6
	LDK	A2,REMOT	RESET PRINT BUFFER REMOTE AND LOCAL DUMMY 
	CF	A5,OUTPUT	SEND DUMMY
	IFT	COMPL=1
	LDR	A4,A4	STATUS CHANGE ?
	ABL(NE)	TP645
	XIF
RCTP05	EQU	*
	LDK	A2,0 
	SC	A2,DWTALN,A6	STORE 0 AS ACTUAL LINE NUMBER
	LDK	A2,LFF	LIFT TO TOP 
	CF	A5,OUTPUT 
	IFT	RECOV=1
	LDK	A2,/80	INDICATE POWER OFF
	ORS	A2,8,A8	SET RETURN CODE
	XIF
	LDK	A4,1	IND RECOVERY
	ABL	ACT005	START RECOVERY OF PRINTER 
RCTP10	ABL	TDISP	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 
GRASP	EQU	* 
	LDK	A3,0 
	LDK	A2,GRA	GRASP 
	CF	A5,OUTPUT 
	ANK	A2,VOIN	VOUCHER IN ? 
	RF(NZ)	GRAS10	YES
	LDK	A2,TETX	DUMMY AFTER GRASP
	CF	A5,OUTPUT 
	LDK	A2,LFF	LIFT TO TOP 
	CF	A5,OUTPUT 
	RTN	A5 
GRAS10	LC	A3,DWTALN,A6
	RTN	A5 
* 
* 
	EJECT
* 
* 
*   R E L E A S 
* 
*   SUBROUTINE TO SEND LIFT TO TOP AND RELEASE
* 
* 
* 
RELEAS	EQU	*
	LDK	A1,0 
	SC	A1,DWTALN,A6	SET ACTUAL LINE NUMBER TO 0
	LDKL	A3,BUF5	LIFT TO TOP AND RELEAS
	LDK	A2,LFF	LIFT TO TOP 
	CF	A5,OUTPUT 
	ANK	A2,VOIN	VOUCHER IN ? 
	RF(Z)	BUFRTN 
* 
*   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
	SUK	A4,1	DECREMENT COUNTER 
	RB(NZ)	BUFC10	NOT LAST CHARACTER 
BUFRTN	EQU	*
	RTN	A5	RETURN TO CALLER
* 
* 
* 
* 
* 
* 
	END

Full view