|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 33388 (0x826c)
Notes: pts_type(SC)
Names: »IOTND.SC«
└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
└─⟦this⟧ »PTSDEMO/IOTND.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