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

⟦d4507cb36⟧

    Length: 33388 (0x826c)
    Notes: pts_type(SC)
    Names: »IOTND.SC«

Derivation

└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
    └─⟦this⟧ »PTSDEMO/IOTND.SC« 

PTS(SC)

 IDENT IOTND REL=9.2 VER=ND 81-01-21
			UPD 11 80-16-12 / BORO 
			ADD "IOTNDS" SUBROUTINE
			UPD 10 80-04-16 / BORO 
			RECOVERY PF BEFORE DISPENSE
			UPD 9 80-04-14 / BORO
			IGNORE MICRO REJECT FULL 
			UPD 8 80-03-03 / BORO
			MAKE REJECT CASS LIMIT VARIABL 
			LOWER BUSY T. O. TO 1 MIN
			NO CASS. BECOMES ERROR E1
			DELV ERROR CAUSES TND BLOCK
			UPD 7 80-02-26 / BORO
			DON'T REPEAT TIMEOUTS
			UPD 6 80-02-11 / BORO
			ADD TNDELVPF & TNDNDU
			UPD 5 80-02-04 / BORO
			ADD RETCODE 3 FOR DELIVER
			UPD 4 80-02-04 / BORO
			ADD DELIVER FUNCTION 
			UPD 3 80-01-31 / BORO
			CHANGE ELEMENTS TO ARRAYS
			UPD 2 80-01-13 / BORO
			ADD UNKNOWN REJ NOTES
			UPD 1 80-01-11 / BORO
			TAKE OUT DELIVER & DUMP
	EJECT
**********************************************************************
* SUBROUTINE TO PERFORM TELLER NOTE DISPENSER (TND) I/O FUNCTIONS 
* NAME:           IOTND 
* PURPOSE:        PERFORM TND I/O FUNCTIONS 
* CALL:           PERF IOTND,OP,TND,TNDWB1,TNDWB2,TNDWB3,TNDWD1,TNDWS1,TNDBUF 
* PARAMETERS
*   IN:   OP - OPERATION CODE - INDEX TO FUNCTION 
*         1  INITND: RESET TND,OPEN TND (LIFTS UP)
*         2  CLOSND: CLOSE TND (LIFTS DOWN) 
*         3  DISPND: DISPENSE NOTES TO STACKER
*         4  DELVND: DELIVER NOTES TO TELLER
*         TNDWB1 BIN WORK REGISTER
*         TNDWB2  " 
*         TNDWB3  " 
*         TNDWD1 BCD WORK REGISTER, MINIMUM 7 CHAR PLUS SIGN CHAR 
*         TNDWS1 STRG WORK REGISTER, MINIMUM 5 CHAR 
*         TNDBUF STRG I/O BUFFER, MINIMUM 40 CHAR 
* VARIABLES - COMMON FOR ALL FUNCTIONS
*    IN:  NDRCLIM-BCD REJECT CASSETTE LIMIT NOTES DUMPED
*                 BEFORE BLOCKING DISPENSE
*   OUT: TNDST-STATUS AFTER I/O, 0=OK, OPERATION SUCCESSFUL 
*                                1=ERROR, OPERATION NOT DONE, 
*                                  DISPENSE, DELIVER BLOCKED UNTIL OPEN 
*                                  PERFORMED
*                                2=TND BLOCKED: OP=3, 4 
*                                3=CASSETTE(S) EMPTY: OP=3
*         TNDBAD-FLAG INDICATING IRRECOVERABLE ERROR OCCURRED 
*                T=DISPENSE, DELIVER BLOCKED
*                F=ALL TND I/O ALLOWED
*        TNDRCF-FLAG INDICATING REJECT CASSETTE FULL
*                T=DISPENSE, DELIVER BLOCKED
*                F=ALL TND I/O ALLOWED
* 
* SUBROUTINES COMMON FOR ALL FUNCTION 
*         MASK
*         ERRND 
*         NDERR 
*         TNDMSK
* DESCRIPTION 
*   TND FUNCTIONS IF PERFORMED SUCCESSFULLY,RETURN WITH TNDST=0 
*   IF PROGRAM ERROR OR HARDWARE ERROR, THE ERROR(S)  ARE REPORTED TO 
*   THE APPLICATION VIA SUBROUTINE "NDERR" WITH AN INDEX PARAMETER
*   INDICATING THE ERROR. TND REGISTERS ARE UPDATED ACCORDINGLY 
*      PERF      NDERR,INDEX
* 
*         INDEX: 0=COMMAND, RETURN STATUS (& REJECT TRACE)
*                  IF OTHER THAN CASS. LOW, REJECT CASS FULL, 
*                  SEQUENCE ERROR, OR DELIVERY UNIT BUSY
*                1=E1-NO CASS., T.O. OR NOP, CHECK TND, OTHERWISE CALL SERVICE
*                2=E2-COMMUNICATION  OR HARDWARE, CALL SERVICE
*                3=E3-T.O. ON NOTES IN DELIVERY UNIT, CALL SERVICE
*                4=E4-BAD NOTES OR JAM, FIX OR CALL SERVICE 
*                5=E5-REJECT CASSETTE FULL, EMPTY IT
*                7=E7-PROGRAM ERROR, DEBUG HELP 
*                8=E8-NDDATA1(KW4,TNDWB1) FAILS TO FEED, CALL SERVICE 
*  IF A CASSETTE EMPTIES DURING A DISPENSE, APPLICATIONS WILL BE
*    INFORMED VIA "NDERR". DISPENSE NOT DONE, NO REGISTERS AFFECTED 
*         PERF      NDERR,INDEX 
* 
*         INDEX= 6=E6, NDDATA1(KW4,TNDWB1) EMPTY
* 
*  SEE RESPECTIVE FUNCTION FOR DETAILS
* 
* 
	DDUM	DEMODD
	PDIV 
	ENTRY	IOTND	TND I/O OPERATIONS 
	ENTRY	IOTNDS	TND COMMAND & STATUS
	EXPROC	NDERR	NOTIFY APPLICATIONS-ERROR 
	EXPROC	MASK	CREDIT ASSEMB ROUTINE
	EJECT
* 
* ROOT: INITIALIZE PARAMETERS, TEST FOR BLOCK, PERFORM I/O AND GO TO
*       RESPECTIVE I/O ROUTINE FOR HANDLING OF I/O OPERATION RESULTS
* 
IOTND	PROC	OP,		C 
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWB3,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PBIN	OP
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBIN	TNDWB3
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
	CBL	OP,KW1,IOTND01	MINIMUM OPERATION CODE
	CBG	OP,KW4,IOTND01	MAXIMUM OPERATION CODE
	CLEAR	TNDTRY	CLEAR TRY TWICE FLAG
	CLEAR	TNDNDU	NO NOTES IN DELVERY UNIT
	MOVE	TNDWB3,=W'60'	INITIALIZE BUSY COUNTER 

* TEST IF DISPENSED BLOCKED 

	IB	OP,IO,IO	OPEN/RESET & CLOSE OK
	TBT	TNDRCF,IOTND00	I/O OK IF REJ. CASS. NOT FULL 
	TBT	TNDBAD,IOTND00	I/O OK IF NOT ERROR BLOCKED 

* NO PREVIOUS  ERRORS, TEST IF REJECT CASSETTE FULL 

	CBE	OP,KW4,IO	SKIP IF DELIVER
	CBL	NDDUMP,NDRCLIM,IO	BRANCH IF REJECT CASS NOT FULL 
	SET	TNDRCF	BLOCK DISPENSE
	PERF	NDERR,KW5	REPORT ERROR TO APPLICATION 
IOTND00 
	MOVE	TNDST,KW2	RETURN CODE 
	RET
IOTND01 
	MOVE	TNDST,KW1	ERROR RETURN
	RET
* 
* PERFORM RESPECTIVE OPERATION I/O
* 
IO	PERFI	OP,INITIO,CLOSIO,DISPIO,DELVIO 
	PLIST	TND,		C
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
* 
* GET COMMAND AND TND RETURN STATUS, REPORT TO APPLICATIONS IF ERROR
* 
* TEST IF ERROR SHOULD BE REPORTED, IGNORE BITS 2,4,5,11
* CORRESPONDING TO DELIVERY UNIT BUSY, REJECT CASS. FULL,CASS. LOW, 
* SEQUENCE ERROR
	MOVE	TNDST,=W'-11281'	BITS TO REPORT ON
	PERF	IOTNDS,TND,TNDWB1,TNDWB2,TNDST
	EJECT
	MOVE	TNDST,KW0	ZERO INDEX
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'128'	BIT 8
	B	IOTND10	POWERFAIL
	MOVE	TNDST,KW0 
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'-32752' BITS 0, 11
	B	IOTND20	PROGRAM ERROR
	SET	NOPF 
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'16449' BITS 1, 9, 15
	B	IOTND10	NO CASS., T.O., NOP
	CLEAR	NOPF 
	SUB	TNDST,KW1
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'10' BITS 12,14
	B	IOTND10	COMM. OR HARDWARE ERR
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'8192'  BIT 2
	B	IOTND10	BUSY 
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'4352'	BITS 3,7
	B	IOTND10	BAD NOTES OR JAM 
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'2048'	BIT 4 
	B	IOTND10	REJECT CASS FULL 
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'512'	BIT 6
	B	IOTND10	CASSETTE EMPTY 
	MOVE	TNDST,KW0	OK,CASS. LOW OR REJ. NOTES
* 
* RESULT IN TNDST, BRANCH TO RESPECTIVE I/O ROUTINE 
* 
IOTND10 
	IB	OP,INITND,CLOSND,DISPND,DELVND

* PROGRAM ERROR? INDEX CODE=7 

IOTND20 
	MOVE	TNDST,KW7 
	MOVE	TNDWB2,=W'16'	BIT 11
	CALL	MASK,TNDWB1,TNDWB2	SEQUENCE ERROR?
	BZ	IOPERR	NO, REQUEST ERROR
	B	IOTND10
	EJECT
**********************************************************************
* 
* 1.INITND
* 
* PURPOSE:       RESET TND, OPEN TND (LIFTS UP) 
* 
* VARIABLES 
*    IN:
*    OUT: TNDBUF-CASSETTE ID'S
*         TNDST =0-OK 
*               =1-ERROR (E1,E2,E4,E7), TND BLOCKED, NOT OPEN 
*         TNDBAD=F-IF OK
*         TNDRCF=F-IF OK
* 
**********************************************************************
	EJECT
* 
* TNDST- INDEX INDICATING RESULT OF IO....ACTION.............RET-TNDST
* 
*   0- IO OK, CASSETTE LOW...........UNBLOCK TND                    0 
*   1- POWERFAIL.....................REPEAT INITIO
*   2- T.O., COMM., HARDWARE, NOP....TRY TWICE, REPORT, BLOCK TND   1 
*   3- BUSY, NOTES IN DELIVERY UNIT..IMPOSSIBLE, REPORT, BLOCK TND  1 
*   4- BAD NOTES OR JAM..............REPORT, BLOCK TND              1 
*   5- REJECT CASSETTE FULL..........WARNING                        0 
*   6- CASSETTE EMPTY................IGNORE, UNBLOCK TND            0 
*   7- SEQ ERR.......................REPORT, BLOCK TND              1 
* 
INITND
	IB	TNDST,		C 
		IO,IOTRY,IOPERR,IOER,INIT10,INIT10,IOER 
* 
* RESET OK, UNBLOCK TND,TNDST=0 
* 
INIT10
	CLEAR	TNDBAD 
	CLEAR	TNDRCF	UNBLOCK REJ CASS FULL 
	B	IOOK 
	EJECT
**********************************************************************
*                                                                    *
* 2.CLOSND                                                           *
*                                                                    *
* PURPOSE:       CLOSE TND(LIFTS DOWN)                               *
*                                                                    *
* VARIABLES                                                          *
*   IN:                                                              *
*   OUT:  TNDBUF-CASSETTE ID'S                                       *
*         TNDST =0-OK                                                *
*               =1-ERROR (E1,E2,E4,E7)                                  * 
*                                                                    *
*                                                                    *
**********************************************************************
	EJECT
* 
* TNDST- INDEX INDICATING RESULT OF IO....ACTION.............RET-TNDST
* 
*   0- IO OK, CASSETTE LOW...........                               0 
*   1- POWERFAIL.....................REPEAT CLOSI0
*   2- T.O., COMM., HARDWARE,NOP.....TRY TWICE,REPORT               1 
*   3- BUSY, NOTES IN DELIVERY UNIT..IMPOSSIBLE, REPORT             1 
*   4- BAD NOTES OR JAM..............REPORT, BLOCK TND              1 
*   5- REJECT CASSETTE FULL..........IGNORE                         0 
*   6- CASSETTE EMPTY................IGNORE                         0 
*   7- SEQ ERR.......................REPORT, BLOCK TND              1 
* 
CLOSND
	IB	TNDST,		C 
		IO,IOTRY,IOPERR,IOER,CLOS10,CLOS10,IOER 
* 
* CLOSE OK,TNDST=0
* 
CLOS10
	TBF	TNDRCF,IOOK	BR. IF REJECT CASS OK
	MOVE	NDDUMP,KW0	ASSUME CLOSE TO
			...EMPTY REJECT CASS 
	B	IOOK 
	EJECT
**********************************************************************
*                                                                    *
* 3.DISPND                                                           *
*                                                                    *
* PURPOSE:       DISPENSE NOTES TO STACKER                           *
*                                                                    *
* VARIABLES                                                          *
*   IN:   NDDATA1(KW2,X)-BCD ARRAY, LOADED WITH NO. NOTES TO DISPENSE/CASS* 
*         CASMAX    BIN EL., TOTAL NO. OF CASSETTES                    *
*   OUT:  NDDATA1(KW5,X)-BCD ARRAY, NO. OF NOTES REJECTED SINCE OPEN      * 
*         NDDATA2(KW2,X)-BCD ARRAY, EL=O IF CASSETTE BECAME EMPTY         * 
*         TNDST=0-OK                                                 *
*              =1-ERROR (E1,E2,E3,E4,E7,E8). BLOCKED, NO DISPENSE * 
*              =2-TND WAS ALREADY BLOCKED, NO DISPENSE               *
*              =3-CASSETTE EMPTY (E6), NO DISPENSE                   *
*                                                                    *
**********************************************************************
	EJECT
* 
* TNDST- INDEX INDICATING RESULT OF IO....ACTION.............RET-TNDST
* 
*   O-ID OK,CASSETTE LOW, REJ. NOTES.CALC. REJECTED NOTES           0 
*   1-POWERFAIL......................RESET TND, REPEAT DISPENSE 
*   2-T.O., COMM., HARDWARE, NOP.....CALC. REJECTED NOTES,RESET 
*                    OR NO CASS......TND, TRY TWICE, THEN REPORT, 
*                               .....BLOCK TND                      1 
*   3-BUSY, NOTES IN DELIVERY UNIT...NOT DELIVERED BY TND,
*                                 ...MANUALLY PLACED, SKIP TRANS    2 
*   4-BAD NOTES OR JAM...............SAME AS 2.                     1 
*   5-REJECT CASSETTE FULL...........WARNING                        0 
*   6-CASSETTE EMPTY.................REPORT                         3 
*   7-SEQ. ERROR DUE TO PF?..........RE-OPEN TND
* 
DISPND
	IB	TNDST,		C 
		DISPPF,IOTRY,IOTND00,IOTRY,DISPOK,DISPMT,DISPPF 
* 
* DISPENSE OK, TEST FOR REJECTED NOTES
* 
DISPOK
	PERF	TNDMSK,TNDWB1,TNDWB2,=W'32'	BIT 10
	B	DISP10	CALC REJECTED NOTES 
	B	IOOK	NO REJECTED NOTES, RET OK 
DISP10
* CALCULATE REJECTED NOTES & ADD TO NDDATA1(KW5,X)
	PERF	GETREJ,KW1,		C
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	B	IOOK	NO REJECT 
	B	IOOK	SUCCESSFUL
	EJECT
* 
* POWER FAILURE, RESET DISPENSER AND TRY AGAIN
* 
DISPPF
	PERF	INITIO,TND,		C
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
*REPORT ERRORS, EXCEPT REJ CASS FULL, CASS LOW, CASS EMPTY
	MOVE	TNDST,=W'-3585'	BITS TO REPORT
	PERF	IOTNDS,TND,TNDWB1,TNDWB2,TNDST
	DSC0	TND,2	DUMP NOTES, DISPENSE MAY
			HAVE BEEN SUCCESSFUL 
			ALSO 2 DISPENSE IN ROW 
			NOT ALLOWED
	PERF	IOTNDS,TND,TNDWB1,TNDWB2,TNDST
	B	IO	REPEAT DISPENSE 
	EJECT
* 
* SERIOUS ERROR, CALCULATE REJECTED NOTES, RESET TND, TRY TWICE ONLY
* 
DISPTRY 
* 
* FIRST FAILURE, SEE IF REJECTED NOTES
* 
* UPDATE NDDATA1(KW5,X) BY NUMBER DISPENSED 
	PERF	GETREJ,KW2,		C
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	B	DISPTR20	NO NOTES DISPENSED
DISPTR20
	B	DISPPF	REPEAT DISPENSE 
	EJECT
* 
*  ANALIZE STATUS OF EVERY CASSETTE, REPORT CASSETTE EMPTY OR CASSETTE
*  DOES NOT FEED, CALCULATE REJECTED NOTES
* 
DISPMT
* UPDATE NDDATA1(KW5,X) BY NUMBER DISPENSED AND REPORT CASS. STATUS 
	PERF	GETREJ,KW3,		C
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	B	DISPMT40	NO NOTES DISPENSED
* 
* TEST IF TND ERROR OCCURED OR ONLY CASSETTE EMPTY
* 
DISPMT40
	DSC0	TND,2	DUMP NOTES, OTHERWISE 
			...NEXT DISPENSE WON'T WORK
* REPORT ERRORS, EXCEPT REJ CASS FULL, CASS LOW, CASS EMPTY 
	MOVE	TNDST,=W'-3585'	BITS TO REPORT ON 
	PERF	IOTNDS,TND,TNDWB1,TNDWB2,TNDST
	TBT	TNDRCF,DISPMT50	BRANCH IF REJ CASS FULL
	TBT	TNDBAD,DISPMT50	BRANCH IF ERROR
	MOVE	TNDST,KW3	INDICATE CASSETTE EMPTY 
	RET
DISPMT50
	MOVE	TNDST,KW1	SET ERROR RETURN CODE 
	RET
	EJECT
**********************************************************************
*                                                                    *
* 4.DELVND
* 
* PURPOSE:       DELIVER NOTES TO TELLER
*                                                                    *
* VARIABLES                                                          *
*   IN:   NDDATA1(KW2,X)-BCD ARRAY, LOADED WITH NO. NOTES DISPENSED/CASS* 
*         TNDREG(X) 

*         CASMAX    BIN EL., TOTAL NO. OF CASSETTES                    *
*   OUT:  NDDATA1(KW5,X)-BCD ARRAY, NO. OF NOTES REJECTED SINCE OPEN      * 
*         OR
*         NDDATA1(KW1,X)-BCD ARRAY INCR. BY AMOUNT DELIVERED
*         AND 
*         TNDREG(X)    -BCD ARRAY DECR. BY AMOUNT DELIVERRED
*         NDATA1(KW2,X)-BCD ARRAY, CONTAINING AMT DELIVERED-ZEROED
*         TNDST=0-OK, E5-DELIVER OK, BUT BLOCK FURTHER DISPENSE 
*              =1-ERROR (E1,E2,E3,E7,E8). BLOCKED, NO DELIVER * 
*              =2-TND WAS ALREADY BLOCKED, NO DELIVER               * 
*                                                                    *
**********************************************************************
	EJECT
* 
* TNDST- INDEX INDICATING RESULT OF IO....ACTION.............RET-TNDST
* 
*   0-I/O OK.........................UPDATE TND REGISTERS           0 
*   1-POWERFAIL......................REPEAT DELIVER 
*   2-T.O., COMM., HARDWARE, NOP.....REPORT, BLOCK TND              1 
*   3-BUSY, NOTES IN DELIVERY UNIT...DELAY, REPEAT I/O UNTIL SEQ ERR OR 
*                                 ...TIME OUT, REPORT,BLOCK TND     1 
*   4- BAD NOTES OR JAM..............IMPOSSIBLE, REPORT, BLOCK TND  1 
*   5-REJECT CASSETTE FULL...........WARNING                        0 
*   6-CASSETTE EMPTY.................IMPOSSIBLE, REPORT, BLOCK TND  1 
*   7-SEQ. ERR, NOTES TAKEN?.........OK IF NOTES DELIVERED
* 
DELVND
	IB	TNDST,		C 
		IO,IOTRY,IOBZY,IOER,DELVOK,IOPERR,DELVSEQ 

* DELIVER SUCCESSFUL
* UPDATE TND REGISTERSBY AMOUNT DISPENSED TO TELLER 
* NDDATA1(KW1,X), TNDREG(X) AND ZERO NDDATA1(KW2,X) 
DELVOK
	PERF	PDDUMP,KW0,TNDWB1 
	SET	TNDNDU	NOTES IN DELIVERY UNIT
	B	IO	WAIT TILL TAKEN BY OPERATOR 

	EJECT

* SEQUENCE ERROR: IF NOTES WERE IN DELIVERY UNIT, THEN THEY HAVE
*                 NOW BEEN TAKEN BY OPERATOR, ALL OK
*   BUT: IF NEVER DETECTED THAT NOTES WERE IN DELIVERY UNIT, THEN 
*        SITUATION IS UNCLEAR, POWERFAIL MAY HAVE CAUSED NOTES
*        DISPENSED TO BE DUMPED BEFORE DELIVERY COMMAND ARRIVED OR
*        DELIVER COMMMAND ARRIVED, BUT DUE TO COMM. ERR OR POWERFAIL
*        WE NEVER RECIEVED ACKNOWLEGEMENT AND OPERATOR TOOK DELIVER NOTES 
*        OUT BEFORE WE COULD DETERMINE IF THEY WERE IN DELIVERY UNIT- 
*        HOPEFULLY PROBABILITY IS LOW THAT THIS COULD HAPPEN

DELVSEQ 
	TBT	TNDNDU,IOOK	BR. IF NOTES WERE DELIVERED
	B	IOER 
	EJECT
* 
* TELLER HAS NOT TAKEN NOTES FROM STACKER, DELAY AND REPEAT I/O 
*   AFTER A NUMBER OF TRYS, ASSUME HARWARE ERROR, REPORT, BLOCK TND 
*   AND SET RETURN CODE = 1 
* 
IOBZY 
	TBF	TNDNDU,DELVOK
	SUB	TNDWB3,KW1	DECREMENT TIMEOUT COUNTER 
	BNP	IOER	T.O., REPORT & BLOCK TND
	MOVE	TNDWB1,=W'10'	DELAY 1 SECOND
	DELAY	TNDWB1	DELAY 
	B	IO	REPEAT I/O
	EJECT
* 
* COMMON ROUTINES:  IOOK, IOTRY, IOER, IOPERR 
* 
* 
* 
* COMMON RETURN FOR I/O SUCCESS, SET RETURN CODE = 0
* 
IOOK
	MOVE	TNDST,KW0	SET RETURN CODE 
	RET
	EJECT
* 
* SERIOUS ERROR, TRY TWICE, IF FAIL 2ND TRY, REPORT, BLOCK TND AND
*   SET RETURN CODE = 1 
* 
IOTRY 
	TBT	TNDTRY,IOTRY10	BRANCH IF THIS 2ND TRY
	TBF	NOPF,IOTRY05	BR. NOT NO CASS, T.O. OR NOP
	CALL	MASK,TNDWB1,KW1	NOP?
	BZ	IOTRY10	DON'T REPEAT I/O
IOTRY05 
	SET	TNDTRY	INDICATE 2ND TRY
	IB	OP,IO,IO,DISPTRY,IO	REPEAT I/O
* 
* FAILED TWICE, REPORT & BLOCK TND DISPENSE 
* 
IOTRY10 
	TBF	NOPF,IOER	BRANCH IF NOT T.O., NOP
	MOVE	TNDST,KW1	T.O., NOP MSG INDEX 
* 
* ERROR END ROUTINE - REPORT (TNDST-MSG INDEX), BLOCK TND AND 
*   RETURN CODE (TNDST) = 1 
* 
IOER
	PERF	ERRND 
	IB	OP,IOEND,IOEND,DISPMT	NEXT INSTRUCTION-DELIVER
	TBT	TNDNDU,IOOK	NOTES DELIVERED? 
	PERF	PDDUMP,KW0,TNDWB1	ASSUME DELIVERED
	B	IOOK	TELL OPERATOR NOTES DELIVERED 
IOEND 
	RET
* 
* PROGRAM ERROR, REPORT, BLOCK TND, RETURN CODE = 1 
* 
IOPERR
	MOVE	TNDST,KW7	PROG ERR MSG INDEX
	B	IOER 
	PEND 
	EJECT
* I/O SUBROUTINES 
* 
* OPEN (LIFTS UP) AND RESET (AFTER LIFTS UP) I/O
* 
INITIO	PROC	TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
	MOVE	TNDBUF,=C' '
	MOVE	TNDWB1,=W'40' 
	DSC2	TND,X'18',TNDST,TNDBUF,TNDWB1 
	CBL	TNDWB1,KW5,INITIO10	NO REJECTED NOTES? 
	MOVE	TNDWS1,=C' '	INIT REJECTED NOTES
	COPY	TNDWS1,KW0,KW3,TNDBUF,KW2	GET REJ NOTES OF UNKNOWN VAL
	MOVE	TNDWD1,TNDWS1	CONVERT TO BCD
	ADD	NDDUMP,TNDWD1	UPDATE TOTAL DUMP CNT. 
INITIO10
	RET
	PEND 
* 
* CLOSE (LIFTS DOWN) I/O
* 
CLOSIO	PROC	TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
	DSC2	TND,03,TNDST,TNDBUF,TNDWB1
	RET
	PEND 
	EJECT
* 
* DISPENSE NOTES TO STACKER 
* 
DISPIO	PROC	TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
* 
* EDIT NOTES TO DISPENSE INTO OUTPUT BUFFER AND DISPENSE
* 
	MOVE	TNDBUF,=C'0'
	MOVE	TNDWB1,KW0	REQUESTED LENGTH 
	MOVE	TNDWB2,KW1	CASSETT INDEX
DISPI10 
	CBG	TNDWB2,CASMAX,DISPI20	DONE EDITING 
	MOVE	TNDST,NDDATA2(KW1,TNDWB2)	GET LOGICAL INDEX 
	EDSUB	TNDBUF,TNDWB1,DISPFMT	EDIT DATA TO BUFFER
	ADD	TNDWB2,KW1	INCREMENT CASSETTE INDEX
	B	DISPI10	LOOP 
DISPI20 
	DSC2	TND,X'15',TNDST,TNDBUF,TNDWB1 
	RET
* 
* 
* SUB EDIT FORMAT FOR DISPINSE
* MOVES NDDATA1(KW2,X) TO OUTPUT BUFFER 
* 
DISPFMT	FRMT
	FILLR	' ',2
	FBNZ	TNDST,FMT10	BRANCH IF DISPENSE OK 
	FILLR	'0',3	DON'T DISPENSE 
	FB	FMT20 
FMT10 
	FMEL	'PP999',NDDATA1(KW2,TNDST)
FMT20 
	FMEND
	PEND 
	EJECT
* 
* DELIVER NOTES TO TELLER 
* 
DELVIO	PROC	TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
	DSC0	TND,1 
	RET
	PEND 
	EJECT
* 
* ASSORTED SUBROUTINES
* 
* NAME:          ERRND
* 
* PURPOSE:       REPORT ERROR TO APPLICATION, BLOCK TND, SET ERROR RETURN 
*          CODE 
* CALL:          PERF   NDERR 
* 
* PARAMETERS
*   IN: 
*   OUT:
* VARIABLES 
*   IN:   TNDST-CONTAINS ERROR INDEX
*   OUT  TNDST-HAS ERROR RETURN CODE
*        TNDBAD=T TO BLOCK TND DISPENSE, DELIVER AND DUMP FUNCTIONS 
* 
* 
ERRND	PROC
	SET	TNDBAD	BLOCK DISP'NS,DEL'R & DUMP
	PERF	NDERR,TNDST	REPORT ERROR
	MOVE	TNDST,KW1	RETURN CODE 
	RET
	PEND 
	EJECT
********************************************************************
* 
* NAME:          GETREJ 
* 
* PURPOSE:       CALCULATE REJECTED NOTES, REPORT CASSETTE STATUS 
* 
* CALL:     PERF  GETREJ,TYPE,TND,TNDWB1,TNDWB2,TNDWD1,TNDWS1,TNDBUF
*           RET   0   NO DISPENSE WAS DONE
*           RET   2   ALL UPDATING DONE 
* 
* PARAMETERS
*   IN:   TYPE-BIN, INDICATING UPDATE TYPE
*              =1, UPD. NDDATA1(KW5,X) BY DISPENSED-REQUESTED DISPENSE
*              =2, UPD. NDDATA1(KW5,X) BY DISPENSED 
*              =3, SAME AS 2, PLUS REPORT CASSETTE ERRORS 
*         TND  TND DATA SET 
*         TNDWB1 BIN WORK REGISTER & CASSETTE INDEX 
*         TNDWB2 BIN WORK REGISTER
*         TNDWD1 BCD WORK REGISTER, MINIMUM 7 CHAR PLUS SIGN CHAR 
*         TNDWS1 STRG WORK REGISTER, MINIMUM 5 CHAR 
*         TNDBUF STRG I/O BUFFER, MINIMUM (CASMAX+1)X5 CHAR 
* VARIABLES 
*   IN:   CASMAX-BIN, MAX POSSIBLE CASSETTE POSITIONS 
*         TNDST -BIN WORK REGISTER
* 
********************************************************************
GETREJ	PROC	TYPE,		C
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PBIN	TYPE
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
* 
* READ STATUS AND NUMBER OF NOTES DISPENSED 
* 
	MOVE	TNDST,=W'35'	REQUESTED LENGTH 
	DSC2	TND,X'14',TNDWB1,TNDBUF,TNDST 
* 
* ANALISE RESULTS OF READ CONTROL 
* 
	CBNE	TNDST,KW0,GET10 
	RET
* 
* INITIALIZE
* 
GET10 
	MOVE	TNDWB2,TNDST	GET PHYSICAL POSITION OF 
	DIV	TNDWB2,KW5	...CASS. FROM EFFECTIVE LENGTH
	ADD	TNDST,KW2	INIT BUFFER POINTER
GET20 
	SUB	TNDST,KW6	POINT AT NEXT CASS. STATUS 
	CBNL	TNDST,KW5,GET25	BRANCH NOT END OF BUFFER
	RET	2	YES, DONE
GET25 
	SUB	TNDWB2,KW1	PHYSICAL CASSETTE INDEX 
	CBG	TNDWB2,CASMAX,GET20
	MOVE	TNDWB1,NDDATA2(KW1,TNDWB2)	GET LOGICAL INDEX
	MOVE	TNDWS1,=C' '
	CBE	TNDWB1,KW0,GET35	CASSETTE NOT MAPPED 
	IB	TYPE,GET35,GET35
* 
* GET STATUS
* 
	COPY	TNDWS1,KW0,KW1,TNDBUF,TNDST 
	CBNE	TNDWS1,=C'2',GET30	BRANCH NOT CASSETTE EMPTY
	MOVE	NDDATA2(KW2,TNDWB1),KW0	BLOCK CASSETTE
	MOVE	TNDCIX,TNDWB1 
	PERF	NDERR,KW6	REPORT
	MOVE	TNDWB1,TNDCIX 
	B	GET35	CALC. REJECTED NOTES 
* 
* TEST FOR CASSETTE DOES NOT FEED, REPORT, BLOCK TND, TNDST=1 
* 
GET30 
	CBNE	TNDWS1,=C'6',GET35	NO ERROR, CALC REJ.
	SET	TNDBAD	BLOCK DISPENSING
	MOVE	TNDCIX,TNDWB1 
	PERF	NDERR,KW8	REPORT CASS. FAILS TO FEED
	MOVE	TNDWB1,TNDCIX 
* 
* DISPENSED NOTES TO REJECT ACCUMULATORS
* 
GET35 
	ADD	TNDST,KW1	OFFSET TO AMT DISPENSED
	COPY	TNDWS1,KW0,KW3,TNDBUF,TNDST 
	MOVE	TNDWD1,TNDWS1 
	CBE	TNDWB1,KW0,GET50	CASSETTE NOT MAPPED 
	IB	TYPE,GET40,GET45,GET45
GET40 
	SUB	TNDWD1,NDDATA1(KW2,TNDWB1)	DISPENSED-REQUESTED 
GET45 
	ADD	NDDATA1(KW5,TNDWB1),TNDWD1	UPDATE REJECTED 
GET50 
	ADD	NDDUMP,TNDWD1	ADD REJ. TO TOTAL REJECTED 
	B	GET20
	PEND 
	EJECT
* 
* 
* NAME:          TNDMSK 
* 
* PURPOSE:       LOGICAL PRODUKT OF RETURN CODE AND GIVEN MASK
* 
* CALL:          PERF TNDMSK,TNDWB1,TNDWB2,LIT
*                RET0 RESULTS NOT ZERO
*                RET2  RESULTS ZERO 
* 
* PARAMETERS
*   IN:   LIT-BINARY LITERAL, GIVEN MASK
*         TNDWB1 BIN WORK REGISTER
*         TNDWB2  " 
*   OUT:
* 
* VARIABLES 
*   IN:   TNDWB1-LOADED WITH TND RETURN CODE
*   OUT:
* 
* SCRATCH 
*         TNDWB2
* 
TNDMSK	PROC	TNDWB1,TNDWB2,LIT 
	PBIN	TNDWB1
	PBIN	TNDWB2
	PLIT	LIT 
	ADD	TNDST,KW1	INCREMENT INDEX COUNTER
	MOVE	TNDWB2,LIT
	CALL	MASK,TNDWB1,TNDWB2
	BZ	TNDMSK10
	RET
TNDMSK10
	RET	2
	PEND 
	EJECT
********************************************************************
* 
* NAME:         PDDUMP
* 
* PURPOSE:      UPDATE TND REGISTERS AFTER DELIVER
* 
* CALL:         PERF PDDUMP,PORD,TNDWB1 
* 
* PARAMETERS: 
*   IN:   PORD   BIN ELEMENT=0=>NOTES DELIVERED 
*                           =1=>NOTES NOT DELIVERED 
*         TNDWB1 BIN WORK REGISTER
* 
*   OUT:
* 
* VARIABLES 
*   IN:   NDDATA1(KW2,X) BCD ARRAY, NUMBER OF NOTES DISPENSED/CASS. 
* 
*   OUT:  NDDATA1(KW1,X) BCD ARRAY, NUMBER OF NOTES PAID/CASS.
*         TNDREG(X)     BCD ARRAY, TOTAL TO DISPENSE-NDDATA1(KW2,X) 
*         OR
*         NDDATA1(KW5,X) BCD ARRAY, TOTAL DUMPED+NDDATA1(KW2,X) 
*         NDDATA1(KW2,X) BCD ARRAY ZEROED 
* 
********************************************************************
PDDUMP	PROC	PORD,TNDWB1 
	PBIN	PORD
	PBIN	TNDWB1
	MOVE	TNDWB1,KW0	CASSETTE INDEX 
PDD10 
	ADD	TNDWB1,KW1	NEXT CASETTE
	CBNG	TNDWB1,CASMAX,PDD20 
	RET		DONE
PDD20 
	CBE	PORD,KW1,PDD30	BRANCH IF NOTES DUMPED

* NOTES DELIVERED: UPDATED TOATAL AMOUNT PAID/CASS. 
*     SUBTRACT AMOUNT DELIVERED FROM TOTAL AMT TO DISPENSE

	ADD	NDDATA1(KW1,TNDWB1),NDDATA1(KW2,TNDWB1)	TOTAL PAID 
	SUB	TNDREG(TNDWB1),NDDATA1(KW2,TNDWB1)	AMT LEFT TO DISPENSE
	MOVE	NDDATA1(KW2,TNDWB1),KW0	ZERO AMOUNT DISPENSED 
	B	PDD10

* NOTES NOT DELIVERED: UPDATE AMOUNT DUMPED/CASS. 

PDD30 
	ADD	NDDATA1(KW5,TNDWB1),NDDATA1(KW2,TNDWB1)	NOTES DUMPED/
	ADD	NDDUMP,NDDATA1(KW2,TNDWB1)	UPDATE TOTAL DUMPED 
	B	PDD10
	PEND 
	EJECT
********************************************************************
* 
* NAME:         IOTNDS
* 
* PURPOSE:      GET COMMANDS TO & RETURN STATUS FROM TND OF LAST I/O
*               ALSO REPORT IF ERROR OR REJECTED NOTES
* 
* CALL:         PERF  IOTNDS,TND,TNDWB1,TNDWB2
* 
* PARAMETERS: 
*   IN:         TND - TND DATA SET
*               TNDWB1 - BINARY REGISTER
*               TNDWB2 - BINARY REGISTER
*              TNDWB3 - BITS SET IN RETURN CODE TO REPORT AS ERROR
* 
*   OUT:        TNDWB1 - RETURN CODE OF I/O 
* 
* VARIABLES:
*   OUT:        TNDDVS - STRG WITH COMMANDS AND RETURN STATUS 
*               TNDREJ - STRG WITH REASON FOR LAST 15 REJECTS 
* 
********************************************************************
	EJECT
IOTNDS	PROC	TND,TNDWB1,TNDWB2,TNDWB3
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBIN	TNDWB3
	MOVE	TNDDVS,=C' '	BLANK COMMAND/STAUS STRING 
	XSTAT	TND,TNDWB1	GET RETURN CODE 
	MOVE	TNDIOL,KW4	UP TO 2 COMMANDS AND STATUS
	DSC2	TND,X'16',TNDWB2,TNDDVS,TNDIOL
	CBE	TNDIOL,KW0,IOS100
	MOVE	TNDWB2,=W'32'	BIT 10
	CALL	MASK,TNDWB1,TNDWB2	BIT 0N?
	BZ	IOS100	BR IF NO NOTES REJECTED
	MOVE	TNDWB2,=W'16'	REASONS FOR REJECT
	DSC2	TND,X'17',TNDWB2,TNDREJ,TNDWB2
* 
* TEST IF AN ERROR, BIT SET IN RETURN CODE
* IF BIT ON REPORT TO APPLICATIONS
* 
IOS100
	CALL	MASK,TNDWB1,TNDWB3	OTHER BITS ON? 
	BZ	IOS200	NO, DON'T REPORT 
	PERF	NDERR,KW0	REPORT TO APPLICATIONS
IOS200
	RET
	PEND 
	END

Full view