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

⟦25ba3df14⟧

    Length: 20422 (0x4fc6)
    Notes: pts_type(SC)
    Names: »DRCG01.SC«

Derivation

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

PTS(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

Full view