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

⟦f26c3dafb⟧

    Length: 49430 (0xc116)
    Notes: pts_type(SC)
    Names: »DRDC17.SC«

Derivation

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

PTS(SC)

	IDENT DRDC17 	REL 9.1 78-09-15  870103140820 

			ODD BUFFER ADDRESSES AND CREDIT
			REL 8.1 78-04-21 
******************************************************* 
* 
*   PHILIPS ELECTRONIC INDUSTRIES - TERMINAL DIVISION. PEAB-T 
* 
*   DATA COMMUNICATION DRIVER FOR PTS 6810
* 
*   LINE PROCEDURE: BSC CONTENTION/SIEMENS MSV2 
* 
* 
* 
* 
* 
******************************************************* 
* 
*   STANDARD USE OF REGISTERS : 
* 
*   A1  WORK REGISTER 
*   A2  I/O AND WORK REGISTER 
*   A3  WORK REGISTER 
*   A4  WORK REGISTER 
*   A5  STACK POINTER 
*   A6  DWT ADDRESS 
*   A7  BCC ACCUMULATOR 
*   A8  ECB ADDRESS 
* 
******************************************************* 
	EJECT
* 
******************************************************* 
* 
*	ENTRY POINTS
* 
******************************************************* 
* 
	ENTRY	DC17ON	RECOVERY AT POWER ON
* INTERRUPT HANDLERS
	ENTRY	IH1701	LINE 01 INPUT 
	ENTRY	IH1702	        OUTPUT
	ENTRY	IH1703	LINE 02 INPUT 
	ENTRY	IH1704	        OUTPUT
	ENTRY	IH1705	LINE 03 INPUT 
	ENTRY	IH1706	        OUTPUT
	ENTRY	IH1707	LINE 04 INPUT 
	ENTRY	IH1708	        OUTPUT
* DEVICE WORK TABLES
	ENTRY	DW1701	LINE 01 DWT 
	ENTRY	DW1702	LINE 02 DWT 
	ENTRY	DW1703	LINE 03 DWT 
	ENTRY	DW1704	LINE 04 DWT 
* 
	EJECT
* 
******************************************************* 
* 
*	EXTERNAL REFERENCES 
* 
******************************************************* 
* 
	EXTRN	TDISP	DISPATCHER ENTRY 
	EXTRN	TENDIO	REQUEST COMPLETION
	EXTRN	DISIOE	REQUEST ERROR 
	EXTRN	SETIME	SET TIMER CALL ADDRESS
	EXTRN	DWTST	DWT STATUS 
	EXTRN	DWTECB	DWT ECB ADDRESS 
	EXTRN	DWTOR	DWT ORDER
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRL	ECB REQUESTED LENGTH 
	EXTRN	ECBEL	ECB EFFECTIVE LENGTH 
	EXTRN	ECBRC	ECB RETURN CODE
	EXTRN	ECBCW	ECB CONTROL WORD 
	EXTRN	TASCII	CODE CONV. TABLE EBCDIC-ASCII 
	EXTRN	TEBCDIC	CODE CONV. TABLE ASCII-EBCDIC
	EXTRN	INTSAV 
	EXTRN	ILLINT	ILLEGAL INTERRUPT 
	EJECT
* 
* 
*   PARAMETERS FOR CONDITIONALLY ASSEMBLY 
* 
* 
X:A	EQU	1	<=4 
NLINE	EQU	X:A	NUMBER OF COMMUNICATION LINES 

X:B	EQU	1 
BSC	EQU	X:B	IF = 0. SIEMENS MSV2 PROCEDURE
			IF = 1. BSC PROCEDURE
X:C	EQU	1 
CODE	EQU	X:C	IF = 0. ASCII CODE 
			IF = 1. EBCDIC CODE (BSC ONLY) 
X:D	EQU	0 
TRANSP	EQU	X:D	IF = 1. EBCDIC TRANSPARANCY (BSC ONLY) 

X:E	EQU	10
TBID	EQU	X:E	BID TIME OUT VALUE (X100 MS) 

X:F	EQU	500 
LOGG	EQU	X:F	IF NOT ZERO INTERRUPT LOG INCLUDED 
			LOGG = LOG AREA LENGTH PER LINE
* DEVICE ADDRESSES
X:G	EQU	/02 
DAMI01	EQU	X:G	INPUT DEV. ADDR. LINE 01 
X:H	EQU	/22 
DAMI02	EQU	X:H	INPUT DEV. ADDR. LINE 02 
X:I	EQU	/04 
DAMI03	EQU	X:I	INPUT DEV. ADDR. LINE 03 
X:J	EQU	/05 
DAMI04	EQU	X:J	INPUT DEV. ADDR. LINE 04 
DAMU01	EQU	DAMI01+/10	OUTPUT DEV. ADDR. LINE 01 
DAMU02	EQU	DAMI02+/10	OUTPUT DEV. ADDR. LINE 02 
DAMU03	EQU	DAMI03+/10	OUTPUT DEV. ADDR. LINE 03 
DAMU04	EQU	DAMI04+/10	OUTPUT DEV. ADDR. LINE 04 
	EJECT
* 
******************************************************* 
* 
*	SYSTEM PARAMETERS 
* 
******************************************************* 
* 
TIMBID	EQU	TBID	BID TIMER:( STANDARD IS 1 S ) 
TIMTTD	EQU	20	TTD TIMER: 2 S
TIMENQ	EQU	30	ENQ TIMER: 3 S
TIMACK	EQU	30	ACK TIMER: 3 S
TIMWAC	EQU	20	WACK TIMER: 2 S 
TIMCON	EQU	20	CONNECT TIMER: 2 S
TIMWRT	EQU	200	WRITE TIMER: 20 S
* 
* 
ENQCNT	EQU	3	COUNT OUT AFTER 3 ENQ:S
WACCNT	EQU	15	COUNT OUT AFTER 15 WACK:S 
RTRCNT	EQU	4	COUNT OUT AFTER 4 TRANSMISSIONS
* 
******************************************************* 
* 
*	DEVICE WORK AREA EQUATES
* 
******************************************************* 
* 
	EJECT
* 
******************************************************* 
* 
*	DWT STATUS WORD CONTENTS
* 
******************************************************* 
* 
*	DWTST   BIT #00 : 0 = DEVICE BUSY 
*	                  1 = DEVICE NOT BUSY 
*   	        BIT #15 : 0 MODEM NOT CONNECTED
* 	                : 1 MODEM CONNECTED
* 
	EJECT
******************************************************* 
* 
*	LINE CONTROL CHARACTER EQUATES
* 
******************************************************* 
* 
PAD	EQU	/FF	TRAILING PAD
DLE	EQU	/10	DATA LINK ESCAPE
STX	EQU	/02	START OF TEXT 
ETX	EQU	/03	END OF TEXT 
	IFT	CODE=0 
SYN	EQU	/16 
EOT	EQU	/04 
ENQ	EQU	/05 
ETB	EQU	/17	END OF TRANSMISSION BLOCK 
NAK	EQU	/15	NEGATIVE ACKNOWLEDGEMENT
RVI	EQU	/3C	SEC CHAR IN RVI SEQUENCE
ACK0	EQU	/30	SEC CHAR IN ACK 0 SEQUENCE 
EXCACK	EQU	1	DIFFERENCE BETWEEN ACK0/1
	XIF
	IFT	CODE=0 
	IFT	BSC=1
WACK	EQU	/3B	SEC CHAR IN WACK SEQUENCE
	XIF
	IFT	CODE=0 
	IFT	BSC=0
WACK	EQU	/BF	SEC CHAR IN WABT SEQUENCE
			SIEMENS MSV2 PROCEDURE 
	XIF
	IFT	CODE=1	EBCDIC CHARACTER EQUATES
SYN	EQU	/32 
EOT	EQU	/37 
ENQ	EQU	/2D 
ETB	EQU	/26 
NAK	EQU	/3D 
WACK	EQU	/6B
RVI	EQU	/7C 
ACK0	EQU	/70
EXCACK	EQU	/11
	XIF
	EJECT
* 
******************************************************* 
******************************************************* 
* 
* 
*	D R I V E R  A C T I V A T I O N
* 
* 
******************************************************* 
******************************************************* 
* 
* 
DRMAD	DATA	DRMACT	DWT REFERENCE 
* 
* 
DRMACT	EQU	*
	LDK	A5,DWTSTB	SET UP A5 STACK BASE 
	ADR	A5,A6	IN CASE OF I/O START 
	LD	A1,DWTST,A6	GET CURRENT LINE STATUS 
	SUK	A7,/02 
	RF(Z)	RD	READ
	SUK	A7,/06-/02 
	RF(Z)	WR	WRITE 
	SUK	A7,/0A-/06 
	RF(Z)	RD	READ ( CREDIT ORDER= RANDOM READ )
	SUK	A7,/22-/0A 
	RF(Z)	SRVI	SEND RVI
	SUK	A7,/31-/22 
	RF(Z)	ACCALL	ACCEPT CALL 
	SUK	A7,/37-/31 
	ABL(Z)	CONNCT	CONNECT MODEM
	SUK	A7,/38-/37 
	ABL(Z)	DISCON	DISCONNECT LINE
	ABL	DISIOE	ILLEGAL ORDER 
	EJECT
* 
* 
*	ORDER 02 : READ 
* 
* 
RD	EQU	*
	ANK	A1,1	CHECK STATUS
	RF(NZ)	RD400	MODEM CONNECTED 
RD100	EQU	* 
	LDK	A1,1	RC BIT 15: MODEM NOT OPERABLE 
RD200	EQU	* 
	CF	A15,TENDIO	COMPLETE REQUEST 
RD300	EQU	* 
	ABL	TDISP	GO TO DISPATCHER 
	EJECT
* 
* 
*	START THE READ REQUEST
* 
* 
RD400	LD	A1,ECBCW,A8	GET CONTROL WORD 
	RF(Z)	RD420	NO TIME OUT SUPERVISION
	ST	A1,RD410
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START REQUEST TIMER
	DATA	RD500	TIME OUT SEQUENCE 
RD410	DATA	0	TIMER VALUE
	ST	A4,DWTRTI,A6	STORE TIMER POINTER
RD420	EQU	* 
	LD	A1,DWTXST,A6	GET PROCEDURE STATE
	ABL(Z)	BMM	IN CONTROL STATE: START RECEIVER
	LD	A1,DWTACK,A6	GET WACK DELAY INDICATOR 
	RB(Z)	RD300	NOT IN WACK DELAY - WAIT FOR ENQ OR EOT
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
	CF	A5,TRACK	SEND ACK 0/1 
	ABL	BMM	CONTINUE RECEPTION 
	EJECT
* 
* 
*	READ REQUEST TIME OUT 
* 
* 
RD500	LDR	A6,A1	READ REQUEST TIME OUT, RESTORE A6 
	LDK	A1,/40	BIT 9 FOR TIME OUT
	RB	RD200	COMPLETE READ REQUEST 
	EJECT
* 
* 
*	ORDER 06: WRITE 
* 
*   IF CONTROL CHARACTER = 0 NOT, TEXT IS ENDED BY ETB
*   IF CONTROL CHARACTER = 0    , TEXT IS ENDED BY ETX
* 
WR	EQU	*
	ANK	A1,1	CHECK STATUS
	RB(Z)	RD100	MODEM NOT CONNECTED
	LD	A1,DWTXST,A6	GET PROCEDURE STATE
	RF(Z)	BID	CONTROL STATE: BID 
	SUK	A1,1 
	RF(Z)	WR100	TRANSMIT MODE
	LDK	A1,/10	RECEIVE MODE: SEQUENCE ERROR BIT 11 
	RB	RD200	COMPLETE REQUEST
* 
* 
*	SEND BID SEQUENCE 
* 
* 
BID	LDK	A1,1
	ST	A1,DWTXST,A6	INDICATE TRANSMIT MODE 
	LDK	A1,6 
	ST	A1,DWTACK,A6	AND BID SEQUENCE 
	CM	DWTENQ,A6	RESET ENQ COUNTER 
	LDK	A1,ACK0
	ST	A1,DWTRSN,A6	INDICATE ACK 0 EXPECTED
	ABL	TRENQB	SEND ENQ TO BID 
	EJECT
* 
* 
*	START WRITE IF POSSIBLE 
* 
* 
WR100	LD	A1,DWTACK,A6	GET RESPONSE STATE
	SUK	A1,2 
	RB(NZ)	RD300	NOT IN TTD SEQUENCE 
WR110	CM	DWTRTR,A6	RSET RETRANSMIT COUNTER
	CM	DWTENQ,A6	RESET ENQ COUNTER 
	CM	DWTWAC,A6	RESET WACK COUNTER
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LDK	A1,EXCACK
	XRS	A1,DWTRSN,A6	CHANGE EXPECTED ACK 
	ABL	TRTEXT	SEND TEXT 
* 
* 
	EJECT
* 
* 
*	ORDER /22: SEND RVI 
* 
*   RVI IS SENT INSTEAD OF ACK0/1 AS AFFIRMATIVE
*   ACKNOWLEDGEMENT TO PREVIOUS TEXT RECEPTION
* 
* 
SRVI	ANK	A1,1	CHECK STATUS
	RB(Z)	RD100	MODEM NOT CONNECTED
	LD	A1,ECBCW,A8	GET CONTROL WORD
	RF(Z)	RVI120	NO TIME OUT SUPERVISION 
	ST	A1,RVI100 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START REQUEST TIMER
	DATA	RVI400
RVI100	DATA	0	TIMER VALUE 
	ST	A4,DWTRTI,A6	STORE TIMER POINTER
RVI120	LD	A1,DWTXST,A6	GET PROCEDURE STATE
	SUK	A1,2 
	RF(Z)	RVI200	RECEIVE MODE. ETX NOT RECEIVED
	LDK	A1,/10	SEQUENCE ERROR. BIT 11
	RB	RD200	COMPLETE REQUEST
RVI200	LD	A1,DWTACK,A6	GET WACK DELAY INDICATOR 
	RB(Z)	RD300	NOT IN WACK DELAY - WAIT FOR ENQ OR EOT
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
RVI300	CF	A5,TRRVI	SEND RVI 
	CF	A15,CLRTIM	RESET REQUEST TIMER
	LDK	A1,0	SET RVI SENT. RC= 0 
	CF	A15,TENDIO	COMPLETE REQUEST 
	ABL	BMM	CONTINUE RECEPTION 
* 
*   TIME OUT
* 
RVI400	LDR	A6,A1	RVI REQUEST TIME OUT,RESTORE A6
	LDK	A1,/40	TIME OUT, RC BIT 9
	RB	RD200	COMPLETE REQUEST
	EJECT
* 
* 
*	ACCEPT A CALL 
* 
* 
ACCALL	EQU	*
	ANK	A1,1 
	LDK	A1,/10	RC BIT 11 FOR SEQUENCE ERROR
	RB(NZ)	RD200	MODEM ALREADY CONNECTED 
	LD	A1,ECBCW,A8	GET CONTROL WORD
	RF(Z)	ACC110	NO TIME OUT SUPERVISION 
	ST	A1,ACC100	TIMER VALUE 
	LDR	A1,A6	PASS DWT ADDRESS 
	CF	A15,SETIME	START REQUEST TIMER
	DATA	ACC200	TIME OUT SEQUENCE
ACC100	DATA	0	TIMER VALUE 
	ST	A4,DWTRTI,A6	SAVE TIMER POINTER 
ACC110	INH
	LDK	A2,0 
	EX	DWTCSI,A6	START CHLC TO ACCEPT CALLING INDICATOR
	ABL(A)	RD300	ACCEPTED: GO TO DISPATCHER
	CF	A15,CLRTIM	STOP REQ TIMER 
ACCNOP	ABL	RD100	COMPL REQ WITH NOT OPERABLE
* 
*	TIME OUT
* 
ACC200	LDR	A6,A1	DWT ADDRESS
	LDK	A5,DWTSTB	SET UP A5 STACK BASE 
	ADR	A5,A6
	CF	A5,HALTIN	STOP CHLC 
	LDK	A1,/40	INDICATE TIME OUT, RC BIT 9 
	ABL	RD200	COMPLETE REQUEST 
	EJECT
* 
* 
*	CONNECT MODEM TO LINE 
* 
* 
CONNCT	EQU	*
	LDR	A1,A6
	CF	A15,SETIME	START TIMER
	DATA	CON100,TIMCON 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	LDKL	A2,/100+SYN	SPECIFY SYN PATTERN 
	EX	DWTCSI,A6	CIO START CONNECT MODEM 
	RF(A)	CON010 
	CF	A15,CLPTIM
	RB	ACCNOP
CON010	CF	A5,HALTIN	STOP RECEIVER, NO INTERRUPTS
	ABL	RD300	GO TO DISPATCHER 
CON100	LDR	A6,A1	TIME OUT 
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	CF	A5,HALTIN	HALT CHLC INPUT 
	ANK	A2,1 
	RF(Z)	CON110	MODEM CONNECTED 
	LDK	A1,1	MODEM NOT CONNECTED 
	RF	CON120	COMPLETE REQUEST 
CON110	LDK	A1,1 
	ORS	A1,DWTST,A6	INDICATE CONNECTED IN DWT
	CM	DWTXST,A6	CONTROL MODE
	LDK	A1,0	RETURN CODE = 0 
CON120	EQU	*
	ABL	RD200	COMPLETE REQUEST 
	EJECT
* 
* 
*	DISCONNECT MODEM FROM LINE
* 
* 
DISCON	CF	A5,DIS100	DISCONNECT
	LDK	A1,0	RETURN CODE ZERO
	ABL	RD200	COMPLETE REQUEST 
* 
* 
*	DISCONNECT SEQUENCE 
* 
* 
DIS100	CF	A5,HALTIN 
	LDK	A2,0 
	EX	DWTCSI,A6	CIO START DISCONNECT
	EX	DWTCHI,A6	HALT CHLC 
	EX	DWTSSI,A6	SST 
	LDKL	A1,/FFFE
	ANS	A1,DWTST,A6	RESET MODEM OPERABLE BIT 
	RTN	A5 
* 
* 
	EJECT
* 
******************************************************* 
******************************************************* 
* 
* 
*	R E C O V E R Y  A T  P O W E R  O N
* 
* 
******************************************************* 
******************************************************* 
* 
DRDCON	EQU	*
DC17ON	EQU	*
	LDK	A2,0	RESET INDEX 
DRM100	ADK	A2,2 
	CW	A2,DCTAB
	RF(E)	DRM150	ALL LINES PROCESSED 
	LD	A6,DCTAB,A2	GET DWT ADDRESS 
	CM	DWTXST,A6	INDICATE CONTROL STATE
	CF	A15,CLPTIM	STOP PROCEDURE TIMER IF RUNNING
DRM110	LDKL	A1,/FFFE
	ANS	A1,DWTST,A6	RESET MODEM READY BIT
	LD	A1,DWTST,A6 
	RB(N)	DRM100	NO REQUEST
	CF	A15,CLRTIM	STOP REQUEST TIMER IF RUNNING
	LDK	A1,1	RETURN CODE BIT 15: MODEM NOT READY 
	CF	A15,TENDIO	COMPLETE REQUEST 
	RB	DRM100	NEXT LINE
DRM150	RTN	A15
	EJECT
* 
******************************************************* 
******************************************************* 
* 
* 
*	P R O C E D U R E  C O N T R O L  P A R T 
* 
* 
******************************************************* 
******************************************************* 
* 
******************************************************* 
* 
*	BMM : BASIC MASTER MODE 
* 
******************************************************* 
* 
BMM	EQU	* 
	LDK	A5,DWTSTB
	ADR	A5,A6	LOAD A5 STACK BASE 
	CF	A5,HALTIN	HALT INPUT IF ANY 
	LDKL	A2,/100+SYN	SPECIFY SYN PATTERN AND CONNECT MODEM 
	EX	DWTCSI,A6	START RECEIVER
BMM100	EQU	*
	CF	A5,READP	READ CHAR
	RF(NZ)	BMM910	PARITY ERROR 
	LD	A1,DWTXST,A6	GET OPERATION MODE 
	SUK	A1,1 
	RF(Z)	TRANSM	TRANSMIT MODE/MASTER MODE 
	ABL(P)	RECEIV	RECEIVE MODE/SLAVE MODE
	EJECT
* 
*	CONTROL STATE 
* 
	CWK	A2,ENQ 
	RF(NE)	BMM900	NOT ENQ
BMM150	LD	A1,DWTST,A6	GET REQUEST STATUS
	RB(N)	BMM	NO REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2 
	RB(P)	BMM	NO READ REQUEST
	LDK	A1,2 
	ST	A1,DWTXST,A6	INDICATE RECEIVE MODE
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
	CF	A5,TRACK0	SEND ACK0	
	RB	BMM	RECEIVE TEXT
	EJECT
* 
*	CHARACTER NOT RECOGNIZED
* 
BMM900	CWK	A2,EOT 
	RF(NE)	BMM910	NOT EOT
	CM	DWTXST,A6	EOT: RESET TO CONTROL STATE 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LDK	A1,/80	COMPLETE REQUEST, RC BIT 8
	CF	A15,TENDIO
	RB	BMM 
BMM910	ANK	A2,/7F 
	SUK	A2,/7F 
	RB(Z)	BMM	RESYNCHRONIZE ON /FF 
	RB	BMM100	READ NEXT CHAR 
	EJECT
* 
* 
*	TRANSMIT MODE, RECEPTION PART 
* 
* 
TRANSM	EQU	*
	LD	A1,DWTACK,A6	GET TRANSMIT STATUS
	ABI	TRFUNC,A1	SELECT FUNCTION
* 
* 
TRFUNC	DATA	TR200	0:ACK EXPECTED
	DATA	TR400	2: TTD SEQUENCE 
	DATA	TR420	4: WACK SEQUENCE
	DATA	TR100	6: BID SEQUENCE 
	DATA	TR200	8: ACK EXPECTED AFTER TRANSMIT TIME OUT 
	EJECT
* 
* 
*	BID SEQUENCE
* 
* 
TR100	EQU	* 
	CWK	A2,ENQ 
	RF(E)	TR140	ENQ RECEIVED 
	CWK	A2,DLE 
	RB(NE)	BMM900	NOT ACK OR WACK
	CF	A5,READP	READ SECOND CHAR 
	RB(NZ)	BMM910	PARITY ERROR 
	CWK	A2,ACK0
	RF(NE)	TR120	NOT PROPER ACK
	CF	A15,CLPTIM	ACK 0 : STOP PROCEDURE TIMER 
	ABL	WR110	START TRANSMISSION 
*   NOT ACK RECEIVED
TR120	CWK	A2,WACK 
	RB(NE)	BMM900	NOT WACK 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	ABL	TRENQB	BID AGAIN 
*   ENQ RECEIVED
TR140	LDK	A1,/10	ENQ RECEIVED 
	CF	A15,TENDIO	COMPLETE WRITE, RC BIT 11
	RB	BMM150	BID ACCEPTED 
	EJECT
* 
* 
*	TRANSMIT MODE: ACK EXPECTED 
* 
* 
TR200	CWK	A2,DLE
	RF(E)	TR250	DLE RECEIVED 
	CWK	A2,NAK 
	RB(NE)	BMM900	NOT ACK, WACK , RVI OR NAK 
	CF	A15,CLPTIM	NAK: STOP PROCEDURE TIMER
	ABL	TRTEXT	RETRANSMIT TEXT 
TR210	LDK	A4,2	THROUGHPUT ERROR, RC BIT 14
TR220	EQU	* 
	CF	A5,TREOT	SEND EOT 
	CM	DWTXST,A6	INDICATE CONTROL STATE
	LDR	A1,A4	RETURN CODE
	CF	A15,TENDIO	COMPLETE REQUEST 
	ABL	TDISP	GO TO DISPATCHER 
*   DLE RECEIVED
TR250	CF	A5,READP 
	RB(NZ)	BMM910	PARITY ERROR 
	CW	A2,DWTRSN,A6	CHECK ACK
	RF(NE)	TR280	NOT PROPER ACK
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LDK	A4,0	RETURN CODE 
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A1,ECBBA,A8	GET BUFFER ADDRESS
	LC	A1,1,A1	GET CONTROL CHARACTER 
	ANK	A1,/FF 
	RB(Z)	TR220	ETX SENT: SEND EOT AND COMPLETE REQUEST
	LDK	A1,0	PROPER ACK
	CF	A15,TENDIO	COMPLETE WRITE REQUEST, RC = 0 
TR255	CF	A5,HALTIN	STOP RECEIVER
TR260	LDR	A1,A6	DWT ADDRESS 
	CF	A15,SETIME	START TIMER
	DATA	TRTTD,TIMTTD
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	LDK	A1,2 
	ST	A1,DWTACK,A6	INDICATE TTD SEQUENCE
	ABL	TDISP	GO TO DISPATCHER 
*   NOT ACK RECEIVED
TR280	CWK	A2,RVI
	RF(E)	TR320	RVI RECEIVED 
	CWK	A2,WACK
	RF(E)	TR340	WACK RECEIVED
TR285	EQU	* 
	XRK	A2,EXCACK	CHANGE ACK TYPE
	CW	A2,DWTRSN,A6
	RB(NE)	BMM900	NO ACK AT ALL
TR290	EQU	* 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	LD	A1,DWTACK,A6	ACK AFTER TRANSMIT TIME OUT? 
	RF(Z)	TR295	NO, IMPROPER ACK - SEND ENQ
	ABL	TRTEXT	YES, RETRANSMIT TEXT
TR295	EQU	* 
	ABL	TRENQ	IMPROPER ACK: SEND ENQ 
*   RVI RECEIVED
TR320	CF	A15,CLPTIM	STOP PROCEDURE TIMER
	LDK	A1,/20	INDICATE RVI RECEIVED 
	CF	A15,TENDIO	COMPLETE WRITE REQUEST, RC BIT 10
	RB	TR255	GO TO TTD SEQUENCE
*   WACK RECEIVED 
TR340	CF	A15,CLPTIM	STOP PROCEDURE TIMER
	LDK	A4,0	RETURN CODE 
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A1,ECBBA,A8	GET BUFFER ADDRESS
	LC	A1,1,A1	GET CONTROL CHARACTER 
	ANK	A1,/FF 
	RB(Z)	TR220	ETX SENT: SEND EOT AND COMPLETE REQUEST
	LDK	A1,0	WACK RECEIVED: OK 
	CF	A15,TENDIO	COMPLETE REQUEST, RC = 0 
	LDK	A1,4 
	ST	A1,DWTACK,A6	INDICATE WACK SEQUENCE 
	ABL	TRENQ	SEND ENQ 
	EJECT
* 
* 
*	TTD SEQUENCE
* 
* 
TR400	EQU	* 
	CWK	A2,NAK 
	ABL(NE)	BMM900	NOT NAK 
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
TR410	EQU	* 
	LD	A1,DWTST,A6	CHECK IF WRITE REQUEST
	RB(N)	TR260	NO REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,6 
	ABL(Z)	WR110	WRITE REQUEST 
	RB	TR260	NO WRITE REQUEST
	EJECT
* 
* 
*	WACK SEQUENCE 
* 
* 
TR420	EQU	* 
	CWK	A2,DLE 
	ABL(NE)	BMM900	NOT DLE 
	CF	A5,READP	READ CHAR AFTER DLE
	ABL(NZ)	BMM910	PARITY ERROR
	CWK	A2,WACK
	RF(NE)	TR440	NOT WACK
	CF	A15,CLPTIM	WACK: STOP PROCEDURE TIMER 
	IM	DWTWAC,A6	COUNT WACK:S
	LD	A1,DWTWAC,A6
	CWK	A1,WACCNT
	RB(L)	TR290	NOT COUNT OUT: SEND ENQ
	LDKL	A4,/0800	COUNT OUT, RC BIT 04 
	RB	TR220	SEND EOT AND COMPLETE REQUEST 
TR440	CW	A2,DWTRSN,A6 
	RB(NE)	TR285	IMPROPER ACK
	CF	A15,CLPTIM	EXPECTED ACK: STOP TIMER 
	LDK	A1,2 
	ST	A1,DWTACK,A6	INDICATE NOW IN TTD SEQUENCE 
	RB	TR410	CHECK IF WRITE IS TO BE DONE
	EJECT
* 
* 
*	RECEIVE MODE
* 
* 
RECEIV	EQU	*
	CWK	A2,ENQ 
	ABL(E)	REC400	ENQ RECEIVED: SEND LAST RESPONSE 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	ABL(NE)	BMM900	NOT DLE 
	CF	A5,READP	READ CHAR
	XIF
	CWK	A2,STX 
	ABL(NE)	BMM900	NOT STX 
	LDK	A7,0	STX: RESET BCC
	LDK	A3,0 
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A4,ECBBA,A8	GET BUFFER ADDRESS
REC100	CF	A5,READP	READ CHAR
	RF(NZ)	REC200	PARITY ERROR 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RF(NE)	REC120	TRANSPARANT TEXT 
	CF	A5,READP	READ CONTROL CHAR. - DLE PRECEEDING
	XIF
	CWK	A2,SYN 
	RB(E)	REC100	DELETE SYN
	CWK	A2,ENQ 
	RF(E)	REC220	TTD RECEIVED: SEND NAK
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RF(E)	REC120	2:ND DLE RECEIVED 
	XIF
	LD	A1,DWTST,A6 
	RF(N)	REC250	NO READ REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2 
	RF(P)	REC250	NO READ REQUEST 
	IFT	CODE=0 
	XRR	A7,A2	ACCUMULATE BCC 
	XIF
	IFT	CODE=1 
	CF	A5,CRCCAL	ACCUMULATE CRC
	XIF
	CWK	A2,ETB 
	RF(E)	REC150	ETB RECEIVED
	CWK	A2,ETX 
	RF(E)	REC160	ETX RECEIVED
	IFT	TRANSP=1 
	RF	REC200	ILLEGAL CHAR SEND NAK
REC120	EQU	*
	LD	A1,DWTST,A6 
	RF(N)	REC250	NO READ REQUEST 
	CF	A5,CRCCAL	ACCUMULATE CRC
	XIF
	CW	A3,ECBRL,A8	CHECK LENGTH
	RF(NL)	REC250	BUFFER OVERFLOW
	IFT	CODE=1 
	LC	A2,TASCII,A2	CONVERT FROM EBCDIC TO ASCII 
	XIF
	SCR	A2,A4	STORE CHAR IN BUFFER 
	ADK	A3,1	INCR COUNTER
	ADK	A4,1	INCR POINTER
	RB	REC100	NEXT CHAR
*   ETB RECEIVED
REC150	LDKL	A4,/100	PRESET RC FOR ETB, RC BIT 7 
	LDK	A1,2 
	ST	A1,DWTXST,A6	RESET RECEIVE MODE 
	RF	REC170
*   ETX RECEIVED
REC160	LDK	A4,0	PRESET RETURN CODE FOR ETX, RC = 0
	LDK	A1,3 
	ST	A1,DWTXST,A6	SET RECEIVE MODE. ETX RECEIVED 
REC170	EQU	*
	IFT	CODE=0 
	CF	A5,READP	READ BCC 
	RF(NZ)	REC220	PARITY ERROR 
	XRR	A7,A2
	ANK	A7,/7F	MASK PARITY BIT 
	XIF
	IFT	CODE=1 
	CF	A5,RDCRC	READ AND CHECK CRC 
	XIF
	RF(NZ)	REC220	BCC ERROR
	ST	A3,ECBEL,A8	STORE EFFECTIVE LENGTH
	CF	A15,CLRTIM	STOP REQUEST TIMER IF RUNNING
	LDR	A1,A4	STORE RETURN CODE
	CF	A15,TENDIO	COMPLETE READ REQUEST
	LDK	A1,EXCACK
	XRS	A1,DWTRSN,A6	CHANGE ACK TO BE SENT 
REC190	EQU	*
	LDR	A4,A4
	RF(Z)	REC410	ETX RECEIVED: SEND ALWAYS ACK 
	CF	A5,HALTIN	STOP RECEIVER 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START WACK TIMER 
	DATA	REC500,TIMWAC 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	LDK	A1,1 
	ST	A1,DWTACK,A6	SET WACK DELAY INDICATOR 
	ABL	TDISP	GO TO DISPATCHER 
REC200	CF	A5,READP	PARITY ERROR RECEIVED
	RB(NZ)	REC200	PARITY ERROR 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RB(NE)	REC200	NOT DLE
	CF	A5,READ 
	XIF
	CWK	A2,ETB 
	RF(E)	REC210	ETB RECEIVED
	CWK	A2,ETX 
	RB(NE)	REC200	NOT ETB/ETX
REC210	CF	A5,READ	READ BCC
REC220	CF	A5,TRNAK	SEND NAK 
	ABL	BMM
REC250	CF	A5,READP	NO REQUEST/BUFFER OVERFLOW 
	RB(NZ)	REC250	PARITY ERROR 
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RB(NE)	REC250	NOT DLE
	CF	A5,READ 
	XIF
	CWK	A2,ETB 
	RF(E)	REC260	ETB RECEIVED
	CWK	A2,ETX 
	RB(NE)	REC250	NOT ETB/ETX
REC260	CF	A5,READ	READ BCC
	LDK	A4,8	RETURN CODE BIT 12
	ABL	TR220	SEND EOT AND COMPLETE REQUEST
	EJECT
* 
* 
*	ENQ RECEIVED: REPEAT LAST ACKNOWLEDGMENT
* 
* 
REC400	LD	A1,DWTLRS,A6	GET LAST RESPONSE
	CWK	A1,NAK 
	RB(E)	REC220	NAK SENT
	CWK	A1,RVI 
	RF(E)	REC420	RVI SENT
	CWK	A1,WACK
	RF(NE)	REC410	WACK NOT SENT:= ACK 0/1
	LD	A1,DWTST,A6 
	RB(N)	REC190	NOT YET ANY REQUEST 
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,2 
	RF(Z)	REC410	READ REQUEST
	SUK	A1,/22-/02 
	ABL(Z)	RVI300	SEND RVI AND COMPLETE REQUEST
	RB	REC190
REC410	EQU	*
	CF	A5,TRACK	SEND ACK 0/1 
	ABL	BMM	WAIT FOR NEXT MESSAGE
REC420	EQU	*
	CF	A5,TRRVI	SEND RVI 
	ABL	BMM	CONTINUE RECEPTION 
* 
* 
	EJECT
* 
* 
*	WACK DELAY TIME OUT 
* 
* 
REC500	EQU	*
	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	CM	DWTACK,A6	RESET WACK DELAY INDICATOR
	CF	A5,TRWACK	SEND WACK 
	ABL	BMM	WAIT FOR ENQ 
	EJECT
* 
* 
*	TRANSMIT TEXT BLOCK 
* 
* 
TRTEXT	EQU	*
	IM	DWTRTR,A6	COUNT RETRANSMISSIONS 
	LD	A1,DWTRTR,A6
	CWK	A1,RTRCNT
	ABL(G)	TR210	COUNT OUT, SEND EOT 
	CF	A5,WRSYN	START TRANSMITTER AND SEND SYN 
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE
	XIF
	LDK	A2,STX 
	CF	A5,WRITEP	SEND STX
	LDK	A7,0	RESET BCC 
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LDK	A3,0	RESET CHAR COUNTER
	LD	A4,ECBBA,A8	LOAD BUFFER ADDRESS 
	ADK	A4,2	SKIP FIRST WORD IN BUFFER 
	LD	A3,ECBRL,A8	GET REQUESTED LENGTH
	SUK	A3,1	SKIP FIRST BYTE 
TRT100	EQU	*
	SUK	A3,1	DECREMENT LENGTH
	RF(NP)	TRT120	ALL TRANSMITTED
	LCR	A2,A4	GET CHAR FROM BUFFER 
	ADK	A4,1	INCR POINTER
	ANK	A2,/7F	MASK TO 7 BITS
	IFT	TRANSP=0 
	CWK	A2,ETB 
	RF(G)	TRT110	NOT ETB IN TEXT 
	CWK	A2,SYN 
	RF(NL)	TRT105	REPLACE SYN BY SPACE 
	CWK	A2,/07	CHECK CODE
	RF(NL)	TRT110	CODE /07 OR GREATER IS OK
TRT105	EQU	*
	LDK	A2,/20	REPLACE INVALID CODE BY SPACE 
	XIF
TRT110	EQU	*
	IFT	CODE=1 
	LC	A2,TEBCDI,A2	CONVERT FROM ASCII TO EBCDIC 
	XIF
	IFT	TRANSP=1 
	CWK	A2,DLE 
	RF(NE)	TRT115	NOT DLE
	CF	A5,WRBCCN	INSERT ONE DLE. NO CRC-CAL
	LDK	A2,DLE 
	XIF
TRT115	EQU	*
	CF	A5,WRITEP	SEND CHAR 
	RB	TRT100	NEXT CHAR
TRT120	EQU	*
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE. NO CRC-CAL
	XIF
	LD	A8,DWTECB,A6	GET ECB ADDRESS
	LD	A1,ECBBA,A8	GET BUFFER ADDRESS
	LC	A1,1,A1	GET CONTROL CHARACTER 
	LDK	A2,ETX 
	ANK	A1,/FF 
	RF(Z)	TRT130	WRITE LAST
	LDK	A2,ETB 
TRT130	CF	A5,WRITEP	SEND ETB/ETX
	IFT	CODE=1 
	LDR	A3,A7	SAVE CRC 
	LDR	A2,A7
	ANK	A2,/FF 
	CF	A5,WRITE	SEND 1ST CRC CHARACTER 
	ECR	A7,A3	PREPARE FOR SENDING 2ND CRC CHAR 
	XIF
	LDR	A2,A7
	ANK	A2,/FF 
	CF	A5,OUTEND	TERMINATE OUTPUT
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START ACK TIMER
	DATA	TRT200,TIMACK 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	CM	DWTACK,A6	INDICATE ACK EXPECTED 
	ABL	BMM
	EJECT
* 
* 
*	TIME OUT ON TEXT TRANSMISSION 
* 
* 
TRT200	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	LDK	A1,8 
	ST	A1,DWTACK,A6	INDICATE TRANSMIT TIME OUT 
	ABL	TRENQ	SEND ENQ 
	EJECT
* 
* 
*	SEND ENQ IN BID SEQUENCE
* 
* 
TRENQB	CF	A5,WRENQ	SEND ENQ 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START BID TIMER
	DATA	TRE200,TIMBID 
TRE100	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	ABL	BMM
* 
* 
*	BID TIME OUT
* 
* 
TRE200	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	LD	A1,DWTENQ,A6
	CWK	A1,ENQCNT
	RB(L)	TRENQB	NOT COUNT OUT: BID AGAIN
TRE210	EQU	*
	LDK	A4,/40	COUNT OUT, RC BIT 09
	ABL	TR220	SEND EOT 
	EJECT
* 
* 
*	SEND PROCEDURE ENQ
* 
* 
TRENQ	EQU	* 
	LD	A1,DWTENQ,A6	GET ENQ COUNTER
	CWK	A1,ENQCNT
	RB(G)	TRE210	ENQ COUNT OUT: SEND EOT 
	CF	A5,WRENQ	SEND ENQ 
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START TIMER
	DATA	TRE300,TIMENQ 
	RB	TRE100
* 
* 
*	TIME OUT ON PROCEDURE ENQ 
* 
* 
TRE300	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	RB	TRENQ	SEND ENQ AGAIN
* 
* 
	EJECT
* 
* 
*	TRANSMIT TTD
* 
* 
TRTTD	EQU	* 
	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	LDK	A1,3 
	ST	A1,DWTACK,A6	RESPONSE STATE = 3 DURING TTD - NAK
	CF	A5,WRSYN	START TRANSMITTER AND SEND SYN 
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE
	XIF
	LDK	A2,STX 
	CF	A5,WRITEP	SEND STX
	IFT	TRANSP=1 
	LDK	A2,DLE 
	CF	A5,WRBCCN	SEND ONE DLE
	XIF
	CF	A5,WRENQ5	SEND ENQ
	LDR	A1,A6	DWT ADDRESS
	CF	A15,SETIME	START TIMER
	DATA	TRT500,TIMENQ 
	ST	A4,DWTPTI,A6	SAVE TIMER POINTER 
	ABL	BMM
* 
* 
*	NO RESPONSE ON TTD SEQUENCE 
* 
* 
TRT500	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTBOAD A5 STACK BASE 
	ADR	A5,A6
	ABL	TR410	CHECK IF WRITE REQUEST PRESENT 
	EJECT
* 
* 
*	WRSYN : START TRANSMITTER IF 2-WIRE LINE
*	        AND SEND SYN
* 
* 
WRSYN	EQU	* 
	CF	A5,HALTIN	HALT RECEIVER IF ACTIVE 
	EX	DWTCSU,A6	START TRANSMITTER 
	LDR	A1,A6	DWT ADDRESS
	STR	A4,A15	SAVE A4 ON STACK
	CF	A15,SETIME	START MODEM TRANSMIT TIMER 
	DATA	WROUT,TIMWRT
	ST	A4,DWTMTI,A6	SAVE TIMWR POINTER 
	LDR*	A4,A15	GET A4 FROM STACK
	CF	A5,READ 	WAIT FOR INTERRUPT 
	LDK	A2,SYN 
	CF	A5,WRITE	SEND SYN 
	LDK	A2,SYN 
	CF	A5,WRITE	SEND SYN 
	LDK	A2,SYN 
	CF	A5,WRITE	SEND SYN 
	RTN	A5 
	EJECT
* 
* 
*	WROUT: TRANSMIT TIME OUT
*	       = MODEM ERROR
* 
* 
WROUT	EQU	* 
	LDR	A6,A1	RESTORE DWT ADDRESS
	LDK	A5,DWTSTB	LOAD A5 STACK BASE 
	ADR	A5,A6
	CF	A15,CLPTIM	STOP PROCEDURE TIMER 
	EX	DWTCHU,A6	HALT TRANSMITTER
	EX	DWTSSU,A6 
	ABL	SST150	COMPLETE REQUEST. MODEM NOT OPERABLE
	EJECT
* 
* 
*	TREOT : SEND SINGLE EOT 
* 
* 
TREOT	EQU	* 
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
	LDK	A2,EOT 
OUTEND	EQU	*
	CF	A15,CLMTIM	STOP MODEM TRANSMIT TIMER
	CF	A5,WRITEP	SEND CHARACTER
	LDK	A2,PAD 
	CF	A5,WRITE	SEND PAD 
	LDK	A2,PAD 
	CF	A5,WRITE
	EX	DWTCHU,A6	HALT OUTPUT 
	EX	DWTSSU,A6	SST OUTPUT
	RTN	A5 
* 
* 
*	WRENQ : SEND SINGLE ENQ 
* 
* 
WRENQ	EQU	* 
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
WRENQ5	EQU	*
	IM	DWTENQ,A6	COUNT ENQ:S SENT
	LDK	A2,ENQ 
	RB	OUTEND
	EJECT
* 
* 
*	TRNAK : SEND SINGLE NAK 
* 
* 
TRNAK	EQU	* 
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
	LDK	A2,NAK 
	ST	A2,DWTLRS,A6	SAVE LAST RESPONSE 
	RB	OUTEND
* 
	EJECT
* 
*	TRACK : SEND ACK-0 OR ACK-1 
* 
* 
TRACK	EQU	* 
	LD	A3,DWTRSN,A6	GET  PROPER ACK TO BE SENT 
TRA100	EQU	*
	CF	A5,WRSYN	START OUTPUT AND SEND SYN
	LDK	A2,DLE 
	CF	A5,WRITE	SEND DLE 
	LDR	A2,A3
	ST	A2,DWTLRS,A6	SAVE LAST RESPONSE 
	RB	OUTEND
* 
* 
*	TRWACK : SEND WACK
* 
* 
TRWACK	EQU	*
	LDK	A3,WACK
	RB	TRA100
	EJECT
* 
* 
*	TRACK0 : SEND ACK 0 
* 
* 
TRACK0	LDK	A3,ACK0
	ST	A3,DWTRSN,A6	STORE PROPER ACK 
	RB	TRA100
* 
* 
*	TRRVI : SEND RVI
* 
* 
TRRVI	LDK	A3,RVI
	RB	TRA100
	EJECT
* 
* 
*	HALTIN : HALT INPUT CHANNEL 
* 
* 
HALTIN	EX	DWTCHI,A6	HALT INPUT
	EX	DWTSSI,A6	SST INPUT 
	RTN	A5 
* 
* 
*	CLEAR PROCEDURE TIMER IF RUNNING
* 
* 
CLPTIM	LD	A1,DWTPTI,A6	GET TIMER POINTER
	RF(Z)	CLPRTN	NO TIMER RUNNING
	CM*	DWTPTI,A6	STOP TIMER 
	CM	DWTPTI,A6	CLEAR TIMER POINTER 
CLPRTN	ADKL	A15,4 
	ABR*	A15	RETURN
* 
* 
*	CLEAR REQUEST TIMER IF RUNNING
* 
* 
CLRTIM	LD	A1,DWTRTI,A6	GET TIMER POINTER
	RB(Z)	CLPRTN	NO TIMER RUNNING
	CM*	DWTRTI,A6	STOP TIMER 
	CM	DWTRTI,A6	CLEAR TIMER POINTER 
	RB	CLPRTN
* 
	EJECT
* 
* 
*	CLEAR MODEM TRANSMIT TIMER IF RUNNING 
* 
* 
CLMTIM	EQU	*
	LD	A1,DWTMTI,A6	GET TIMER POINTER
	RB(Z)	CLPRTN	NO TIMER RUNNING
	CM*	DWTMTI,A6	STOP TIMER 
	CM	DWTMTI,A6	CLEAR TIMER POINTER 
	RB	CLPRTN
	EJECT
* 
* 
*	SST SEQUENCE FOR INPUT CHANNEL
* 
* 
SSTIN	EQU	* 
	EX	DWTSSI,A6	SST INSTRUCTION 
**LOGG
	IFF	LOGG=0 
	LD	A5,DWTSAV+4,A6
	CF	A5,LOGSST	LOGG INPUT SST
	XIF
	LDR	A1,A2
	ANK	A1,1 
	ABL(Z)	BMM	MODEM OPERABLE
	ANK	A2,/40 
	RF(Z)	SST150	NOT CALLING INDICATOR 
	LD	A1,DWTST,A6	CALLING INDICATOR 
	ABL(N)	BMM	NO REQUEST
	LD	A1,DWTOR,A6	GET ORDER 
	SUK	A1,/31 
	ABL(NZ)	BMM	NOT ACCEPT CALL REQUEST
	CF	A15,CLRTIM	STOP REQUEST TIMER 
	LDK	A1,0	RETURN CODE ZERO
	ABL	RD200	COMPLETE REQUEST 
SST150	LDKL	A1,/FFFE	MODEM NOT OPERABLE 
	ANS	A1,DWTST,A6	RESET MODEM OPERABLE BIT 
	CF	A15,CLRTIM	STOP REQUEST TIMER 
	ABL	RD100	COMPLETE REQUEST AND GO TO DISPATCHER
	EJECT
* 
* 
*	WRITEP : GENERATE PARITY AND SEND CHARACTER 
* 
* 
WRITEP	EQU	*
	IFT	CODE=0 
	ECR	A1,A2
	ORK	A2,/80 
WRP100	EQU	*
	SLL	A1,1 
	RB(P)	WRP100 
	RF(Z)	WRP110 
	XRK	A2,/80 
	RB	WRP100
WRP110	EQU	*
	XIF
	RF	WRITE 
* 
* 
*	WRITE : TRANSMIT ONE CHARACTER
* 
* 
WRITE	EQU	* 
	IFT	CODE=0 
	XRR	A7,A2	ACCUMULATE BCC 
	XIF
	IFT	CODE=1 
	CF	A5,CRCCAL	ACCUMULATE CRC
	XIF
WRBCCN	EQU	*
	EX	DWTOTR,A6	PERFORM OTR INSTRUCTION 
**LOGG
	IFF	LOGG=0 
	RF(NA)	WRIT10
	CF	A5,LOGOUT	LOGG OUTPUT CHARACTER 
	XIF
WRIT10	EQU	*
	RF	READ	SAVE REGISTERS 
	EJECT
* 
* 
*	READP : READ CHARACTER AND CHECK PARITY 
*	        ON PARITY ERROR CR NOT ZERO 
* 
* 
READP	EQU	* 
	CF	A5,READ	READ CHARACTER
	IFT	CODE=0 
	ECR	A3,A2
	LDR	A1,A2
REP10	EQU	* 
	SLL	A3,1 
	RF(Z)	REP20
	RB(NN)	REP10 
	XRK	A1,/80 
	RB	REP10 
REP20	EQU	* 
	LD	A3,DWTSAV,A6	RESTORE A3 
	XRK	A1,/80 
	ANK	A2,/7F 
	ADK	A5,4 
	ANK	A1,/80 
	XIF
	IFT	CODE=1 
	ADK	A5,4 
	ANK	A1,0	SET CR TO ZERO

	XIF
	ABR*	A5
	EJECT
* 
*	READ : SAVE REGISTER A3-A5,A7,A8
*	       GO TO DISPATCHER 
* 
READ	EQU	*
	ST	A3,DWTSAV,A6
	ST	A4,DWTSAV+2,A6
	ST	A5,DWTSAV+4,A6
	ST	A7,DWTSAV+6,A6
	ST	A8,DWTSAV+8,A6
	ABL	TDISP	GO TO DISPATCHER 
	IFT	CODE=1 
	EJECT
* 
* 
*	CALCULATION OF CRC
* 
*	A2 = CHARACTER
*	A7 = ACCUMULATED CRC
* 
* 
CRCCAL	EQU	*
	ST	A1,CRCSAV 
	ST	A2,CRCSAV+2 
	ST	A3,CRCSAV+4 
	LDK	A1,8 
CRC100	LDR	A3,A7
	SRL	A7,1 
	XRR	A3,A2
	SRL	A2,1 
	ANK	A3,1 
	RF(Z)	CRC110 
	XRKL	A7,/A001
CRC110	SUK	A1,1 
	RB(NZ)	CRC100
	LD	A1,CRCSAV 
	LD	A2,CRCSAV+2 
	LD	A3,CRCSAV+4 
	RTN	A5 
CRCSAV	RES	3
	EJECT
* 
* 
*	READ AND CHECK CRC
* 
*	ON RETURN CR=0 IF CRC IS OK 
* 
* 
RDCRC	EQU	* 
	CF	A5,READ	READ 1ST CRC CHAR 
	XRR	A7,A2	CHECK WITH ACCUMULATED 
	CF	A5,READ	READ 2ND CRC CHAR 
	ECR	A7,A7
	ADK	A5,4 
	XRR	A2,A7	CHECK CRC AND SET CR 
	ABR*	A5	RETURN 
	XIF
	EJECT
******************************************************* 
* 
*	INTERRUPT HANDLER , CHLC RECEIVER 
* 
******************************************************* 
* 
IHLCIN	EQU	*
IH1701	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1701	LOAD DWT ADDRESS
	INR	A2,0,DAMI01	GET CHARACTER FROM LINR
IHI100	EQU	*
	ABL(NA)	SSTIN
**LOGG
	IFF	LOGG=0 
	LD	A5,DWTSAV+4,A6
	CF	A5,LOGIN	LOGG INPUT CHARACTER 
	XIF
IHI110	EQU	*
	LD	A3,DWTSAV,A6
	LD	A4,DWTSAV+2,A6
	LD	A5,DWTSAV+4,A6
	LD	A7,DWTSAV+6,A6
	LD	A8,DWTSAV+8,A6
	RTN	A5 
	IFF	NLINE=1
	EJECT
* 
* 
* 
IH1703	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1702	LOAD DWT ADDRESS
	INR	A2,0,DAMI02	GET CHARACTER FROM LINE
	RB	IHI100
	IFF	NLINE=2
* 
* 
* 
IH1705	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1703	LOAD DWT ADDRESS
	INR	A2,0,DAMI03	GET CHARACTER FROM LINE
	RB	IHI100
	IFF	NLINE=3
* 
* 
* 
IH1707	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1704	LOAD DWT ADDRESS
	INR	A2,0,DAMI04	GET CHARACTER FROM LINE
	RB	IHI100
	XIF
	EJECT
******************************************************* 
* 
*	INTERRUPT HANDLER , CHLC TRANSMITTER
* 
******************************************************* 
* 
* 
* 
IHLCUT	EQU	*
IH1702	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1701	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	IFF	NLINE=1
	EJECT
* 
* 
* 
IH1704	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1702	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	IFF	NLINE=2
* 
* 
* 
IH1706	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1703	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	IFF	NLINE=3
* 
* 
* 
IH1708	EQU	*
	ST	P,INTSAV
	CF	A15,IHSAV8	SAVE A1-A8 ON A15 STACK
	LDKL	A6,DW1704	LOAD DWT ADDRESS
	RB	IHI110	LOAD REGISTERS 
	XIF
	EJECT
* 
*	ILLEGAL INTERRUPTS
* 
	IFF	NLINE=4
IH1707	EQU	*
IH1708	EQU	*
	IFF	NLINE=3
IH1705	EQU	*
IH1706	EQU	*
	IFF	NLINE=2
IH1703	EQU	*
IH1704	EQU	*
	XIF
	ST	P,INTSAV
	LDK	A1,/5	INDICATE ILLEGAL INTERRUPT 
	ABL	ILLINT	ILLEGAL INTERRUPT ROUTINE 
******************************************************* 
* 
*	SUBROUTINE TO SAVE A1-A8 ON A15 STACK 
* 
******************************************************* 
IHSAV8	EQU	*
	STR	A3,A15 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	STR	A7,A15 
	STR	A8,A15 
	LD	A3,16,A15	GET RETURN ADDRESS
	ST	A1,16,A15 
	ST	A2,14,A15 
	ABR	A3 
	EJECT
* 
* 
*	DCTAB: LINE CONFIGURATION TABLE 
* 
* 
DCTAB	EQU	* 
	DATA	DCTABE-DCTAB	TABLE LENGTH 
	DATA	DW1701
	IFF	NLINE=1
	DATA	DW1702
	IFF	NLINE=2
	DATA	DW1703
	IFF	NLINE=3
	DATA	DW1704
	XIF
DCTABE	EQU	*
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 01 
* 
* 
DW1701	EQU	*
	DATA	DAMU01	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
DWTRTI	EQU	*-DW1701 
	DATA	0	REQUEST TIMER POINTER 
DWTPTI	EQU	*-DW1701 
	DATA	0	PROCEDURE TIMER POINTER 
DWTMTI	EQU	*-DW1701 
	DATA	0	MODEM TRANSMIT TIMER POINTER
DWTSAV	EQU	*-DW1701 
	RES	5	SAVE AREA FOR A3-A5,A7,A8
DWTXST	EQU	*-DW1701 
	DATA	0	PROCEDURE STATUS: 0= CONTROL STATE
			                  1= TRANSMISSION MODE 
			                  2= RECEIVE MODE
			                  3= RECEIVE MODE, ETX REC.
DWTACK	EQU	*-DW1701 
	DATA	0	RESPONSE STATE
			0= ACK EXPECTED
			1= WACK SEQ. DELAY (REC) 
			2= TTD SEQ. DELAY (TRANS)
			3= TTD SEQ. WAIT FOR NAK (TRANS) 
			4= WACK SEQ. (TRANS) 
			6= BID SEQ.
			8= ACK EXP. AFTER TRANSMIT TIME OUT
DWTENQ	EQU	*-DW1701 
	DATA	0	ENQ COUNTER 
DWTRSN	EQU	*-DW1701 
	DATA	0	ACK TO BE SENT/RECEIVED 
DWTWAC	EQU	*-DW1701 
	DATA	0	WACK COUNTER
DWTRTR	EQU	*-DW1701 
	DATA	0	RETRANSMISSION COUNTER
DWTLRS	EQU	*-DW1701 
	DATA	NAK	LAST SENT RESPONSE
	RES	10	A5 STACK
DWTSTB	EQU	*-DW1701-2	STACK BASE
DWTOTR	EQU	*-DW1701 
	OTR	A2,0,DAMU01
DWTSSI	EQU	*-DW1701 
	SST	A2,DAMI01
DWTSSU	EQU	*-DW1701 
	SST	A2,DAMU01
DWTCSI	EQU	*-DW1701 
	CIO	A2,1,DAMI01
DWTCSU	EQU	*-DW1701 
	CIO	A2,1,DAMU01
DWTCHI	EQU	*-DW1701 
	CIO	A2,0,DAMI01
DWTCHU	EQU	*-DW1701 
	CIO	A2,0,DAMU01
**LOGG
	IFF	LOGG=0 
LOGPNT	EQU	*-DW1701 
	DATA	LGST01
LOGSTA	EQU	*-DW1701 
LGST01	EQU	*
	RES	LOGG 
LOGEND	EQU	*-DW1701-4 
SAVE2	EQU	*-DW1701
	DATA	0 
SAVE3	EQU	*-DW1701
	DATA	0 
	XIF
* 
	IFF	NLINE=1
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 02 
* 
* 
DW1702	EQU	*
	DATA	DAMU02	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	DATA	0	REQUEST TIMER POINTER 
	DATA	0	PROCEDURE TIMER POINTER 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	RES	5	SAVE AREA FOR A3-A5,A7,A8
	DATA	0	PROCEDURE STATUS
	DATA	0	RESPONSE STATUS 
	DATA	0	ENQ COUNTER 
	DATA	0	ACK TO BE SENT/RECEIVED 
	DATA	0	WACK COUNTER
	DATA	0	RETRANSMISSION COUNTER
	DATA	NAK	LAST SENT RESPONSE
	RES	10	A5 STACK
	OTR	A2,0,DAMU02
	SST	A2,DAMI02
	SST	A2,DAMU02
	CIO	A2,1,DAMI02
	CIO	A2,1,DAMU02
	CIO	A2,0,DAMI02
	CIO	A2,0,DAMU02
**LOGG
	IFF	LOGG=0 
	DATA	LGST02
LGST02	EQU	*
	RES	LOGG 
	DATA	0 
	DATA	0 
	XIF
* 
	IFF	NLINE=1
	IFF	NLINE=2
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 03 
* 
* 
DW1703	EQU	*
	DATA	DAMU03	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	DATA	0	REQUEST TIMER POINTER 
	DATA	0	PROCEDURE TIMER POINTER 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	RES	5	SAVE AREA FOR A3-A5,A7,A8
	DATA	0	PROCEDURE STATUS
	DATA	0	RESPONSE STATUS 
	DATA	0	ENQ COUNTER 
	DATA	0	ACK TO BE SENT/RECEIVED 
	DATA	0	WACK COUNTER
	DATA	0	RETRANSMISSION COUNTER
	DATA	NAK	LAST SENT RESPONSE
	RES	10	A5 STACK
	OTR	A2,0,DAMU03
	SST	A2,DAMI03
	SST	A2,DAMU03
	CIO	A2,1,DAMI03
	CIO	A2,1,DAMU03
	CIO	A2,0,DAMI03
	CIO	A2,0,DAMU03
**LOGG
	IFF	LOGG=0 
	DATA	LGST03
LGST03	EQU	*
	RES	LOGG 
	DATA	0 
	DATA	0 
	XIF
* 
	IFF	NLINE=1
	IFF	NLINE=2
	IFF	NLINE=3
	EJECT
* 
* 
*	DEVICE WORK TABLE FOR LINE 04 
* 
* 
DW1704	EQU	*
	DATA	DAMU04	DEVICE ADDRESS 
	DATA	/8000	STATUS , /8000 MEANS DEVICE READY 
	DATA	0	ECB ADDRESS 
	DATA	0	ORDER 
	DATA	DRMAD	POINTER TO ADDRESS BLOCK
	DATA	0	TTAB ADDRESS
	DATA	0	WAIT/ACTIVATE INDICATOR 
	DATA	0	TASK QUEUE FOR THIS DEVICE
	DATA	0	REQUEST TIMER POINTER 
	DATA	0	PROCEDURE TIMER POINTER 
	DATA	0	MODEM TRANSMIT TIMER POINTER
	RES	5	SAVE AREA FOR A3-A5,A7,A8
	DATA	0	PROCEDURE STATUS
	DATA	0	RESPONSE STATUS 
	DATA	0	ENQ COUNTER 
	DATA	0	ACK TO BE SENT/RECEIVED 
	DATA	0	WACK COUNTER
	DATA	0	RETRANSMISSION COUNTER
	DATA	NAK	LAST SENT RESPONSE
	RES	10	A5 STACK
	OTR	A2,0,DAMU04
	SST	A2,DAMI04
	SST	A2,DAMU04
	CIO	A2,1,DAMI04
	CIO	A2,1,DAMU04
	CIO	A2,0,DAMI04
	CIO	A2,0,DAMU04
**LOGG
	IFF	LOGG=0 
	DATA	LGST04
LGST04	EQU	*
	RES	LOGG 
	DATA	0 
	DATA	0 
	XIF
* 
	EJECT
* 
* 
*	DUMMY DWT 
* 
* 
	IFF	NLINE=4
DW1704	EQU	*
	IFF	NLINE=3
DW1703	EQU	*
	IFF	NLINE=2
DW1702	EQU	*
	XIF
	DATA	0	DUMMY DWT 
	DATA	0	STATUS BUSY 
	EJECT
* 
* 
*	INTERRUPT LOGGING ROUTINE 
* 
*	LOG LABELING BIT0-7 
*	INPUT CHARACTER MARKED  /11 
*	OUTPUT CHARACTER MARKED /00 
*	INPUT STATUS MARKED    /1F
*	OUTPUT STATUS MARKED   /0F - NOT USED 
* 
	IFF	LOGG=0 
LOGSST	ST	A2,SAVE2,A6 
	ORKL	A2,/1F00
	RF	LOG10 
LOGOUT	ST	A2,SAVE2,A6 
	ORKL	A2,/0000
	RF	LOG10 
LOGIN	CWK	A2,/FF
	RF(E)	LOGE10 
	ST	A2,SAVE2,A6 
	ORKL	A2,/1100
LOG10	ST	A3,SAVE3,A6
	LD	A3,LOGPNT,A6
	STR	A2,A3
	ADK	A3,2 
	SUR	A3,A6
	CWK	A3,LOGEND
	RF(L)	LOGEXI 
	LDKL	A3,LOGSTA 
LOGEXI	EQU	*
	ADR	A3,A6
	ST	A3,LOGPNT,A6
	LD	A2,SAVE2,A6 
	LD	A3,SAVE3,A6 
LOGE10	RTN	A5 
	XIF
* 
* 
	END

Full view