|
|
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: 20422 (0x4fc6)
Notes: pts_type(SC)
Names: »DRCG01.SC«
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
└─⟦this⟧ »TOSSWORK/DRCG01.SC«
IDENT DRCG01 REL 8.2 78-09-15 870105040820 * *********************************************** * * PHILIPS TERMINAL SYSTEM PTS * * DRCG01 = DRIVER CUSTOMER OPERATED TELLER (COT) * GENERAL PART * * * * * *********************************************** * * * THIS DRIVER HANDLES OUTPUT TO AND INPUT FROM THE * GENERAL PART OF THE CUSTOMER OPERATED TELLER (COT). * FOUR DEVICES OF THE COT ARE CONTROLED BY THIS DRIVER: * ---- MICROPROCESSOR * ---- CARD READER/WRITER * ---- BANKNOTE DISPENSER * ---- KEYBOARD * * THE COT MUST BE CONNECTED TO CPU VIA CHLT. * * THE DRIVER CONSISTS OF FOLLOWING PARTS: * * A C C G : ACTIVATION PART * * I H C G : INTERRUPT HANDLER * * R C C G : RECOVERY ROUTINE * EJECT * * THE FOLLOWING ORDERS ARE TREATED. * * ORDER 00: TEST STATUS * ORDER 02: SCAN PIN * ORDER 03: SCAN KEYBOARD * ORDER 06: WRITE CARD * ORDER 0A: READ CARD * ORDER 0B: PICK NOTES * ORDER 11: INSERT CARD * ORDER 22: FEED NOTES * ORDER 26: FINISH TRANSACTION * ORDER 31: RETURN CARD * ORDER 33: SWALLOW CARD * ORDER 37: OPEN COT * ORDER 38: CLOSE COT * * * NORMAL REGISTER USAGE: * * A1 = RETURN CODE * A2 = INPUT OR OUTPUT CHARACTER * A3 = BUFFER INDEX * A4 = FUNCTION INDEX * A5 = STACK BASE * A6 = DWT-ADDRESS * A7 = ORDER * A8 = ECB-ADDRESS EJECT * * RETURN CODES * * BIT 0: REQUEST ERROR * BIT 1: TRANSPORT ERROR NOTES, CARD * BIT 2: MOTOR VOLTAGE ERROR DISPENSER * BIT 3: TIMEOUT ERROR DISPENSER * BIT 4: SOLENOID ERROR DISPENSER * BIT 5: ELECTRONICS ERROR DISPENSER * BIT 6: DETECTOR ERROR DISPENSER * BIT 7: FRONT SHUTTER DOESN'T CLOSE * BIT 8: PARAMETER CARDS REQUESTED * BIT 9: INTERFACE BOARD ERROR * BIT 10: CLOSED * BIT 11: NOTES AVAILABLE TO CUSTOMER AFTER POWER BREAK * BIT 12: INCORRECT LENGTH, INCORRECT PIN, DUMP ERROR * BIT 13: NEGATIVE ACKNOWLEDGEMENT OF OPERATION * BIT 14: THROUGHPUT ERROR * BIT 15: COT NOT OPERABLE EJECT * * **************************** * ENTRIES * **************************** * ENTRY CGAD ADDRESS BLOCK * * * ****************************************** * EXTERNAL TOSS MODULE ENTRIES * ****************************************** * EXTRN SAVE8 EXTRN STREG STORE REGISTERS AND GO TO DISPATCHER EXTRN LDREG LOAD REGISTERS AND RETURN EXTRN OUTPUT SUBROUTINE TO SEND CHARACTER EXTRN DISIOE I/O REQUEST ERROR EXTRN GETCHR GET NEXT CHARACTER IN ECB-BUFFER EXTRN DISEND END I/O AND GO TO DISPATCHER EXTRN TDISP DISPATCHER ENTRY EXTRN ECHO ECHO SUBROUTINE EXTRN ECHEND END OF ECHOING EXTRN SETIMP SET TIMER EXTRN RTNA15 RETURN AND ENABLE EJECT * * ********************************* * DWT PARAMETERS * ********************************* * * EXTRN DWTST STATUS EXTRN DWTOR ORDER EXTRN DWTECB ECB-ADDRESS * ************************************** * DWT-DISPLACEMENTS * ************************************** * DWTBC EQU /3 DWTSB2 EQU /1E DWTA3 EQU /12 DWTA4 EQU /14 SAVE AREA FOR A4 DWTTP EQU /20 TIMER POINTER DWTLRC EQU /26 LRC-ACKUMULATOR KBPIN EQU /24 PIN-ECHO CHARACTER * EJECT ********************************* * CONSTANTS * ********************************* * CCB FORM 5=/1D,3,8=/21,8,8=0 CRWSTX EQU /3B CARD START CHARACTER CRWETX EQU /3F CARD END CHARACTER FEERET EQU /01 FEEF NOTES AND RETURN CARD COMMANDS SWALOW EQU /05 SWALLOW CARD COMMAND SCANK EQU /03 SCAN KEYBOARD COMMAND OPCODE EQU /11 OPEN COT COMMAND CLCODE EQU /12 CLOSE COT COMMAND FICODE EQU /13 FINISH TRANSACTION COMMAND X:A EQU /515E X:B EQU /5253 X:C EQU /5053 X:D EQU /505A X:E EQU /5051 X:F EQU /5050 X:G EQU /5051 X:H EQU /5050 X:I EQU /5052 X:J EQU /5250 X:K EQU /5154 X:L EQU /505A X:M EQU /5150 X:N EQU /5103 STARP1 EQU X:A START ADDRESS 1:ST PIN FIELD STOPP1 EQU X:B STOP ADDRESS " STARP2 EQU X:C START ADDRESS 2:ND " STOPP2 EQU X:D STOP ADDRESS " STARP3 EQU X:E START ADDRESS 3:RD " STOPP3 EQU X:F STOP ADDRESS " STARP4 EQU X:G START ADDRESS 4:TH " STOPP4 EQU X:H STOP ADDRESS " TISWCA EQU X:I TIMEOUT FOR SWALLOW CARD TIANTC EQU X:J TIMEOUT FOR ANSWER FROM TC TIPILO EQU X:K TIMEOUT FOR PIN PARAMETER LOADING TIBUZZ EQU X:L TIME FOR BUZZER ALARM LENGNO EQU X:M LENGTH OF NOTES KEYTYP EQU X:N KEYBOARD TYPE AND END CHARACTER * COTTIM EQU 30 FEED TIMEOUT EJECT * * ********************* * TABLES * ********************* * CGAD EQU * DATA ACCG ACTIVATION DRIVER DATA IHCG INTERRUPT HANDLER DATA RCCG RECOVERY ROUTINE CTTAB DATA /110A,/0631,/330B,/2202,/0338,/3726 DATA /FF CTLEN EQU *-CTTAB * FUNTAB DATA CARDIN,RECARD,WRCARD INSERT CARD, READ CARD, WRITE CARD DATA RETUCA,SWALL,PICK RETURN CARD, SWALLOW CARD, PICK NOTES DATA FEED,SCANPI,SCANKE FEED NOTES, SCAN PIN,SCAN KEYBOARD DATA CLOSE,OPEN,FITRAN CLOSE COT, OPEN COT, FINISH TRANSACTION DATA TEST TEST STATUS EJECT * * * C G A D * * ACTIVATION PART * ACCG EQU * * * ORDER CHECK * LDK A4,CTLEN ACCG10 CC A7,CTTAB-1,A4 CHECK IF LEGAL ORDER RF(E) ACCG30 FOUND SUK A4,1 RB(NZ) ACCG10 TRY NEXT ACCG20 ABL DISIOE ILLEGAL ORDER * * CHECK IF PARAMETER CARD LOADING REQUESTED. IF SO, * FINISH ALL REQUESTS WITH BIT 8 SET. * ACCG30 EQU * LDR* A1,A6 CHANNEL PARAMETER ANK A1,/80 PIN LOADING ? RF(NE) ENDIO * * CHECK IF POWER FAIL. IF SO, END REQUEST * WITH RETURN CODE BIT 14 SET. * LD A2,DWTST,A6 LDR A7,A2 ANKL A2,/400 RF(E) ACCG35 XRS A2,DWTST,A6 LDK A1,2 RF ENDIO EJECT * * CHECK IF COT CLOSED. IF SO, END ALL * REQUESTS BUT OPEN WITH RETURN CODE BIT 10. * ACCG35 EQU * CWK A4,11 RF(E) ACCG38 LDR A2,A7 SLL A2,6 RF(N) ACCG38 LDK A1,0 SUK A4,10 CLOSE ORDER ? RF(E) ENDIO YES LDK A1,/20 RF ENDIO * * MODIFY DEVICE ADDRESS DEPENDING ON KEYBOARD, * CARD READER/WRITER, OR DISPENSER ORDER AND * JUMP TO VALID FUNCTION MODULE. * ACCG38 EQU * LDK A2,5 DEVICE ADDRESS 5 CWR A4,A2 CARD READER/WRITER ORDER ? RF(G) ACCG40 NO LDK A2,3 DEVICE ADDRESS 3 ACCG40 EQU * CF A5,MODIFY MODIFY DEVICE ADDRESS ACCG50 EQU * LDK A3,0 SLL A4,1 ABI FUNTAB-2,A4 JUMP TO VALID FUNCTION MODULE EJECT * * CHECK IF CARD-IN-READER MESSAGE HAS COME * OR WAIT FOR THAT MESSAGE * CARDIN EQU * LDR A2,A7 ANK A2,/FF RF(NE) CARD10 CARD05 EQU * CF A5,STREG WAIT FOR COT MESSAGE SUK A1,3 DEVICE CODE CORRECT ? RF(NE) THRERR NO CARD10 EQU * SUK A2,/0C CARD IN READER ? RF(E) ENDIO CARD12 SUK A2,/34 FRONT SHUTTER DOESNT CLOSE ? RF(NE) CARD20 NO CARD15 EQU * LDK A1,1 FRONT SHUTTER DOESNT CLOSE RF CARD40 CARD20 ADK A2,/3E TRANSPORT ERROR ? RF(E) CARD30 YES SUK A2,2 OPERATION INCORRECT ? RF(NE) CARD22 NO CARD21 LDK A1,4 RF ENDIO CARD22 SUK A2,2 POSITIVE OPERATION ? RF(E) ENDIO YES SUK A2,7 CARD TAKEN ? RF(NE) CARD23 SUK A4,10 SWALLOW CARD REQUEST ? RB(E) CARD21 RF ENDIO CARD23 EQU * SUK A2,/13 CARD SWALLOWED ? RF(NE) CARD24 NO SUK A4,10 SWALLOW CARD ORDER ? RF(E) ENDIO RB CARD21 NO INDICATE ERROR CARD24 ADK A2,/20 RESET CHARACTER CODE CWK A4,4 READ ORDER / RF(E) RECA05 YES RF THRERR NO CARD30 EQU * LDK A1,/40 TRANSPORT ERROR CARD40 SLL A1,8 EJECT ENDIO LDK A2,0 SC A2,DWTBC,A6 CLEAR BYTE COUNTER LDKL A5,DWTSB2 LOAD STACKBASE ADR A5,A6 LDR A4,A1 SAVE A1 CF A5,ECHEND END I/O ECHO DEVICE LD A2,DWTTP,A6 TIMER ? RF(E) ENDIT CM* DWTTP,A6 CM DWTTP,A6 ENDIT EQU * LDR A1,A4 RELOAD A1 ABL DISEND EJECT * * RECARD EQU * LD A2,10,A8 GET TRACK NUMBER ADK A2,8 CAROUT EQU * CF A5,OUTPUT SEND READ TRACK COMMAND CM DWTLRC,A6 CLEAR LRC-ACKUMULATOR RB CARD05 RECA05 EQU * LDR A3,A3 FIRST CHARACTER RF(N) RECA40 NO, LRC-CHARACTER RF(NE) RECA10 NO, DATA INPUT ADK A3,/80 CCB A2,CRWSTX START CHARACTER ? RF(E) RECA25 THRERR EQU * LDK A1,2 INDICATE THROUGHPUT ERROR RB ENDIO END I/O RECA10 EQU * ANK A3,/7F CCB A2,CRWETX END CHARACTER ? RF(NE) RECA20 NO ST A3,6,A8 YES STORE EFFECTIVE LENGTH NGR A3,A3 NEGATE REGISTER RF RECA25 RECA20 EQU * CF A15,STORE STORE CHARACTER IN ECB-BUFFER CW A3,4,A8 EFF. LENGTH = REQ. LENGTH ABL(G) SCA175 RECA25 XRS A2,DWTLRC,A6 UPDATE LRC-ACKUMULATOR SUK A2,/30 VALID CODE ? RF(N) RECA30 NO SUK A2,/F NUMERIC VALUE ? RB(NP) CARD05 YES RECA30 EQU * LDK A1,4 INDICATE CODE CHECK ERROR ABL SCA200 STORE EFF. LENGTH AND END I/O RECA40 EQU * XR A2,DWTLRC,A6 CHECK LRC ANK A2,/F RB(NE) THRERR INCORRECT ENDI01 RB ENDIO STORE EFF. LENGTH AND END I/O EJECT * * WRCARD EQU * LDK A2,CRWSTX CARD START CHARACTER WRCA10 EQU * CF A5,OUTPUT SEND START CHARACTER CF A15,GETCHR GET NEXT CHARACTER IN BUFFER LDR A1,A1 LAST CHARACTER ? RB(NE) WRCA10 NO LDK A2,CRWETX CARD END CHARACTER RB CAROUT RETUCA LDK A2,FEERET RETURN CARD COMMAND RB CAROUT SWALL LDK A2,SWALOW SWALLOW CARD COMMAND RB CAROUT EJECT * * PICK EQU * LD A2,4,A8 GET NUMBER OF NOTES TO PICK ORK A2,/30 MICOUT EQU * CF A5,OUTPUT SEND PICK COMMAND LDK A3,0 RF PICK10 PICK05 EQU * LD A2,DWTST,A6 STATUS ANK A2,/FF RF(NZ) PICK15 PICK10 EQU * CF A5,STREG WAIT FOR PICK MESSAGE PICK15 EQU * LDR A7,A4 SUK A7,20 CLOSE COMMAND ? RF(E) CLOS10 YES ADK A7,6 KEYBOARD REQUEST ? RF(P) SCAN10 YES SUK A1,5 DEVICE ADDRESS VALID ? RB(NE) THRERR SUK A2,/10 LDK A7,5 LOOP COUNTER LDK A1,2 RETURN CARD BUILDSTONE MICLOP SUK A2,1 CORRECT ERRORTYPE ? RB(E) CARD40 YES SUK A7,1 LAST LOOP ? RF(E) MICEND YES SLL A1,1 PREPARE RETURN CODE RB MICLOP MICEND CWK A4,14 FEED REQUEST ? RF(E) FEED10 YES SUK A2,2 DUMP ERROR ? RF(E) SCA175 YES ADK A2,/17 RESET CHAR. CODE LDR A3,A3 PICK NUMBER RF(N) PICK25 NO, FIRST DUMP CHARACTER RF(NE) PICK30 NO, SECOND DUMP CHARACTER ANK A2,/F CW A2,4,A8 NUMBER OF PICKED NOTES CORRECT RB(NE) RECA30 ST A2,6,A8 NUMBER OF PICKED NOTES PICK20 SUK A3,1 INDICATE WAIT FOR FIRST DUMP CODE RB PICK10 PICK25 EQU * LDR A3,A2 SAVE FIRST DUMP CODE RB PICK10 PICK30 ANK A2,/F ANK A3,/F PICK40 SUK A3,1 RF(N) PICK50 ADK A2,/A RB PICK40 PICK50 ST A2,10,A8 STORE NUMBER OF DUMPED NOTES PICK60 EQU * LDK A1,0 RB ENDI01 EJECT * * CLOSE LDK A2,CLCODE CLOSE COMMAND RB MICOUT CLOS10 SUK A2,/1D CLOSED ? RB(NE) THRERR RB PICK60 FEED EQU * LDK A3,2 LDK A2,FEERET FEED NOTES COMMAND RB MICOUT OR RETURN CARD COMMAND FEED10 SUK A2,1 NOTES NOT AVAILABLE ? RB(E) RECA30 YES ADK A2,/10 NOTES AVAILABLE ? RF(NE) FEED30 LDR A3,A3 POWER BREAK ? RF(N) FEED20 YES LDK A3,1 INDICATE MONEY AVAILABLE RB PICK10 FEED20 LDK A1,/10 INDICATE MONEY AVAILABLE AFTER POWER BREAK ENDI02 EQU * RB ENDI01 FEED30 SUK A2,7 NOTES TAKEN ? FEEDER EQU * RB(NE) THRERR LDR A3,A3 POWER BREAK ? RB(N) FEED20 YES RB PICK60 EJECT * * SCANKE EQU * LDK A2,SCANK SCAN KEYBOARD COMMAND RB MICOUT SCAN10 EQU * SUK A1,1 DEVICE ADDRESS = 1 ? RF(E) SCAN12 SUK A1,4 RB(NE) FEEDER SUK A2,4 RB(E) RECA30 SUK A2,2 RB(E) ENDI01 ABL THRERR SCAN12 SUK A7,2 PIN REQUEST ? RF(E) PIN10 YES CF A15,STORE STORE CHARACTER SCAN15 LD A1,10,A8 GET KEY-TABLE ADDRESS RF(E) SCA100 NO KEYTABLE LCR A7,A1 TABLE LENGTH ANK A7,/FF ADR A1,A7 LAST PLACE IN KEY-TABLE ADK A1,1 SCAN20 SUK A7,1 RF(N) SCA100 KEY NOT FOUND IN KEYTABLE SUK A1,1 NEXT KEY CCR A2,A1 EOR-CHARACTER RB(NE) SCAN20 LDK A1,0 ADR A7,A7 YES, DOUBLE INDEX ST A7,10,A8 STORE INDEX IN CONTROL WORD RF SCA200 SCA100 CCK A2,/3030 NUMERIC CHARACTER ? ABL(N) RECA30 NO LDK A7,0 CF A5,ECHO ECHO CHAR CW A3,4,A8 LENGTH OVERFLOW ? RB(NE) PICK10 NO SCA175 LDK A1,8 SCA200 ST A3,6,A8 STORE EFFECTIVE LENGTH RB ENDI02 EJECT * * SCANPI EQU * LD A2,4,A8 GET WANTED NUMBER OF CHARACTERS LDR A3,A2 CF A5,OUTPUT SEND START COMMAND PIN05 EQU * RB PICK10 PIN10 EQU * SUK A2,4 INCORRECT PIN ? RB(E) SCA175 SUK A2,2 RB(E) ENDI02 SUK A2,/52 PIN INPUT ? RF(E) PIN20 ADK A2,/58 RESET A2 RB SCAN15 PIN20 EQU * SC A2,DWTBC,A6 RESET RECIVER BUFFER AREA LC A2,KBPIN,A6 CF A5,ECHO LDK A1,1 ABL PICK05 EJECT * * TEST EQU * LDK A2,0 RF OPEN10 FITRAN LDK A2,FICODE FINISH TRANSACTION COMMAND RF OPEN10 OPEN EQU * LDK A2,OPCODE OPEN COMMAND OPEN10 CF A5,OUTPUT LDKL A2,/200 ORS A2,DWTST,A6 ENDI03 RB ENDI02 EJECT * * * * I H C G * * INTERRUPT HANDLER * IHCG EQU * LDR A4,A2 SRL A4,12 ANK A4,7 ANK A2,/FF LD A3,DWTST,A6 GET STATUS WORD RF(NN) IHC100 BUSY LDR A3,A2 SUK A4,3 DEVICE ADDRESS 3 ? RF(NE) IHCG30 NO SUK A3,2 TRANSPORT ERROR ? RF(E) IHCG20 YES SUK A3,10 CARD IN READER MESSAGE ? RF(E) IHCG20 YES SUK A3,/34 FRONT SHUTTER DOESN'T CLOSE ? RF(NE) EXIT IHCG20 ORS A2,DWTST,A6 SET BIT IN STATUS WORD EXIT ABL TDISP EJECT IHCG30 EQU * SUK A4,2 DEVICE ADDRESS 5 ? RB(NE) EXIT NO SUK A3,/1C PIN LOADED ? RF(E) IHCG90 ADK A3,/19 STATUS REQUEST ? RB(NE) EXIT EJECT * * SEND STATUS MESSAGE * IHCG80 EQU * LDK A2,5 LDKL A5,DWTSB2 ADR A5,A6 STACK BASE CF A5,MODIFY MODIFY DEVICE ADDRESS LDKL A2,/7FFF ANS A2,DWTST,A6 SET BUSY LDK A4,28 LDKL A3,STINTA IHCG85 LCR A2,A3 GET FIRST CHARACTER CF A5,OUTPUT SEND ADK A3,1 CWK A3,STINTE LAST CHARACTER ? RB(NE) IHCG85 LDK A1,/80 ORRS A1,A6 INDICATE WAIT FOR PIN CARDS RB ENDI03 IHCG90 LDKL A1,/FF7F ANRS A1,A6 RESET PIN CARD WAIT INDICATOR RB EXIT EJECT * * DEVICE BUSY * IHC100 EQU * LDR A1,A1 RETURN CODE FROM CHLT ? RB(NE) EXIT LDR A1,A4 OUTPUT ANSWER ? RF(E) IHRET YES SUK A4,5 DEVICE ADDRESS 5 ? RF(NE) IHC200 NO ADK A3,3 STATUS REQUEST ? RB(E) IHCG80 YES SUK A3,/15 INTERFACE BOARD ERROR ? RF(NE) IHC105 LDK A1,/40 INDICATE INTERFACE BOARD ERROR RB ENDI03 IHC105 SUK A3,1 RF(NE) IHC110 NOT TRANSMISSION TIMEOUT LDK A1,2 INDICATE TRANSMISSION PROBLEMS RB ENDI03 IHC110 SUK A3,3 PIN PARAMETER LOADED MESSAGE ? RB(E) IHCG90 YES IHRET ABL LDREG IHC200 ADK A4,2 RB(E) IHRET ADK A4,2 ABL(NE) THRERR LC A4,DWTST,A6 STATUS BYTE ANK A4,1 RB(NE) IHRET SC A2,DWTST+1,A6 INDICATE ERROR RECEIVED RB EXIT EJECT * * * * R C C G * * RECOVERY ROUTINE * RCCG EQU * CF A15,SAVE8 LD A4,DWTST,A6 BUSY ? RF(N) RCCG20 LD A4,DWTA4,A6 GET FUNCTION INDEX SUK A4,28 STATUS TRANSMISSION ? RB(E) IHCG80 ADK A4,22 WRITE ? RF(E) RCCG30 YES SUK A4,8 FEED ? RF(NE) RCCG10 LD A3,DWTA3,A6 RF(NE) RCCG05 SUK A3,1 INDICATE POWER FAIL LD A4,DWTA4,A6 FUNCTION INDEX ABL PICK10 RCCG05 SUK A3,1 ABL(E) FEED20 RCCG10 LD A4,DWTST,A6 LEFT BYTE OF STATUS WORD SLL A4,3 RECOVERY BIT SET? ABL(NN) THRERR NO RB EXIT RCCG20 LDKL A1,/400 ORS A1,DWTST,A6 RB EXIT RCCG30 LD A8,DWTECB,A6 LDK A4,3 LDK A1,2 ORS A1,8,A8 ABL ACCG50 EJECT * * STORE = SUBROUTINE TO STORE CHARACTER IN * ECB-BUFFER AND INCREMENT BUFFER INDEX * STORE EQU * LD A7,2,A8 BUFFER ADDRESS ADR A7,A3 ADD BUFFER INDEX SCR A2,A7 STORE CHARACTER ADK A3,1 INCREMENT INDEX ABL RTNA15 * * * MODIFY = SUBROUTINE TO MODIFY * DEVICE ADDRESS IN DWTCHP. * MODIFY EQU * LDR* A3,A6 GET DWTCHP ANKL A3,/8FFF SRC A2,4 ORR A3,A2 STR A3,A6 RESTORE RTN A5 EJECT * * * STINTA = STATUS INFORMATION TABLE * STINTA EQU * DATA STARP1,STOPP1,STARP2,STOPP2 DATA STARP3,STOPP3,STARP4,STOPP4 DATA TISWCA,TIANTC,TIPILO,TIBUZZ DATA LENGNO,KEYTYP STINTE EQU * END