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

⟦d53fda716⟧

    Length: 6452 (0x1934)
    Notes: pts_type(SC)
    Names: »TNDPAY.SC«

Derivation

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

PTS(SC)

 IDENT TNDPAY REL=9.2 VER=ND 80-004-14
			UPD 3 80-04-14 / BORO
			TND BLOCKED TEST CHANGED 
			& TND RELEASED AFTER REPORT
			UPD 2 80-02-07 / BORO
			REPEAT LAST DISPENSE 
			UPD 1 80-02-05 / BORO
			ADD SEPARATE DELIVER FUNCTION
* 
* NAME:         TNDPAY
* 
* PURPOSE:      DISPENSE MONEY IN MAX SIZE BUNDLES WHEN TND 
*               OPEN-NORMALLY USED FOR BANK TRANSACTIONS
* 
* CALL:    PERF TNDPAY,AMT,TND,TNDWB1,TNDWB2,TNDWB3,TNDWD1,TNDWS1,TNDBUF
*               RET   0                 UNABLE TO PAY 
*               RET   2                 PART PAID,CASS. EMPTY OR ERROR
*               RET   4                 TOTAL REQUESTED AMOUNT PAID 
* 
* PARAMETERS: 
*    IN:  TND-TND DATA SET, INDICATING TELLER TO PAY
*         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 
*    OUT: AMT-BCD ELEMENT, UPDATED BY ADDING THE AMOUNT DELIVERED 
* 
* VARIABLES 
*   IN:   TNDREG(X)-BCD ARRAY, EACH ELEMENT REPRESENTING A CASSETTE 
*                  AND CONTAINING NUMBER OF NOTES TO DELIVER
*         TNDBAD
*         TNDRCF
*         TNDREPA 
*         TNDOPF
*         TNDBLK
*         CASMAX
*         MAXOUT
* SCRATCH TNDWB1
*         TNDWB2
*         TNDWD1
*         DELAMT
*         TNDWB3
*         TNDST 
*         NDDATA1(KW2,X)
*         CASEMP
*         PAYOK 
* 
	DDUM	DEMODD
	PDIV 
	ENTRY	TNDPAY 
	EXPROC	IOTND	TND I/O SUBROUTINE
	EXPROC	TNDREM	CALC. AMT LEFT IN CASSETTE 
	EXPROC	NDERR	REPORT TO APPL CASSETTE EMPTY 
	EJECT
TNDPAY	PROC	AMT,		C 
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWB3,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
	PBCD	AMT 
	PDSET	TND
	PBIN	TNDWB1
	PBIN	TNDWB2
	PBIN	TNDWB3
	PBCD	TNDWD1
	PSTRG	TNDWS1 
	PSTRG	TNDBUF 
	TBT	TNDBAD,TNDP00	RET. IF TND BAD
	TBT	TNDRCF,TNDP00	RET. IF REJECT CASS FULL 
	TBT	TNDBLK,TNDP00	RET. IF TNDADM FUNC. RUNNING 
	TBT	TNDOPF,TNDP10	RET. IF CLOSED 
TNDP00
	RET		TND BLOCKED FROM DISPENSE 
* 
* DISPENSING ALLOWED, INITIALIZE
* 
TNDP10
	CLEAR	PAYOK
	CLEAR	CASEMP 
* 
* SET UP FOR DISPENSE 
* 
TNDP20
	MOVE	TNDWB3,MAXOUT 
	MOVE	DELAMT,KW0
	MOVE	TNDWB1,KW0
* 
* TEST IF LOOPED THROUGH CASSETTES
* 
TNDP25
	ADD	TNDWB1,KW1 
	CBG	TNDWB1,CASMAX,TNDP45 
	MOVE	NDDATA1(KW2,TNDWB1),KW0 
* 
* TEST IF DISPENSE REQUESTED FOR THIS CASSETTE
* 
	SUB	TNDREG(TNDWB1),='0'
	BZ	TNDP25
* 
* TEST IF DISPENSE ALLOWED FROPM THIS CASSETTE
	SUB	NDDATA2(KW2,TNDWB1),='0' 
	BNZ	TNDP30 
	SET	CASEMP 
	B	TNDP25 
* 
* DETERMINE  NOTES TO DISPENSE FROM THIS CASSETTE, THIS TIME
* 
TNDP30
	MOVE	NDDATA1(KW2,TNDWB1),TNDWB3
	MOVE	TNDWB2,TNDREG(TNDWB1) 
	CBG	TNDWB2,TNDWB3,TNDP35	BRANCH IF TOO MUCH
	MOVE	NDDATA1(KW2,TNDWB1),TNDREG(TNDWB1)
* 
* TEST IF ENOUGH LEFT IN CASSETTE 
* 
TNDP35
	PERF	TNDREM,TNDWB1,TNDWD1	CALC. NOTES LEFT IN CASS.
	SUB	TNDWD1,NDDATA1(KW2,TNDWB1) 
	BNN	TNDP40 
	ADD	NDDATA1(KW2,TNDWB1),TNDWD1	SUB OVERFLOW
	BP	TNDP40	STILL SOME LEFT
	MOVE	NDDATA2(KW2,TNDWB1),KW0	BLOCK CASSETTE
	PERF	NDERR,KW6	TELL APPL. ABOUT EMPTY CASS.
	SET	CASEMP 
	B	TNDP25	NEXT CASSETTE 
* 
* UPDATE NO. OF NOTES LEFT TO DISPENSE,  THIS TIME
* 
TNDP40
	MOVE	TNDWB2,NDDATA1(KW2,TNDWB1)
	SUB	TNDWB3,TNDWB2
* 
* CALCULATE AMOUNT FROM NUMBER OF NOTES 
	MOVE	TNDWD1,NOTES(TNDWB1)
	MUL	TNDWD1,NDDATA1(KW2,TNDWB1) 
	ADD	DELAMT,TNDWD1
	B	TNDP25 
	EJECT
* 
* TEST IF ANYTHING TO DISPENSE
* 
TNDP45
	CBE	TNDWB3,MAXOUT,TNDP50 
* 
* DISPENSE, IF CASSETTE EMPTY, TRY AGAIN WITHOUT THAT CASSETTE
* 
	PERF	IOTND,KW3,		C 
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWB3,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF
* BRANCH ON RETURN STATUS:
* TND ERROR, TND BLOCKED, CASSETTE EMPTY
	IB	TNDST,TNDPER,TNDPER,TNDP20

* DISPENSE SUCCESSFUL, DELIVER NOTES

	PERF	IOTND,KW4,		C 
		TND,		C 
		TNDWB1,		C
		TNDWB2,		C
		TNDWB3,		C
		TNDWD1,		C
		TNDWS1,		C
		TNDBUF

* BRANCH ON RETURN STATUS:
* TND ERROR, TND BLOCKED, POWER FAIL BETWEEN DISPENSE & DELIVER 

	IB	TNDST,TNDPER,TNDPER 
	ADD	AMT,DELAMT 
	SET	PAYOK
	B	TNDP20 
	EJECT
* 
*DELIVERED WHAT WE COULD, DETACH TND, TEST IF ANYTHING PAID 
* 
TNDP50
* 
* REPORT ANY CASSETTES THAT ARE EMPTY BUT NOT REPORTED
* BY "IOTND"  BECAUSE DISPENSE WAS SUCCESSFUL 
* 
	MOVE	TNDWB1,KW0	CASSETTE INDEX 
TNDP52
	ADD	TNDWB1,KW1	NEXT CASSETTE 
	CBG	TNDWB1,CASMAX,TNDP53	BRANCH IF DONE
	SUB	NDDATA2(KW2,TNDWB1),='0' 
	BZ	TNDP52	ALREADY REPORTED EMPTY?
	PERF	TNDREM,TNDWB1,TNDWD1	GET AMOUNT REMAINING 
	SUB	TNDWD1,=D'0'	AMOUNT REMAINING
	BP	TNDP52	NOT EMPTY
	MOVE	NDDATA2(KW2,TNDWB1),KW0	FLAG CASSETTE AS EMPTY
	PERF	NDERR,KW6	REPORT TO APPLICATIONS
	B	TNDP52	NEXT CASSETTE 
TNDP53
	TBT	PAYOK,TNDP55 
	RET
* 
* PAID SOMETHING
* 
TNDP55
	TBT	CASEMP,TNDPER1 
* 
* PAID ALL
* 
	RET	4
	EJECT
* 
* ERROR  TEST IF ANYTHING PAID
* 
TNDPER
	TBT	PAYOK,TNDPER1
	RET
* 
* ERROR BUT PAID PART 
* 
TNDPER1 
	RET	2
	PEND 
	END

Full view