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

⟦2c063bdb5⟧

    Length: 20492 (0x500c)
    Notes: pts_type(SC)
    Names: »DRTP01.SC«

Derivation

└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/DRTP01.SC« 

PTS(SC)

	IDENT DRTP01 	REL 8.2 78-09-15  870105040820 

* 
******************************************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   DRTP01 = 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 FROM BINARY TO DECIMAL
* 
*   B U F C H R :	  SEND THE NUMBER OF CHARACTERS GIVEN IN FIRST
*		  CHARACTER IN OUTPUT BUFFER 
* 
	EJECT
* 
*   THE FOLLOWING ORDERS ARE TREATED: 
* 
*   ORDER 00 :	  TEST STATUS
*   ORDER 06 :	  WRITE JOURNAL
*   ORDER 07 :	  WRITE TALLY ROLL 
*   ORDER 08 :	  WRITE VOUCHER/PASSBOOK 
* 
* 
*   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:
* 
*   ORDER 07  (PTS 6223)
*   CUT/PERFORATE JOURNAL TAPE  (PTS 6221,6222) 
*   ACCAPTANCE OF SPECIAL CHARACTER /13,/14 
* 
* 
*   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
* 
* 
************* 
* CONSTANTS * 
************* 
* 
* 
CCERR	EQU	/4	RETURN CODE. CODE CHECK ERROR
PROUT	EQU	/20	RETURN CODE. END OF JOURNAL TAPE
VOCHIN	EQU	/200	RETURN CODE. VOUCHER IN 
THRPUT	EQU	/2	THROUGHPUT ERROR
* 
* 
VOIN	EQU	/8	VOUCHER IN BIT IN DATA-REQUEST
EOJT	EQU	/4	END OF JOURNALTAPE BIT IN DATA-REQ. 
STX	EQU	/82	START OF TEXT BLOCK 
ETB	EQU	/97	END OF TEXT BLOCK 
ETX	EQU	/03	LAST DUMMY
* 
* 
********************* 
* DWT-DISPLACEMENTS * 
********************* 
* 
DWTBC	EQU	/3	BYTE COUNTER 
DWTSB2	EQU	/1E	STACK BASE 
DWTRLN	EQU	/22	REQUESTED LINE NUMBER
DWTALN	EQU	/23	ACTUAL LINE NUMBER 
* 
	EJECT
************************
* CONDITIONAL ASSEMBLY *
************************
* 
*   ORDER 07, PRINT TALLY ROLL, MAY BE EXCLUDED FOR PTS 6223
*   BY SETTING X:A=0
* 
X:A	EQU	1 
ORD7	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 
TRETON	EQU	X:C
* 
X:D	EQU	0 
FJOTON	EQU	X:D
* 
*   ORDER 08,PRINT VOUCHER/PASSBOOK,IS COMPLETED IF 
*   PRINT OBJECT IS REMOVED UNDER PRINTING IF X:E = 1 
* 
X:E	EQU	0 
COMPL	EQU	X:E 
* 
*   INDICATION OF RECOVERY EXECUTED ON REQUEST CAN
*   BE INCLUDED IN THE DRIVER BY SETTING X:F = 1
* 
X:F	EQU	0 
RECOVY	EQU	X:F
*    IN SITUATIONS WHERE THE SELECTOR UNIT OR PRINTER HARDWARE
*    IS INACTIVE, END OF REQUEST WITH RETURN CODE NOT OPERABLE
*    CAN BE CHOSEN BY SETTING THE CONSTANT RECEND = 1 
X:G	EQU	0 
RECEND	EQU	X:G
	EJECT
* 
*********** 
* BUFFERS * 
*********** 
* 
* 
BUF1	DATA	/0382,/0D1D	CR1, ATTACH PRINT HEAD
BUF3	DATA	/0382,/091D	CR2, ATTACH PRINT HEAD
* 
*   BUF4 CONTAINS FOLLOWING ORDERS: 
*   CR2,LIFT TO TOP,GRASP,LIFT TO TOP 
* 
* 
BUF4	DATA	/0700,/2009,/0C1A,/830C 
BUF5	DATA	/030C,/1B83	LIFT TO TOP AND RELASE
* 
* 
* 
**********
* TABLES *
**********
* 
* 
TPAD	EQU	*	ADDRESS BLOCK
	DATA	ACTP	ACTIVATIONDRIVER 
	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
* 
* 
*   TABLE TO GET ACTUAL CR-CHARACTER FOR JOURNAL AND VOUCHER/PASSBOOK 
* 
* 
HPTAB	EQU	* 
	DATA	/0D09 
	DATA	/0009 
	DATA	/0D00 
* 
* 
	IFT	CUTPER=1	
CPTAB	DATA	/1F0F	CODES FOR PERFORATE/CUT JOURNAL TAPE 
	XIF
	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 
* 
* 
	LDR	A7,A7	ORDER /00 ?
	RF(Z)	TPDUMY	YES 
ACTP01	LDR	A4,A7	GET ORDER
	SUK	A4,8	CHECK ORDER 
	RF(P)	ACT020	ILLEGAL ORDER 
	RF(E)	ACT010	ORDER 08
	ADK	A4,2	ILLEGAL ORDER ? 
	IFT	ORD7=1 
	RF(NN)	TP100	NO
	XIF
	IFT	ORD7=0 
	RF(Z)	TP100
	XIF
ACT020	ABL	DISIOE	ILLEGAL ORDER 
	EJECT
* 
* 
*   ORDER 08 : WRITE VOUCHER/PASSBOOK 
*              GET REQUESTED LINE NUMBER AND SAVE IN DWT
* 
* 
ACT010	LD	A1,2,A8	BUFFER ADDRESS
	LCR	A4,A1	GET FIRST CHARACTER
	LC	A1,1,A1	GET SECOND CHARACTER
	ANK	A1,/F	LINE UNIT
	SLL	A4,4 
	ANK	A4,/F0	LINE DECADE 
	ORR	A1,A4	DECIMAL LINE NUMBER
	CF	A5,BCDTBY	CONVERT TO BINARY 
	LDR	A3,A1
	LD	A2,10,A8	GET CONTROL WORD 
	SLL	A2,3	LINE NUMBER RELATIVE OR ABSOLUTE ?
	RF(NN)	ACT018	ABSOLUTE 
	LC	A3,DWTRLN,A6	GET LINE NUMBER
* 
* 
	SLL	A2,1	RELATIVE. LIFT UP OR DOWN ? 
	RF(NN)	ACT015	LIFT DOWN
	SUR	A3,A1	LIFT UP
	RF(NN)	ACT018
	LDK	A3,0 
	RF	ACT018
* 
* 
ACT015	ADR	A3,A1	LIFT DOWN
* 
* 
ACT018	SC	A3,DWTRLN,A6	SAVE REQUESTED LINE NUMBER IN DWT
	EJECT
TP100	EQU	* 
	LDK	A2,0 
	SC	A2,DWTBC,A6	RESET BYTE COUNTER
	CF	A5,OUTPUT	SEND DUMMY
* 
* 
*   CHECK IF REQUESTED LENGTH IS EQUAL TO TWO FOR 
*   ORDERS 06 AND 07. 
* 
TP110	EQU	* 
	LD	A3,4,A8	GET REQUESTED LENGTH
	LDR	A4,A7	SAVE ORDER IN A4 
	RF(Z)	TPDUMY	ORDER /00 
	LC	A1,DWTST,A6	GET LEFT BYTE IN STATUS WORD
	SUK	A4,8	ORDER 08 ?
	RF(Z)	TP600	YES GO TO ORDER PROCESSING 
	ANK	A1,/4
	RF(NE)	TPHP	TEXT MESSAGE WRITTEN ? 
	SUK	A3,2	REQ. LENGTH =2 ?
	RF(NP)	TPLF10	SEND LINE FEED DIRECT
* 
* 
	IFT	ORD7=1 
	SUK	A7,7	ORDER 07
	RF(Z)	TP400	GO TO ORDER PROCESSING ORDER 07
			ELSE ORDER PROCESSING ORDER 06 
	XIF
	EJECT
* 
* 
* 
*   ORDER 06 : PRINT JOURNAL
* 
* 
* 
TP200	LDKL	A3,BUF1	SEND CR1 AND ATTACH
TP210	CF	A5,BUFCHR	      -"-
	CF	A5,PRBUF	PRINT ECB-BUFFER 
	EJECT
* 
* 
*   SEND LINE FEED ORDERS 06 AND 07 
* 
TPLF	EQU	*
	LDK	A2,/1E	DETACH PRINT HEAD 
	CF	A5,OUTPUT 
TPLF10	EQU	*
* 
*   POSITION PRINT HEAD ACCORDING TO HP-PARAMETER 
*   IN CONTROL WORD.
* 
TPHP	EQU	*
	LD	A1,4,A8	GET REQUESTED LENGTH
	ST	A1,6,A8	SAVE EFFECTIVE LENGTH 
	LD	A1,10,A8	GET CONTROL WORD 
	SRL	A1,14	HP-PARAMETER IN A1 
	SUK	A7,6	ORDER 06 ?
	RF(Z)	TPHP10	YES 
	ADK	A1,3	NO MODIFY INDEX 
TPHP10	LC	A2,HPTAB,A1	LOAD CR-CHARACTER 
	CF	A5,OUTPUT	AND SEND IT 
	LD	A7,DWTOR,A6	GET ORDER 
	ANK	A7,/FF 
	SUK	A7,8	ORDER 8 ? 
	RF(E)	TPDUMY 
	ADK	A7,2 
	LC	A2,LFTAB,A7	GET LF CHARACTER
	CF	A5,OUTPUT	AND SEND IT 
	EJECT
TPHP20	EQU	*
* 
	IFT	CUTPER=1 
	LD	A1,10,A8	GET CONTROL WORD 
	ECR	A1,A1
	ANK	A1,3	CUT/PERFORATE ? 
	RF(Z)	TPDUMY	POSITION PRINT HEAD 
	LC	A2,CPTAB-1,A1	GET CUT/PERFORATE CODE
	CF	A5,OUTPUT 
	XIF
	EJECT
* 
* 
*   COMMON END OF PRINT 
* 
* 
*   SEND LAST DUMMY CHARACTER 
* 
TPDUMY	EQU	*
	LDK	A2,ETX	END OF TEXT MESSAGE 
	CF	A5,OUTPUT 
	EJECT
* 
* 
*   CHECK STATUS AFTER LAST DUMMY CHARACTER 
* 
TPTST	EQU	* 
	LDR	A7,A7	ORDER 00 ? 
	RF(NZ)	TST010	NO 
TST005	LDR	A3,A2
	ANK	A3,VOIN	VOUCHER IN ? 
	RF(Z)	TST010	NO
	ORKL	A1,VOCHIN	SET RETURN CODE 
TST010	ANK	A2,EOJT	END OF JOURNAL TAPE ?
	RF(NZ)	ENDIO	NO PERFORM ENDIO
	ORK	A1,PROUT	SET RETURN CODE PAPER OUT 
* 
* 
*   PERFORM END I/O AND GO TO DISPATCHER
* 
ENDIO	EQU	* 
	ABL	DISEND	PERFORM END I/O AND GO TO DISPATCHER
* 
* 
* 
* 
	IFT	ORD7=1 
	EJECT
* 
* 
* 
*   ORDER 07 : PRINT TALLY ROLL 
* 
* 
* 
TP400	ANK	A2,VOIN	VOUCHER IN ?
	RF(Z)	TP410	NO 
TP405	CF	A5,RELEAS	ERROR. VOUCHER IN
* 
TP410	EQU	* 
	LDKL	A1,/200 
	ORS	A1,DWTST,A6	INDICATE VOUCHER STATUS CHANGE NOT ALLOWED 
	LDKL	A3,BUF3	SEND CR2, ATTACH AND PRINT BUFFER 
	RB	TP210 
* 
* 
* 
	XIF
	EJECT
* 
* 
* 
*   ORDER 08 : PRINT VOUCHER PASSBOOK 
* 
* 
* 
TP600	EQU	* 
	ANK	A1,/4
	RF(NE)	TP700	TEXT ALREADY PRINTED
	LDK	A2,/09	CR2 
	CF	A5,OUTPUT	SEND CHARACTER
	LD	A1,10,A8	GET CONTROL WORD 
	SLL	A1,2	RELEASE ? 
	RF(NN)	TP602	NO
	SUK	A3,2	REQUESTED LENGTH = 2 ?
	RF(Z)	TP710	YES RELEASE
TP602	EQU	* 
	ANK	A2,VOIN	VOUCHER IN ? 
	RF(Z)	TP605	NO 
	SLL	A1,1	DISPLACEMENT
	RF(N)	TP610	YES
TP605	LDKL	A3,BUF4
	CF	A5,BUFCHR	SEND
	LDK	A3,0 
	RF	TP620 
	EJECT
* 
*   SEND ELEVATOR UP/DOWN UNTIL ACTUAL LINE NUMBER IS EQUEAL
*   TO REQUESTED
* 
TP610	LC	A3,DWTALN,A6	GET ACTUAL LINE NUMBER
	ANK	A3,/FF	ACTUAL LINE NUMBER
TP620	CC	A3,DWTRLN,A6	COMPARE LINE NUMBERS
	RF(E)	TP650	EQUEAL 
	RF(G)	TP630	SEND ELEVATOR UP 
* 
	LDK	A2,/0B	SEND ELEVATOR DOWN
	ADK	A3,1	INCREMENT ACTUAL LINE NUMBER
	RF	TP640	SEND LIFT CHAR. 
* 
TP630	LDK	A2,/0A	SEND LIFT UP 
	SUK	A3,1	DECREMENT ACTUAL LUNE 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	ERROR. RECOVERY
	RB	TP620	CHECK IF LIFT POSITIONED
	XIF
	IFT	COMPL=1
	RB(NZ)	TP620	CHECK IF LIFT IS POSITIONED 
TP645	LDK	A1,THRPUT	VOUCHER OUT/SHOULD BE IN
	ORS	A1,8,A8	INDICATE IN RETURN CODE
	RB	TPDUMY
	XIF
	EJECT
* 
*   ORDER 08: ATTACH AND PRINT
TP650	EQU	* 
	LDK	A2,0	SEND DUMMY TO LET THE 
	CF	A5,OUTPUT	LIFT SETTLE 
	LD	A3,4,A8	GET REQUESTED LENGTH
	SUK	A3,2	GET NUMBER OF CHAR. 
	RF(Z)	TP700	ALL
	LDK	A2,STX 
	CF	A5,OUTPUT	START OF MESSAGE
	LD	A3,2,A8	GET BUFFER ADDRESS
	ADK	A3,2 
	LCR	A1,A3	GET FIRST CHARACTER
	CCK	A1,/1111	TABULATION ?
	RF(E)	TP690
	LDK	A2,/1D	ATTACH
	CF	A5,OUTPUT	SEND
TP690	EQU	* 
	IFT	CUTPER=1 
	LDK	A2,/20 
	CF	A5,OUTPUT	SEND SPACE BEFORE PRINT 
	XIF
	LDKL	A1,/200 
	ORS	A1,DWTST,A6	INDICATE VOUCHER STATUS CHANGE NOT ALLOWED 
	CF	A5,PRBUF	PRINT ECB-BUFFER 
	EJECT
* 
*   ORDER 08: RETURN AFTER PRINT
* 
TP700	EQU	* 
	LD	A1,10,A8	GET CONTROL WORD 
	SLL	A1,2	RELEASE ? 
	RF(NN)	TP715 
TP710	EQU	* 
	CF	A5,RELEAS	RELEASE 
TP715	ABL	TPLF
	EJECT
* 
*   P R B U F 
* 
*   SUBROUTINE TO SEND CHARACTERS FROM ECB-BUFFER UNTIL REQUESTED 
*   LENGTH IS REACHED 
* 
* 
PRBUF	LD	A4,4,A8	GET REQUESTED LENGTH 
	SUK	A4,2	ADJUST REQUESTED LENGTH 
	LD	A3,2,A8	BUFFER ADDRESS
	ADK	A3,2 
PRB010	LCR	A1,A3	GET CHARACTER
	CCK	A1,/2020 
	RF(NE)	PRB100	NOT BLANK
	ADK	A3,1	BLANK 
	SUK	A4,1 
	RB	PRB010	GET NEXT CHARACTER 
* 
* 
PRB100	SUK	A4,1	DECREMENT REQUESTED LENGTH
	RF(NN)	PRB105	PRINT BUFFER 
	LDK	A2,ETB 
	CF	A5,OUTPUT	SEND END OF MESSAGE 
	LDK	A2,ETX 
	CF	A5,OUTPUT	WAIT FOR WHOLE BUFFER TO BE PRINTED 
	LDKL	A1,/400	INDICATE MESSAGE PRINTED
	ORS	A1,DWTST,A6
	LDKL	A1,/FDFF	VOUCHER STATUS CHANGE ALLOWED
	ANS	A1,DWTST,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
	IFT	ORD7=1 
* 
* 
* 
*   PRINT TALLY ROLL
* 
* 
* 
	ANK	A2,VOIN	VOUCHER IN ? 
	RF(Z)	PRB200	NO. GO AND PRINT
	ADK	A5,4	RESET STACK POINTER 
	ABL	TP400	SEND LIFT TO TOP AND RELEAS
* 
	XIF
* 
* 
*   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
	LDK	A1,/11	
	CCR	A1,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,/1E	DETACH PRINT HEAD 
	CF	A5,OUTPUT	SEND DETACH 
PRB117	LD	A1,10,A8	GET CONTROL WORD 
	ANK	A1,/FF 
	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	LDK	A2,/1D	ATTACH
	RF	PRB240	SEND ATTACH
	EJECT
* 
* 
* 
*   GET OUTPUT CHARACTER FROM BUFFER. CHECK IF
*   ILLEGAL CHARACTER OR ROOMLESS POINT 
* 
* 
* 
PRB200	EQU	*
PRB205	LCR	A7,A3	LOAD OUTPUT CHARACTER
	CCK	A7,/AEAE	ROOMLESS POINT ?
	RF(NE)	PRB210	NO 
	SUK	A3,1	INCREMENT 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)	PRB220	YES 
PRB215	CCK	A7,/5F5F	ILLEGAL CHARACTER ? 
	RF(NG)	PRB230	NO 
* 
* 
PRB220	EQU	*
	IFT	TRETON=1 
	CCK	A7,/1313	SPECIAL CHARACTER ? 
	RF(E)	PRB230	YES 
	XIF
	IFT	FJOTON=1 
	CCK	A7,/1414	SPECIAL CHARACTER ? 
	RF(E)	PRB230	YES 
	XIF
	LDK	A1,CCERR	CODE CHECK ERROR
	ORS	A1,8,A8	STORE IN RETURN CODE 
	LD	A7,DWTOR,A6	GET ORDER 
	ANK	A7,/FF 
	SUR	A3,A4
	RB	PRB100
* 
* 
* 
PRB230	IM	DWTBC,A6	INCREMENT BYTE COUNTER 
	LDR	A2,A7	GET OUTPUT CHARACTER 
PRB240	CF	A5,OUTPUT	SEND CHARACTER
	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	BUSY
	LDR	A7,A7	ORDER 0 ?
	RF(Z)	IHTP20 
	LDR	A1,A1	RETURN CODE FROM CHANNEL UNIT
IHTP10	ABL(Z)	LDREG	NO RETURN CODE RESTORE REGISTERS
	IFT	RECEND=0 
	RF	RCTP10	ELSE GO TO DISPATCHER
	XIF
	IFT	RECEND=1 
	RF	IHTP30
	XIF
IHTP20	LDR	A1,A1	ERROR ?
	ABL(Z)	TST005
IHTP30	ABL	ENDIO
* 
* 
* 
	EJECT
* 
*   R C T P 
* 
*   RECOVERY ROUTINE: REPRINTS RUNNING REQUEST AT 
*                     POWER UP
RCTP	CF	A15,SAVE8	SAVE REG. A1-A8 
	LD	A2,DWTST,A6	GET STATUS
	RF(N)	RCTP05	NOT BUSY
RCTP01	EQU	*
* 
* 
	LDKL	A5,DWTSB2	STACK BASE
	ADR	A5,A6
	LDK	A2,/01	RESET PRINT BUFFER REMOTE AND LOCAL DUMMY 
	CF	A5,OUTPUT	SEND DUMMY
RCTP05	EQU	*
	LDK	A2,0 
	SC	A2,DWTALN,A6	STORE 0 AS ACTUAL LINE NUMBER
	LDK	A2,/0C	LIFT TO TOP 
	CF	A5,OUTPUT 
	IFT	COMPL=1
* 
	LDR	A4,A4	STATUS CHANGE ?
	ABL(NE)	TP645
	XIF
	IFT	RECOVY=1 
	LDK	A2,/80	INDICATE POWER OFF
	ORS	A2,8,A8	SET RETURN CODE
	XIF
	ABL	TP100	SEND FIRST DUMMY CHARACTER 
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 IJ A2 
BCDTB1	SUK	A2,/10	
	RF(N)	BCDTB2	END 
	SUK	A1,6	DECREMENT BY 6
	RB	BCDTB1	 
BCDTB2	RTN	A5	RETURN TO CALLER
* 
* 
* 
	EJECT
* 
* 
*   R E L E A S 
* 
*   SUBROUTINE TO SEND LIFT TO TOP AND RELEASE
* 
* 
* 
RELEAS	EQU	*
	LDK	A1,0 
	ST	A1,DWTRLN,A6	SET ACTUAL AND REQ. LINE NUMBER TO ZERO
	LDKL	A3,BUF5	LIFT TO TOP AND RELEAS
* 
*   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 
	RTN	A5	RETURN TO CALLER
* 
* 
* 
* 
* 
* 
	END

Full view