|
|
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: 188708 (0x2e124)
Notes: pts_type(SC)
Names: »X25:L3.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/X25:L3.SC«
IDENT X25:L3 REL 11.0 81-07-06 870105041100
=1, CF A15 IN INHIBIT
=2, MISSING RET.CODE
*
********************************************
*
* PHILIPS TERMINAL SYSTEM PTS
*
* X25-L3: DRIVER FOR DATA COMMUNICATION
* SERVING THE PACKET LEVEL AS
* DEFINED IN X25 LEVEL 3.
*
*
********************************************
*
*
*
EJECT
*
************************************************************
*
*
* ORDERS :
*
* /00 READ STATUS
*
* /02 READ
*
* /06 WRITE
*
* /21 OPEN
*
* /22 CLOSE
*
* /24 CONNECT ACTIVE
*
* /27 CONNECT PASSIVE
*
* /2F DISCONNECT
*
* /2D GET STATISTICS
*
* /38 SET STATUS
*
* /39 SET TIMER
*
*
************************************************************
*
EJECT
*
********************************************
*
* E N T R I E S
*
********************************************
*
ENTRY REQTIM REQUEST TIME OUT VALUE
ENTRY X25:ON POWER ON ROUTINE
ENTRY DRX25 ACTIVATION
*
EJECT
*
********************************************
*
* E X T E R N A L S
*
********************************************
*
* ECB - DISPLACEMENTS
*
EXTRN ECBFC FILE CODE
EXTRN ECBBA BUFFER ADDRESS
EXTRN ECBRL REQUESTED LENGTH
EXTRN ECBEL EFFECTIVE LENGTH
EXTRN ECBRC RETURN CODE
EXTRN ECBCW1
EXTRN ECBCW2
*
* DWT - DISPLACEMENTS: FIXED PART
*
EXTRN DWTCHP CHANNEL PARAMETERS
EXTRN DWTST STATUS
EXTRN DWTECB ECB-ADDRESS
EXTRN DWTOPT OPTION
EXTRN DWTOR ORDER
EXTRN DWTTAB TTAB-ADDRESS
*
EJECT
*
* MONITOR ROUTINES
*
EXTRN FNDTID FIND TTAB-ADDRESS
EXTRN SETIME TIMER ROUTINE
EXTRN ACTOT TASK ACTIVATION ROUTINE
EXTRN TDISP TOSS DISPATCHER
EXTRN MOVSU MOVE DATA FROM SYSTEM TO USER
EXTRN MOVUS MOVE DATA FROM USER TO SYSTEM
EXTRN TENDIO TOSS END I/O ROUTINE
EXTRN GETBLK GET A MONITOR BLOCK
EXTRN FREBLK RELEASE A MONITOR BLOCK
EXTRN FNDDNT FIND LOCAL DTE
EXTRN GETDST GET SYMBOLIC DTE ADDRESS
EXTRN GETDNA GET DTE NETWORK ADDRESS
EXTRN GETDNT GET DTE NETWORK ADDR.FOR A SPEC.TYPE
EXTRN SCTDCT POINTER TO DC ADDR. TABLE
EXTRN TRAC TRACE ROUTINE
EXTRN TRTASK TTAB ADDRESS FOR #T-TASK
*
* TTAB DISPLACEMENTS
*
EXTRN TTB:ST
EXTRN TTB:PW PSW
EXTRN TTB:SA REGISTER SAVE AREA
*
EJECT
****************************************************************************
*
* A PROGRAM VERSION USING MMU PAGING IS OBTAINED
* BY SETTING MMUPAG TO 1
*
MMUPAG EQU 0
*
****************************************************************************
*
* A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
* SET IS OBTAINED BY SETTING CPU852 TO 0
*
CPU852 EQU 1
*
***************************************************************************
*
EJECT
*
X:A EQU 1
SYNRLN EQU X:A NUMBER OF PHYSICAL LINES
*
X:B EQU 600
REQTIM EQU X:B REQUEST TIME OUT VALUE(IN 100MS)
*
X:C EQU 128
SYMXDL EQU X:C OVER ALL MAXIMUM USER DATA LENGTH
*
X:D EQU 3
SYNRL1 EQU X:D # OF LOGICAL CHANNELS LINE 1
*
X:H EQU 2
SYMXW1 EQU X:H WINDOW SIZE,PACKET LEVEL,LINE 1
*
X:L EQU 128
SYMDL1 EQU X:L MAXIMUM USER DATA LENGTH,LINE 1
*
X:P EQU 0
SYNRP1 EQU X:P # OF PERMANENT VIRTUAL CIRCUITS,LINE1
*
X:T EQU 0
CALDTE EQU X:T LOCAL DTE-ADDRESS IN CALL PACKET ?
*
X:U EQU 0
STATI EQU X:U STATISTICS OF HDLC PROTOCOL HANDLER
*
EJECT
*
IFF SYNRLN=1
*
X:E EQU 3
SYNRL2 EQU X:E # OF LOGICAL CHANNELS LINE 2
*
X:I EQU 2
SYMXW2 EQU X:I WINDOW SIZE,PACKET LEVEL,LINE 2
*
X:M EQU 128
SYMDL2 EQU X:M MAXIMUM USER DATA LENGTH,LINE 2
*
X:Q EQU 0
SYNRP2 EQU X:Q # OF PERMANENT VIRTUAL CIRCUITS,LINE 2
*
IFF SYNRLN=2
*
X:F EQU 3
SYNRL3 EQU X:F # OF LOGICAL CHANNELS,LINE 3
*
X:J EQU 2
SYMXW3 EQU X:J WINDOW SIZE,PACKET LEVEL,LINE 3
*
X:N EQU 128
SYMDL3 EQU X:N MAXIMUM USER DATA LENGTH,LINE 3
*
X:R EQU 0
SYNRP3 EQU X:R # OF PERMANENT VIRTUAL CIRCUITS,LINE 3
*
IFF SYNRLN=3
*
X:G EQU 3
SYNRL4 EQU X:G # OF LOGICAL CHANNELS,LINE 4
*
X:K EQU 2
SYMXW4 EQU X:K WINDOW SIZE,PACKET LEVEL,LINE 4
*
X:O EQU 128
SYMDL4 EQU X:O MAXIMUM USER DATA LENGTH,LINE 4
*
X:S EQU 0
SYNRP4 EQU X:S # OF PERMANENT VIRTUAL CIRCUITS,LINE 4
*
XIF
*
SYNRRC EQU 2 # OF READ REQUESTS FOR HDLC
*
SYNRTR EQU 2 # OF WRITE REQUESTS FOR HDLC
*
SYUBNR EQU 2 # OF INPUT BUFFERS FOR HDLC
*
SYCLTM EQU 600 CLEAR TIME OUT VALUE IN 100MS
*
SYRETM EQU 600 RESET TIME OUT VALUE IN 100MS
SYRSTM EQU 600 RESTART TIME OUT VALUE IN 100MS
*
BUFDEL EQU 1 TIMER IN 100MS FOR WAIT FOR BUFFER
*
LOOP EQU 0 LOOP TEST IN MODEM
*
TRACE EQU 0 TRACE TASK IN SYSTEM
BYTE FORM 8,8
*
EJECT
*
IFT SYNRLN=1
PERMVC EQU SYNRP1
SWITVC EQU SYNRL1-SYNRP1
XIF
IFT SYNRLN=2
PERMVC EQU SYNRP1+SYNRP2
SWDUM1 EQU SYNRL1+SYNRL2
SWITVC EQU SWDUM1-PERMVC
XIF
IFT SYNRLN=3
PEDUM1 EQU SYNRP1+SYNRP2
PERMVC EQU PEDUM1+SYNRP3
SWDUM1 EQU SYNRL1+SYNRL2
SWDUM2 EQU SWDUM1+SYNRL3
SWITVC EQU SWDUM2-PERMVC
XIF
IFT SYNRLN=4
PEDUM1 EQU SYNRP1+SYNRP2
PEDUM2 EQU SYNRP3+SYNRP4
PERMVC EQU PEDUM1+PEDUM2
SWDUM1 EQU SYNRL1+SYNRL2
SWDUM2 EQU SYNRL3+SYNRL4
SWDUM3 EQU SWDUM1+SWDUM2
SWITVC EQU SWDUM3-PERMVC
XIF
*
* TRANSLATION TABLE FROM THROUGHPUT CLASS
* TO WINDOW SIZE AND PACKET LENGTH
*
CLAS1 BYTE 1,128 CLASS 1,LAYOUT: WINDOW SIZE/PACKET LENGTH
BYTE 1,128 CLASS 2
BYTE 1,128 CLASS 3
BYTE 1,128 CLASS 4
BYTE 1,128 CLASS 5
BYTE 1,128 CLASS 6
BYTE 2,128 CLASS 7
BYTE 3,128 CLASS 8
BYTE 3,128 CLASS 9
BYTE 3,128 CLASS 10
BYTE 3,128 CLASS 11
BYTE 3,128 CLASS 12
BYTE 3,128 CLASS 13
BYTE 3,128 CLASS 14
BYTE 3,128 CLASS 15
*
EJECT DWT
*
* DWT DISPLACEMENTS
*
IFT MMUPAG=0
DWTDRD EQU /10 DWTTQ+2
XIF
IFT MMUPAG=1
DWTDRD EQU /14 DWTMEC+2
XIF
DWTSTB EQU DWTDRD OFFSET REL START DWT TO STATISTIC BUFFER
DWTCHD EQU DWTDRD+2 CONFIG CHAIN LINK HEAD DWT
DWTCHN EQU DWTDRD+4 CONFIG CHAIN LINK NEXT DWT
DWTLAD EQU DWTDRD+6 LOCAL SYMBOLIC DTE ADDRESS
DWTRAD EQU DWTDRD+8 REMOTE SYMBOLIC DTE ADDRESS
DWTWRO EQU DWTDRD+10 WRITE OPTION
DWTLCN EQU DWTDRD+11 LOGICAL CHANNEL NUMBER
DWTFNC EQU DWTDRD+12 FUNCTION CODE
DWTSTE EQU DWTDRD+13 DWT STATE
DWTRTV EQU DWTDRD+14 REQUEST TIMER VALUE
DWTRTP EQU DWTDRD+16 REQUEST TIMER POINTER
DWTRCI EQU DWTDRD+18 RETURN CODE INFORMATION
DWTRES EQU DWTDRD+20 CAUSE AND DIAGNOSTIC CODE FOR RESET
DWTCLE EQU DWTDRD+22 CAUSE AND DIAGNOSTIC CODE FOR CLEAR
DWTIPQ EQU DWTDRD+24 INPUT QUEUE(IF LC CLEARED)
*
* IDENTIFICATION OF A DWT FOR A VC; USED IN DWTCHP
*
DWTTYP EQU 'VC' VIRTUAL CIRCUIT
*
EJECT DWT
*
* INTERNAL FUNCTION CODES; USED IN DWTFNC
*
OPESYS EQU /00 OPEN REQUEST
CLOSYS EQU /02 CLOSE REQUEST
CONACT EQU /04 CONNECT ACTIVE REQUEST
CONPAS EQU /06 CONNECT PASSIVE REQUEST
DISCAL EQU /08 DISCONNECT REQUEST
ACCCAL EQU /0A ACCEPT CALL
ACCDAT EQU /0C ACCEPT DATA
REFDAT EQU /0E REFUSE DATA REQUEST
WRIDAT EQU /10 WRITE REQUEST
WRIINT EQU /12 WRITE INTERRUPT
READAT EQU /14 READ REQUEST
REASTA EQU /16 READ STATUS REQUEST
STATIS EQU /18 STATISTICAL REQUEST
*
* DWT STATE CODES; USED IN DWTSTE
*
DISCON EQU /00 DISCONNECTED STATE
CONAD EQU /01 CONNECTED: ACCEPT DATA
CONRD EQU /02 CONNECTED: REFUSE DATA
INCALR EQU /03 INC.CALL RECEIVED(WITH ACC/REF CALL)
INCALL EQU /04 INC.CALL REC.(WITHOUT ACC/REF CALL)
VCREL EQU /05 VC IS RELEASED
*
* OPTION CODES; USED IN DWTOPT AND DWTWRO
*
CLOOPT EQU /08 SOFT CLOSE
MOPT EQU /10 M-BIT
CALOPT EQU /20 ACCEPT CALL
INTOPT EQU /40 INTERRUPT PACKET
QOPT EQU /80 Q-BIT
*
EJECT USER
*
* RETURN CODES OF A USER REQUEST
*
ACPT.RC EQU /0000 ACCEPTED
RQUE.RC EQU /8000 REQUEST ERROR
ABOT.RC EQU /4000 REQUEST ABORTED
INTR.RC EQU /2000 INTERRUPT PACKET RECEIVED
LAST.RC EQU /1000 LAST PACKET IN SEQUENCE
NOTU.RC EQU /0800 NOT USED
QBIT.RC EQU /0400 Q-BIT SET IN PACKET
NOLC.RC EQU /0200 LOGICAL CHANNEL NOT AVAILABLE
DATA.RC EQU /0100 DATA RECEIVED AND QUEUED
MORE.RC EQU /0080 MORE INFORMATION
TIMO.RC EQU /0040 TIME OUT
RSET.RC EQU /0020 VC RESET,LOCAL OR REMOTE
SEQE.RC EQU /0010 SEQUENCE ERROR
INVL.RC EQU /0008 INVALID LENGTH
CLEA.RC EQU /0004 VC CLEARED,LOCAL OR REMOTE
LOGE.RC EQU /0002 LOGICAL ERROR
PHYE.RC EQU /0001 PHYSICAL ERROR
TOLD.RC EQU /0001 RETURN INFO.TOLD TO USER(INTERNAL PAR.)
*
* RETURN CODES FROM LEVEL 3 TO REQUEST HANDLER
*
RTNOK EQU /00 RETURN CODE = OK
CLEBUS EQU /02 CLEAR REQUEST BUSY
DISCRM EQU /04 REMOTE DISCONNECTED
HRDERR EQU /06 HARDWARE ERROR
ILLSIZ EQU /0A NO MAX. PACKET LENGTH WHEN M=1
INVSTA EQU /0C NO CORRECT LOG. CHANNEL STATE
MAXLNG EQU /0E MAX. LENGTH EXCEEDED FOR TRANSM.
NOLCAV EQU /10 NO LOGICAL CHANNEL AVAILABLE
TMEOUT EQU /12 TIME OUT DETECTED
NOREMO EQU /14 REMOTE ADDRESS NOT SUPPORTED
*
EJECT USER
*
* DIAGNOSTIC CODES FOR THE REMOTE USER
*
LOCPER EQU /01 LOCAL PROCEDURE ERROR
NOUSER EQU /02 NO USER KNOWN
NOTINT EQU /03 NO INTERESTED USER
RESLCH EQU /04 LOCAL SEQUENCE ERROR
*
* DIAGNOSTIC CODES FOR THE LOCAL USER
*
LOCCLE EQU /80 VC IS CLEARED LOCAL
RSTRED EQU /82 RESTART PACKET RECEIVED
*
EJECT SYSTEM
*
* EQUATE VALUES FOR BUFFER LAY-OUT
*
BFCHPT EQU -2 QUEUE CHAIN POINTER
HDLC EQU /00 HDLC HEADER
GNFRM EQU /02 GENERAL FORMAT IDENTIFIER
QBIT EQU /02 CHARACTER DISPLACEMENT OF Q-BIT
LCIDNT EQU /03 LOGICAL CHANNEL NUMBER
IDENT EQU /04 PACKET TYPE
MBIT EQU /04 CHARACTER DISPLACEMENT OF M-BIT
BEGDAT EQU /05 USER DATA IN DATA PACKET
CAUSE EQU /05 RESET-, RESTART OR CLEARING CAUSE
DGNCOD EQU /06 DIAGNOSTIC CODE
QPOS EQU /80 MASK FOR Q-BIT
MPOS EQU /10 MASK FOR M-BIT
*
* EQUATE VALUES FOR PACKET TYPES
*
CAL.P EQU /0B CALL PACKET
CAL.CP EQU /0F CALL CONFIRMATION PACKET
CLE.P EQU /13 CLEAR PACKET
CLE.CP EQU /17 CLEAR CONFIRMATION PACKET
DATA.P EQU /01 DATA PACKET
INT.P EQU /23 INTERRUPT PACKET
INT.CP EQU /27 INTERRUPT CONFIRMATION PACKET
RR.P EQU /01 RR-PACKET
RNR.P EQU /05 RNR-PACKET
RSET.P EQU /1B RESET PACKET
RSET.CP EQU /1F RESET CONFIRMATION PACKET
RSTR.P EQU /FB RESTART PACKET
RSTR.CP EQU /FF RESTART CONFIRMATION PACKET
EJECT SYSTEM
*
* EQUATE VALUES FOR PACKET LENGTH
*
CAL.CL EQU /05 CALL CONFIRMATION
CLE.L EQU /07 CLEAR PACKET
CLE.CL EQU /05 CLEAR CONFIRMATION PACKET
INT.L EQU /06 INTERRUPT PACKET
INT.CL EQU /05 INTERRUPT CONFIRMATION PACKET
RR.L EQU /05 RR-PACKET
RSET.L EQU /07 RESET PACKET
RSET.CL EQU /05 RESET CONFIRMATION PACKET
RSTR.L EQU /07 RESTART PACKET
RSTR.CL EQU /05 RESTART CONFIRMATION PACKET
*
* SYSTEM VARIABLES
*
NEG EQU /8000
LOCAL EQU 'LP' LOCAL PACKET SWITCHING DTE
SVCTYP EQU 'RS' REMOTE DTE REACHED VIA SVC
PVCTYP EQU 'RP' REMOTE DTE REACHED VIA PVC
TSKID EQU '#X' TASK IDENTIFICATION X25-TASK
SAVE RES 8 SAVE AREA
THRESH DATA 50 PERCENTAGE FOR WIND. UPDATING
DCLEVL DATA 0 PROCESS INDICATION DC-TASK
DATA 0,0 EXTEND DC-STACK
RES 12 CALL FUNCTION STACK
DCSTAK EQU *-2 STACK POINTER
*
*
EJECT LC
*
* LOGICAL CHANNEL TABLE DISPLACEMENT
*
LCSTAT EQU 0 STATUS
LCSBST EQU LCSTAT+1 SUB-STATUS
VCTYP EQU LCSBST+1 CIRCUIT TYPE
LCNUM EQU VCTYP+1 LOG. CHANNEL NUMBER
LCDWT EQU LCNUM+1 DWT ADDRESS
LCTHRE EQU LCDWT+2 THRESHOLD VALUE
NRNUBF EQU LCTHRE+1 # OF NOT USED BUFFERS
QUEINP EQU NRNUBF+1 INPUT QUEUE ANCHOR
QUEOUT EQU QUEINP+2 OUTPUT QUEUE ANCHOR
LCTRWN EQU QUEOUT+2 TRANSMIT WINDOW
LCREWN EQU LCTRWN+1 RECEIVE WINDOW
PS EQU LCREWN+1 NEXT PACKET SEND SEQU. NR.
PR EQU PS+1 CURRENT PACKET RECEIVE SEQU. NR.
RPS EQU PR+1 NEXT PS TO BE RECIEVED
SLWE EQU RPS+1 SEND LWE = LAST RECEIVED PR
RLWE EQU SLWE+1 LAST TRANSMITTED PR
NOUSE EQU RLWE+1 NOT USED
REMADR EQU NOUSE+1 REMOTE DTE IF PVC
REBFSZ EQU REMADR+2 MAX.RECEIVE PACKET LENGTH
TRBFSZ EQU REBFSZ+2 MAX. TRANSM. PACKET LENGTH
FLAGS EQU TRBFSZ+2 FLAGS
TIMADR EQU FLAGS+2 TIMER ADDRESS
SYSBUF EQU TIMADR+4 SYSTEM OUTPUT BUFFER
LCALNG EQU SYSBUF+8 TABLE LENGTH
*
EJECT LC
*
* EQUATE VALUES FOR LOGICAL CHANNEL STATUS
*
READ.ST EQU /00 READY STATE
LCAL.ST EQU /01 LOCAL CALL STATE
RCAL.ST EQU /02 REMOTE CALL STATE
DATA.ST EQU /03 DATA TRANSFER STATE
CLEA.ST EQU /04 CLEAR STATE
FLCN.ST EQU /00 FLOW CONTROL READY SUB-STATE
RSET.ST EQU /01 RESET SUB-STATE
*
* EQUATE VALUES FOR CIRCUIT TYPE
*
PVC EQU /01 PERMANENT VIRTUAL CIRCUIT
SVC EQU /00 SWITCHED VIRTUAL CIRCUIT
*
EJECT LINE
*
* LINE ADMINISTRATION BLOCK DISPLACEMENTS
*
FILCOD EQU 0 FILE CODE FOR LINE ADDRESSING
LC:TAB EQU FILCOD+2 LC-ADM'S TABLE ADDRESS
PACKLN EQU LC:TAB+2 MAXIMUM PACKET LENGTH
WNDSIZ EQU PACKLN+2 MAXIMUM WINDOW SIZE
NRLC EQU WNDSIZ+2 # OF LOGICAL CHANNELS
NRPVC EQU NRLC+1 # OF PERMANENT VIRTUAL CIRCUITS
CHAIN EQU NRPVC+1 ANCHOR FOR CONNECTED DWT'S
NRPNDT EQU CHAIN+2 # OF PENDING TRANSMIT REQUESTS
RSTQUE EQU NRPNDT+2 RESTART QUEUE ANCHOR
RTMADR EQU RSTQUE+2 RESTART CONF. TIMER ADDRESS
HRDSTA EQU RTMADR+2 HARDWARE STATUS
CMNFLG EQU HRDSTA+2 COMMON FLAGS
LOCECB EQU CMNFLG+2 LINE OPEN/CLOSE ECB
UBNUM EQU LOCECB+12 BLOCK FOR (DIS)CONNECT REQUEST
IFF MMUPAG+STATI=2
D1 EQU UBNUM+SYUBNR+2
ECBINL EQU 12 LENGTH INPUT/OUTPUT ECB'S
SYSBFL EQU SYMXDL+BEGDAT+1 BUFFER LENGTH
ECBIN1 EQU D1+SYUBNR LINE INPUT ECB'S
XIF
IFT MMUPAG+STATI=2
D1 EQU UBNUM+SYUBNR+2
INTSTB EQU D1+SYUBNR INTERMEDIATESTATISTIC BUFFER
ECBINL EQU 12 LENGTH INPUT/OUTPUT ECB'S
SYSBFL EQU SYMXDL+BEGDAT+1 BUFFER LENGTH
ECBIN1 EQU INTSTB+42 LINE INPUT ECB'S
XIF
IFF SYNRRC=1
ECBIN2 EQU ECBIN1+ECBINL
IFF SYNRRC=2
ECBIN3 EQU ECBIN2+ECBINL
IFF SYNRRC=3
ECBIN4 EQU ECBIN3+ECBINL
XIF
*
EJECT LINE
*
IFT SYNRRC=1
ECBOU1 EQU ECBIN1+ECBINL
XIF
IFT SYNRRC=2
ECBOU1 EQU ECBIN2+ECBINL
XIF
IFT SYNRRC=3
ECBOU1 EQU ECBIN3+ECBINL
XIF
IFT SYNRRC=4
ECBOU1 EQU ECBIN4+ECBINL
XIF
SYSOU1 EQU ECBOU1+ECBINL
IFF SYNRTR=1
ECBOU2 EQU SYSOU1+SYSBFL
SYSOU2 EQU ECBOU2+ECBINL
IFF SYNRTR=2
ECBOU3 EQU SYSOU2+SYSBFL
SYSOU3 EQU ECBOU3+ECBINL
IFF SYNRTR=3
ECBOU4 EQU SYSOU3+SYSBFL
SYSOU4 EQU ECBOU4+ECBINL
XIF
IFT SYNRTR=1
LNBLNG EQU SYSOU1+SYSBFL
XIF
IFT SYNRTR=2
LNBLNG EQU SYSOU2+SYSBFL
XIF
IFT SYNRTR=3
LNBLNG EQU SYSOU3+SYSBFL
XIF
IFT SYNRTR=4
LNBLNG EQU SYSOU4+SYSBFL
XIF
*
EJECT LINE
*
* ORDER CODES FOR HDLC PROTOCOL HANDLER
*
CONN EQU /21 CONNECT REQUEST
DISCN EQU /22 DISCONNECT REQUEST
RECEIV EQU /02 INPUT REQUEST
TRANSM EQU /06 OUTPUT REQUEST
STATR EQU /2D STATISTIC REQUEST
*
* RETURN CODES FOR HDLC PROTOCOL HANDLER
*
HRDWER EQU /8000 HARDWARE ERROR
REMDIS EQU /000D REMOTE DISCONNECTED
DEFTIM EQU /000E DEFINITE TIME-OUT
*
* EQUATE VALUES FOR FLAG POSITIONS
*
CONTIM EQU /10 CONFIRMATION TIMER RUNNING
INTPNG EQU /20 INTERRUPT PENDING
REMBUS EQU /40 REMOTE BUSY
NPRFLG EQU /01 NO PROCESSING FLAG FOR QUEUES
*
* EQUATE VALUES FOR THE COMMON FLAGS
*
RSTFLG EQU /01 RESTART BUSY
STRTFL EQU /80 LINE CONNECTED FLAG
STATFL EQU /04 STATISTIC REQUEST BUSY FLAG
CLOFLG EQU /10 CLOSE BUSY FLAG
OPEFLG EQU /20 OPEN BUSY FLAG
*
EJECT
*
* BLOCK WITH ADDRESSES OF LINE ADMINISTRATION BLOCKS
*
LINTAB DATA LINBL1 ADDRESS 1ST LINE ADM. BLOCK
IFF SYNRLN=1
DATA LINBL2 ADDRESS 2ND LINE ADM. BLOCK
IFF SYNRLN=2
DATA LINBL3 ADDRESS 3TH LINE ADM. BLOCK
IFF SYNRLN=3
DATA LINBL4 ADDRESS 4TH LINE ADM. BLOCK
XIF
*
* FIRST LINE ADMINISTRATION BLOCK
*
LINBL1 EQU *
DATA /60 FILE CODE
DATA LCADM1 LOG. CHANNEL ADM. POINTER
DATA SYMDL1 MAX. PACKET LENGTH
DATA SYMXW1 MAX. WINDOW SIZE
BYTE SYNRL1,SYNRP1 # OF LOG.CH. AND # OF PVC'S
RORG LINBL1+LNBLNG
*
* BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
*
LCADM1 EQU *
DATA LCAD1.1
IFF SYNRL1=1
DATA LCAD1.2
IFF SYNRL1=2
DATA LCAD1.3
IFF SYNRL1=3
DATA LCAD1.4
IFF SYNRL1=4
DATA LCAD1.5
IFF SYNRL1=5
DATA LCAD1.6
IFF SYNRL1=6
DATA LCAD1.7
IFF SYNRL1=7
DATA LCAD1.8
XIF
EJECT
*
* LOGICAL CHANNEL ADMINISTRATION BLOCKS
*
LCAD1.1 EQU *
RORG LCAD1.1+LCALNG
IFF SYNRL1=1
LCAD1.2 EQU *
RORG LCAD1.2+LCALNG
IFF SYNRL1=2
LCAD1.3 EQU *
RORG LCAD1.3+LCALNG
IFF SYNRL1=3
LCAD1.4 EQU *
RORG LCAD1.4+LCALNG
IFF SYNRL1=4
LCAD1.5 EQU *
RORG LCAD1.5+LCALNG
IFF SYNRL1=5
LCAD1.6 EQU *
RORG LCAD1.6+LCALNG
IFF SYNRL1=6
LCAD1.7 EQU *
RORG LCAD1.7+LCALNG
IFF SYNRL1=7
LCAD1.8 EQU *
RORG LCAD1.8+LCALNG
XIF
IFF SYNRLN=1
EJECT
*
* SECOND LINE ADMINISTRATION BLOCK
*
LINBL2 EQU *
DATA /61 FILE CODE
DATA LCADM2 LOG. CHANNEL ADM. POINTER
DATA SYMDL2 MAX. PACKET LENGTH
DATA SYMXW2 MAX. WINDOW SIZE
BYTE SYNRL2,SYNRP2 # OF LOG.CH. AND # OF PVC'S
RORG LINBL2+LNBLNG
*
* BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
*
LCADM2 EQU *
DATA LCAD2.1
IFF SYNRL2=1
DATA LCAD2.2
IFF SYNRL2=2
DATA LCAD2.3
IFF SYNRL2=3
DATA LCAD2.4
IFF SYNRL2=4
DATA LCAD2.5
IFF SYNRL2=5
DATA LCAD2.6
IFF SYNRL2=6
DATA LCAD2.7
IFF SYNRL2=7
DATA LCAD2.8
XIF
EJECT
IFF SYNRLN=1
*
* LOGICAL CHANNEL ADMINISTRATION BLOCKS
*
LCAD2.1 EQU *
RORG LCAD2.1+LCALNG
IFF SYNRL2=1
LCAD2.2 EQU *
RORG LCAD2.2+LCALNG
IFF SYNRL2=2
LCAD2.3 EQU *
RORG LCAD2.3+LCALNG
IFF SYNRL2=3
LCAD2.4 EQU *
RORG LCAD2.4+LCALNG
IFF SYNRL2=4
LCAD2.5 EQU *
RORG LCAD2.5+LCALNG
IFF SYNRL2=5
LCAD2.6 EQU *
RORG LCAD2.6+LCALNG
IFF SYNRL2=6
LCAD2.7 EQU *
RORG LCAD2.7+LCALNG
IFF SYNRL2=7
LCAD2.8 EQU *
RORG LCAD2.8+LCALNG
XIF
IFF SYNRLN=1
IFF SYNRLN=2
EJECT
*
* THIRTH LINE ADMINISTRATION BLOCK
*
LINBL3 EQU *
DATA /62 FILE CODE
DATA LCADM3 LOG. CHANNEL ADM. POINTER
DATA SYMDL3 MAX. PACKET LENGTH
DATA SYMXW3 MAX. WINDOW SIZE
BYTE SYNRL3,SYNRP3 # OF LOG.CH. AND # OF PV'S
RORG LINBL3+LNBLNG
*
* BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
*
LCADM3 EQU *
DATA LCAD3.1
IFF SYNRL3=1
DATA LCAD3.2
IFF SYNRL3=2
DATA LCAD3.3
IFF SYNRL3=3
DATA LCAD3.4
IFF SYNRL3=4
DATA LCAD3.5
IFF SYNRL3=5
DATA LCAD3.6
IFF SYNRL3=6
DATA LCAD3.7
IFF SYNRL3=7
DATA LCAD3.8
XIF
EJECT
IFF SYNRLN=1
IFF SYNRLN=2
*
* LOGICAL CHANNEL ADMINISTRATION BLOCKS
*
LCAD3.1 EQU *
RORG LCAD3.1+LCALNG
IFF SYNRL3=1
LCAD3.2 EQU *
RORG LCAD3.2+LCALNG
IFF SYNRL3=2
LCAD3.3 EQU *
RORG LCAD3.3+LCALNG
IFF SYNRL3=3
LCAD3.4 EQU *
RORG LCAD3.4+LCALNG
IFF SYNRL3=4
LCAD3.5 EQU *
RORG LCAD3.5+LCALNG
IFF SYNRL3=5
LCAD3.6 EQU *
RORG LCAD3.6+LCALNG
IFF SYNRL3=6
LCAD3.7 EQU *
RORG LCAD3.7+LCALNG
IFF SYNRL3=7
LCAD3.8 EQU *
RORG LCAD3.8+LCALNG
XIF
IFF SYNRLN=1
IFF SYNRLN=2
IFF SYNRLN=3
EJECT
*
* FOURTH LINE ADMINISTRATION BLOCK
*
LINBL4 EQU *
DATA /63 FILE CODE
DATA LCADM4 LOG. CHANNEL ADM. POINTER
DATA SYMDL4 MAX. PACKET LENGTH
DATA SYMXW4 MAX. WINDOW SIZE
BYTE SYNRL4,SYNRP4 # OF LOG.CH. AND # OF PVC'S
RORG LINBL4+LNBLNG
*
* BLOCK WITH LOGICAL CHANNEL ADM. POINTERS
*
LCADM4 EQU *
DATA LCAD4.1
IFF SYNRL4=1
DATA LCAD4.2
IFF SYNRL4=2
DATA LCAD4.3
IFF SYNRL4=3
DATA LCAD4.4
IFF SYNRL4=4
DATA LCAD4.5
IFF SYNRL4=5
DATA LCAD4.6
IFF SYNRL4=6
DATA LCAD4.7
IFF SYNRL4=7
DATA LCAD4.8
XIF
EJECT
IFF SYNRLN=1
IFF SYNRLN=2
IFF SYNRLN=3
*
* LOGICAL CHANNEL ADMINISTRATION BLOCKS
*
LCAD4.1 EQU *
RORG LCAD4.1+LCALNG
IFF SYNRL4=1
LCAD4.2 EQU *
RORG LCAD4.2+LCALNG
IFF SYNRL4=2
LCAD4.3 EQU *
RORG LCAD4.3+LCALNG
IFF SYNRL4=3
LCAD4.4 EQU *
RORG LCAD4.4+LCALNG
IFF SYNRL4=4
LCAD4.5 EQU *
RORG LCAD4.5+LCALNG
IFF SYNRL4=5
LCAD4.6 EQU *
RORG LCAD4.6+LCALNG
IFF SYNRL4=6
LCAD4.7 EQU *
RORG LCAD4.7+LCALNG
IFF SYNRL4=7
LCAD4.8 EQU *
RORG LCAD4.8+LCALNG
XIF
*
EJECT
*
*
* BUFFER POOL
*
* THE SIZE OF THE BUFFER AREAS CAN BE OBTAINED IN THE FOLLOWING WAY
* NUMBER OF BUFFERS NEEDED PER LOGICAL CHANNEL = WINDOW SIZE
* PER LINE SYNRRC BUFFERS FOR INPUT REQUEST AND SYUBNR BUFFERS
* TO BE USED BY HDLC
* THE TOTAL NUMBER OF BUFFERS CAN THEN BE CALCULATED BY THE FORMULA
* SYNRLN*(SYNRRC+SYUBNR)+SYNRL1*SYMXW1+SYNRL2*SYMXW2+.... ETC
*
* THE BUFFER LENGTH IS OBTAINED BY SYMXDL+BEGDAT+1. THIS IS THE LENGTH
* IN CHARACTERS. THIS LENGTH HAS TO BE EVEN (CHAIN POINTER FOR
* QUEUEING EXCLUDED)
*
BUFLEN EQU SYMXDL+BEGDAT+1
*
* THE POOLSIZE IN WORDS IS OBTAINED BY NRBUF*(BUFLEN+2)/2
*
X:V EQU 680
POOLEN EQU X:V LENGTH OF BUFFER POOL
BUFPOL EQU *
RES POOLEN POOL AREA
DATA 0 END OF QUEUE
BPEND EQU *
*
* BUFFER POOL CHAIN ANCHOR
*
BUFANC DATA BUFPOL
*
EJECT
*
* TTAB FOR #X-TASK IN X25 PACKAGE
*
IFT MMUPAG=1
DATA 0,0,0,0,0,0,0,0 MMU TABLE
DATA 0,0,0,0,0,0,0,0 .
DATA 0 CURRENT SEGMENT BASE
DATA 0 SEGMENT TABLE POINTER
DATA 0 SEGMENT BLOCK POINTER
XIF
DATA 0 APPLICATION CONTROL BLOCK POINTER
TTBX25 EQU *
DATA 0 DISPATCHER QUEUE LINK
DATA '#X' TASK IDENTIFICATION
DATA 50 PRIORITY LEVEL
DATA 0 PENDING POINTER
DATA /C8C0 PSW(PROGRAM STATUS WORD)
DATA 0 DISPATCH ADDRESS
DATA 0,0,0,0,0,0,0,0 REGISTER SAVE AREA,A1-A14
DATA 0,0,0,0,0,0,0 .
*
EJECT
*
*
* MODULE CALLED BY TOSSIO FOR AN USER REQUEST
*
********************************************
*
* INPUT PARAMETER:
* A6 = DWT-ADDRESS
*
* CALLING SEQUENCE:
* ABI DRX25
*
***** DRIVER ADDRESS BLOCK *****
DATA SYMXDL BUFFER LENGTH
DATA 0 DEVICE INDEX
DRX25 EQU *
DATA DRX250 ACTIVATION ADDRESS
DATA ABTREQ ABORT ROUTINE ADDRESS
********************************
DRX250 EQU *
LDR A1,A6 PARAMETER
LDKL A5,TTBX25 GET TTAB ADDRESS
LDKL A2,RHOP ACTIVATION ADDRESS
LDK A3,0
CF A15,ACTOT ACTIVATE #X-TASK
ABL TDISP
EJECT
*
*
* THIS MODULE IS CALLED AT MONITOR INITIATION TIME
*
********************************************
*
* INPUT PARAMETERS:
* NONE
*
* CALLING SEQUENCE:
* CF A15,X25:ON
*
X25:ON EQU *
LDKL A1,LINTAB TABLE WITH LINE BLOCK ADDRESSES
IFF SYNRLN=1
LDK A2,SYNRLN NUMBER OF LINES
XIF
*
* INITIATE LINE BLOCK
*
X25ON1 EQU *
LDR* A4,A1 LINE BLOCK ADDRESS
CM CMNFLG,A4 CLEAR FLAG
LD A6,CHAIN,A4 ANY DWT IN CHAIN ?
RF(Z) X25ON3 NO
*
* INITIATE DWT
*
X25ON2 EQU *
LDKL A3,NEG
ST A3,DWTST,A6 SET STATUS
CM DWTFNC,A6 CLEAR FUNCTION CODE AND STATE
CM DWTRTP,A6 CLEAR RUNNING TIMER INDICATION
LD A3,DWTCHN,A6 MORE DWT'S FOR THIS LINE ?
*
EJECT
CM DWTCHN,A6 .
LDR A6,A3 .
RB(NZ) X25ON2 YES
CM CHAIN,A4 RESET CHAIN
X25ON3 EQU *
IFF SYNRLN=1
ADK A1,2
SUK A2,1 NEXT LINE ?
RB(P) X25ON1 YES
XIF
*
* INITIATE BUFFER POOL
*
LDKL A2,BUFPOL START ADDRESS OF BUFFER POOL
ST A2,BUFANC BUFFER POOL ANCHOR
X25ON4 EQU *
LDR A1,A2 SAVE BUFFER ADDRESS
ADK A2,BUFLEN+2
STR A2,A1 CREATE CHAIN
LDR A3,A2
SUKL A3,BPEND END OF BUFFER POOL REACHED ?
RB(L) X25ON4 NO
CMR A1 END OF CHAIN
IFT TRACE=1
*
* ACTIVATE TRACE TASK
*
LDKL A2,TRAC ACTIVATION ADDRESS
LDKL A5,TRTASK TTAB ADDRESS
CF A15,ACTOT ACTIVATE #T-TASK
XIF
RTN A15 READY
EJECT
*
* ABORT REQUEST HANDLER
*
********************************************
*
* INPUT PARAMETER:
* A6 = DWT-ADDRESS
*
* CALLING SEQUENCE:
* CF A15,ABTREQ
*
* OUTPUT PARAMETERS:
* NONE
* WHEN IT IS A ILLEGAL REQUEST THE ROUTINE WILL HALT
*
ABTREQ EQU *
LDK A1,READAT WAS IT A READ REQUEST ?
CC A1,DWTFNC,A6 .
RF(NE) ABT000 NO
LD A1,DWTRTP,A6
LDR A8,A14
LDKL A14,DCSTAK
CF A14,CANTIM CANCEL TIMER
LDR A14,A8
CM DWTRTP,A6
LD A8,DWTECB,A6
ST A1,ECBCW1,A8
LDKL A1,ABOT.RC RETURN CODE = ABORTED
CF A15,TENDIO COMPLETE REQUEST
ABT000 EQU *
ABL TDISP DISPATCH
EJECT
*
************************************************************
*
* REQUEST HANDLER OUTPUT PART
*
************************************************************
*
RHOP EQU *
LDK A2,2
ST A2,DCLEVL SET PROCESS INDICATION
LDR A6,A1 COPY DWT ADDRESS
LD A8,DWTECB,A6
LC A4,DWTSTE,A6
LD A5,ECBRL,A8
LD A7,DWTOR,A6 GET ORDER CODE
LDKL A11,TRANSP ROUTINE TO CALL TRANSPORT HANDLER
LDKL A14,DCSTAK SUBR.STACK POINTER
ANK A7,/3F MASK ORDER CODE
RF(Z) RSTS00 READ STATUS
SUK A7,2
RF(Z) READ00 READ
SUK A7,/06-/02
RF(Z) WRIT00 WRITE
SUK A7,/21-/06
ABL(Z) OPEN00 OPEN
SUK A7,/22-/21
ABL(Z) CLOS00 CLOSE
SUK A7,/24-/22
ABL(Z) CONA00 CONNECT ACTIVE
*
EJECT
*
SUK A7,/27-/24
ABL(Z) CONP00 CONNECT PASSIVE
SUK A7,/2F-/27
ABL(Z) DISC00 DISCONNECT
SUK A7,/38-/2F
ABL(Z) STAT00 SET STATUS
SUK A7,/39-/38
ABL(Z) TIMO00 SET TIME OUT
IFT STATI=1
ADK A7,/39
SUK A7,/2D
ABL(Z) STATS STATISTICS
XIF
ERRREQ EQU *
LDKL A1,RQUE.RC REQUEST ERROR
ABL RHEXIT COMPLETE REQUEST
*
EJECT
*
*********************************************************************
*
* READ STATUS REQUEST
*
*********************************************************************
*
RSTS00 EQU *
LD A1,DWTLAD,A6 GET LOCAL DTE ADDRESS
CF A14,FNDLIN GET LINE FLAGS
SLL A1,8
ANK A4,/FF GET DWT STATE
ORR A4,A1 PUT IT TOGETHER
ST A4,ECBCW1,A8
LDK A2,DWTRCI
ADR A2,A6
LDR* A1,A2 GET RETURN CODE INFO.
LDR A7,A1
ANKL A1,-2 RESET TOLD.RC-BIT
ANK A7,MORE.RC MORE INFORMATION ?
ABL(Z) RHEXIT NO
ADK A5,0 REQUESTED LENGTH
RF(Z) RSTS10 NO USER BUFFER
ABL(N) ERRLEN INCORRECT LENGTH
SUK A5,1
ABL(NP) ERRLEN BUFFER TO SHORT
*
EJECT
*
* MORE INFORMATION FOUND
*
RSTS10 EQU *
XRRS A7,A2 RESET MORE INFO BIT
IFF SWITVC=0
ANK A1,RSET.RC+CLEA.RC
LDR A7,A1
ANK A1,RSET.RC RESET ?
RF(Z) RSTS30 NO
XRRS A1,A2 RESET RESET-BIT
*
* TEST IF RESET AND CLEAR
*
ANK A7,CLEA.RC
RF(Z) RSTS15 NO
LDK A7,MORE.RC SET MORE INFO-BIT
XRRS A7,A2 .
RSTS15 EQU *
XIF
LDK A7,RSET.RC RESET
LDK A2,DWTRES DISP FOR RESET INFO
ADK A5,0 USER BUFFER ?
ABL(Z) RHEXIT NO
*
EJECT
*
* MOVE RESET/CLEAR INFORMATION
*
RSTS20 EQU *
ADR A2,A6
LDK A3,2 LENGTH
ST A3,ECBEL,A8
IFT MMUPAG=1
LDR A1,A2
LD A2,ECBBA,A8 USER BUFFER
LD A4,DWTTAB,A6
INH . =1
CF A15,MOVSU MOVE RESET INFORMATION TO USER
ENB . =1
XIF
IFT MMUPAG=0
LDR* A1,A2 MOVE INFO...
ST* A1,ECBBA,A8 ...TO USER BUFFER
XIF
LDR A1,A7
RF RHEXIT
IFF SWITVC=0
RSTS30 EQU *
LDR A1,A7
ANK A1,CLEA.RC CLEAR ?
RF(Z) RHEXIT COMPLETE REQUEST
LDK A3,TOLD.RC SET 'TOLD TO USER'-INDICATION
ORRS A3,A2 .
LDK A2,DWTCLE DISP FOR CLEAR INFO
ADK A5,0 USER BUFFER ?
RB(NZ) RSTS20
RF RHEXIT COMPLETE REQUEST
XIF
*
EJECT
*
************************************************************
*
* READ,WRITE AND SET STATUS REQUEST
*
************************************************************
*
READ00 EQU *
WRIT00 EQU *
STAT00 EQU *
LD A1,DWTLAD,A6
CF A14,FNDLIN FIND LINE BLOCK ADDRESS
ANK A1,STRTFL MASK START FLAG
ABL(Z) ERRSYS INCORRECT SYSTEM STATE
ANK A4,/FF
LDR A3,A4 DWTSTE
RF(Z) ERRSTE INCORRECT DWT STATE
*
* GET LC-ADM ADDRESS
*
LC A4,DWTLCN,A6
CF A14,GTLCAD
*
* TEST ON RETURN INFORMATION
*
LD A1,DWTRCI,A6 GET RETURN CODE INFORMATION
LDR A2,A1
ANK A2,MORE.RC MORE INFO ?
RF(Z) READ20 NO
LDR A2,A1
ANK A2,TOLD.RC RETURN INFO TOLD TO USER ?
IFF SWITVC=0
RF(NZ) READ10 YES
XIF
IFT SWITVC=0
RF(NZ) READ15 YES
XIF
EJECT
*
LDK A2,TOLD.RC TELL RETURN INFO TO USER
ORS A2,DWTRCI,A6
RF RHEXIT COMPLETE REQUEST
IFF SWITVC=0
*
* TEST IF RESET/CLEAR
*
READ10 EQU *
XRR A1,A2
ANK A1,CLEA.RC CLEAR ?
RF(Z) READ15 NO
LDR A1,A2
ANK A2,RSET.RC RESET ?
RF(Z) RHEXIT NO
*
* RESET AND CLEAR
*
XRS A2,DWTRCI,A6 RESET RESET-BIT
XRR A1,A2 INFORM USER ABOUT THE CLEAR
RF RHEXIT
XIF
READ15 EQU *
LDK A1,RSET.RC+MORE.RC+1
XRS A1,DWTRCI,A6 RESET RETURN INFO
*
* SEPARATE THE REQUESTS
*
READ20 EQU *
LD A4,DWTOR,A6
ANK A4,/3F
SUK A4,6
RF(Z) WRIT05 WRITE REQUEST
ABL(P) STAT05 SET STATUS REQUEST
EJECT
*
* READ REQUEST
*
SU A5,REBFSZ,A13 RECEIVE BUFFER SIZE
RF(L) ERRLEN INCORRECT LENGTH
*
* BRANCH ON DWT STATE
*
LDK A2,READAT FUNCTION CODE
LDR A4,A3 SAVE DWT STATE
ADR A3,A3
SUK A3,ENDRST+2 TEST+2 UPPER BOUND
ABI(L) RSTATE+ENDRST,A3 BRANCH ON STATE
*
* STATE TABLE,READ
*
RSTATE EQU *
DATA RCONAD CONNECTED ACCEPT DATA
DATA RCONRD CONNECTED REFUSE DATA
IFF SWITVC=0
DATA RINCAR INCOMING CALL RECEIVED(WITH ACC/REF )
DATA RINCAR INCOMING CALL RECEIVED(WITHOUT ACC/REF )
DATA RVCREL VIRTUAL CIRCUIT RELEASED
XIF
ENDRST EQU *-RSTATE
*
* READ
* CONNECTED REFUSE DATA
*
RCONRD EQU *
LDK A2,ACCDAT
CFR A14,A11 TRANSPORT HANDLER
LDK A1,CONAD CONNECTED ACCEPT DATA
SC A1,DWTSTE,A6
LDK A2,READAT FUNCTION CODE
EJECT
*
* READ
* CONNECTED ACCEPT DATA
*
RCONAD EQU *
*
* DEBLOCK INPUT QUEUE
*
LDK A1,NPRFLG
C1R A1,A1
ANS A1,QUEINP,A13
IFF SWITVC=0
SUK A4,INCALR CHECK DWT STATE
RF(Z) READ30
*
* READ
* INCOMING CALL RECEIVED,WITHOUT ACCEPT/REFUSE CALL
*
LDK A1,CONAD CONNECTED ACCEPT DATA
SC A1,DWTSTE,A6
READ30 EQU *
XIF
SC A2,DWTFNC,A6
RF WRIT50 ACTIVATE TIMER
*
EJECT
*
IFF SWITVC=0
*
* READ
* INCOMING CALL RECEIVED
*
RINCAR EQU *
LD A1,QUEINP,A13
ANKL A1,-2
RB(NZ) RCONAD
XIF
*
* WANTED ACTION NOT ALLOWED IN THIS DWT STATE
*
ERRSTE EQU *
LDKL A1,SEQE.RC SEQUENCE ERROR
RF RHEXIT COMPLETE REQUEST
IFF SWITVC=0
*
* READ
* VIRTUAL CIRCUIT CLEARED
*
RVCREL EQU *
ANK A1,CLEA.RC CONNECTION CLEARED ?
RF(NZ) RHEXIT YES,COMPLETE REQUEST
*
* ACTIVATE RHIP TO GET A PACKET
*
SC A2,DWTFNC,A6
ABL RHIPRO
XIF
*
EJECT
*
************************************************************
*
* WRITE REQUEST
*
************************************************************
*
WRIT05 EQU *
*
* BRANCH ON DWT STATE
*
SUK A3,CONAD
RF(Z) WRIT20 CONNECTED ACCEPT DATA
SUK A3,CONRD-CONAD
RF(Z) WRIT20 CONNECTED REFUSE DATA
IFT SWITVC=0
RB ERRSTE INCORRECT DWT STATE
XIF
IFF SWITVC=0
SUK A3,VCREL-CONRD
RB(NZ) ERRSTE INCORRECT DWT STATE
*
EJECT
*
* VIRTUAL CIRCUIT RELEASED
*
WRIT10 EQU *
ANK A1,TOLD.RC CLEAR ALREADY TOLD TO USER ?
RB(NZ) ERRSTE YES,SEQUENCE ERROR
LDK A1,CLEA.RC VC CLEARED
LD A2,DWTIPQ,A6
ANKL A2,-2 ANYTHING IN QUEUE ?
RF(NZ) WRIT15 YES
ORK A1,MORE.RC MORE INFO
LDR A2,A1
ORK A2,TOLD.RC RETURN CODE TOLD TO USER
ST A2,DWTRCI,A6
RF RHEXIT
WRIT15 EQU *
LD A2,BFCHPT,A2 ONLY CLEAR IN QUEUE ?
ABL(Z) RHIPRO YES
ORKL A1,DATA.RC DATA AVAILABLE
XIF
EJECT
*
*******************************************************************
*
* COMPLETE REQUEST
*
******************************************************************
*
RHEXIT EQU *
INH . =1
CF A15,TENDIO COMPLETE USER REQUEST
ENB
RHSCHE EQU *
ABL EXITDC CONTROL TO SCHEDULER
*
* CONNECTED
*
WRIT20 EQU *
ADK A5,0 REQUESTED LENGTH
RF(N) ERRLEN INCORRECT LENGTH
LC A3,DWTOPT,A6 GET NEW OPTION CODE
LDR A4,A3
ANK A4,INTOPT INTERRUPT ?
RF(Z) WRIT30 NO
LDK A2,WRIINT INTERRUPT
ADK A5,0 REQUESTED LENGTH
RF(N) ERRLEN INCORRECT LENGTH
SUK A5,1
RF(Z) WRIT45
ERRLEN EQU *
LDKL A1,INVL.RC INCORRECT LENGTH
RB RHEXIT
*
EJECT
*
* WRITE DATA
*
WRIT30 EQU *
CW A5,TRBFSZ,A13 TRANSMIT BUFFER SIZE
RB(G) ERRLEN INCORRECT LENGTH
LDR A4,A3
ANK A4,MOPT MORE DATA ?
RF(Z) WRIT35 NO
CW A5,TRBFSZ,A13
RB(NE) ERRLEN
WRIT35 EQU *
LC A1,DWTWRO,A6 GET OLD OPTION CODE
LDR A2,A1
ANK A1,MOPT MORE DATA ?
RF(Z) WRIT40 NO
ANK A2,QOPT OLD Q-BIT
LDR A4,A3
ANK A4,QOPT NEW Q-BIT
SUR A2,A4 SAME ?
RB(NZ) ERRSTE NO,SEQUENCE ERROR
WRIT40 EQU *
LDK A2,WRIDAT DATA
SC A3,DWTWRO,A6 SAVE NEW OPTION CODE
WRIT45 EQU *
CFR A14,A11 TRANSPORT HANDLER
*
EJECT
*
*
* ACTIVATE TIMER
*
WRIT50 EQU *
LD A8,DWTRTV,A6 REQUEST TIMER VALUE
RB(Z) RHSCHE NO TIMER,CONTROL TO SCHEDULER
LDKL A4,TIMOUT+1 TIME OUT ROUTINE
LDR A12,A6
CF A14,STRTIM START TIMER
ST A4,DWTRTP,A6
RB RHSCHE CONTROL TO SCHEDULER
*
EJECT
*
*
************************************************************
*
* OPEN REQUEST
*
************************************************************
*
OPEN00 EQU *
CF A14,FNDLOC CONFIRM LOCAL DTE ADDRESS
ANK A1,STRTFL MASK START FLAG
RF(NZ) ERRSYS LINE OPEN
*
* LINE CLOSED
* CHECK IF OPEN SYSTEM ALREADY PENDING
*
LD A3,CMNFLG,A12
ANK A3,OPEFLG
RF(Z) OPEN10 NO
ERRSYS EQU *
LDKL A1,LOGE.RC INCORRECT SYSTEM STATE
RB RHEXIT COMPLETE REQUEST
*
EJECT
*
* CHECK TABLE LENGTH
*
OPEN10 EQU *
ADK A5,0
RF(Z) OPEN15 NO ADDRESS TABLE
*
* ADDR. TABLE NOT SUPPORTED IN PRR 11.0
*
RB ERRLEN LENGTH ERROR
OPEN15 EQU *
LD A3,ECBCW2,A8 GET LOCAL SYMBOLIC DTE ADDRESS
ST A3,DWTLAD,A6
LDK A2,OPESYS OPEN SYSTEM
OPEN30 EQU *
CFR A14,A11 TRANSPORT HANDLER
IFF PERMVC=0
*
* UPDATE PVC WITH REMOTE ADDRESS
*
LDKL A1,PVCTYP PVC IDENTIFICATION
LDKL A2,SCTDCT POINTER TO DC ADDRESS TABLE
LDKL A3,LINTAB-2
IFF SYNRLN=1
LDK A4,SYNRLN NUMBER OF LINES
XIF
IFF PERMVC=0
OPEN40 EQU *
ADK A3,2 POINTER TO LC-ADM BLOCK-POINTER TABLE
LDR* A5,A3 LC-ADM BLOCK POINTER
LC A7,NRPVC,A5 NUMBER OF PVC'S
RF(Z) OPEN80 NO PVC'S
LD A5,LC:TAB,A5 LC-ADM BLOCK TABLE
*
EJECT
*
* GET NEXT ENTRY IN DC ADDR. TABLE
*
OPEN60 EQU *
LDR* A2,A2 END OF TABLE ?
RF(Z) OPEN90 YES
*
* TEST IF PVC
*
CW A1,4,A2
RB(NE) OPEN60 NO
OPEN70 EQU *
LDR* A8,A5 LC-ADM ENTRY
LD A9,2,A2 GET SYMBOLIC ADDRESS
ST A9,REMADR,A8 SAVE IT IN LC-ADM
ADK A5,2 ADDRESS NEXT LC
SUK A7,1 MORE PVC'S ?
RB(NZ) OPEN60 YES
OPEN80 EQU *
IFF SYNRLN=1
SUK A4,1 MORE LINES ?
RB(NZ) OPEN40 YES
XIF
OPEN90 EQU *
LDK A3,0 SET RETURN CODE
CF A14,CMPREQ COMPLETE REQUEST
RB RHSCHE
*
EJECT
*
*
*
********************************************************************
*
* CONNECT PASSIVE REQUEST
*
********************************************************************
*
CONP00 EQU *
IFT SWITVC=0
ABL ERRREQ REQUEST ERROR
XIF
IFF SWITVC=0
LDK A2,CONPAS FUNCTION CODE
RF CONA05
XIF
*
EJECT
*
********************************************************************
*
* CONNECT ACTIVE REQUEST
*
********************************************************************
*
CONA00 EQU *
IFF SWITVC=0
*
* TEST MESSAGE LENGTH
*
SUK A5,SYMXDL-5
IFT CALDTE=1
ADK A5,4
XIF
IFF SWITVC=0
RB(P) ERRLEN INCORRECT LENGTH
XIF
LDK A2,CONACT FUNCTION CODE
CONA05 EQU *
CF A14,FNDLOC CONFIRM LOCAL DTE ADDRESS
ANK A1,STRTFL MASK START FLAG
RB(Z) ERRSYS INCORRECT SYSTEM STATE
ANK A4,/FF
IFT SWITVC=0
ABL(NZ) ERRSTE INCORRECT DWT STATE
XIF
IFF SWITVC=0
*
EJECT
*
RF(Z) CONA10
SUK A4,VCREL
RF(NZ) CLOS10 SEQUENCE ERROR
LD A1,DWTRCI,A6 RETURN INFO
LDR A3,A1
ANK A3,CLEA.RC CLEAR DETECTED ?
RF(Z) CLOS10 NO,CONNECT NOT ALLOWED
ANK A1,TOLD.RC TOLD TO USER ?
RF(Z) CLOS10 NO
CONA10 EQU *
XIF
EJECT
*
* SAVE SYMBOLIC DTE ADDRESSES
*
LD A3,ECBCW2,A8 LOCAL SYMBOLIC DTE ADDRESS
ST A3,DWTLAD,A6
LD A3,ECBCW1,A8 REMOTE SYMBOLIC DTE ADDRESS
ST A3,DWTRAD,A6
CM DWTRTP,A6 CLEAR TIMER ADDRESS
CM DWTIPQ,A6 CLEAR INPUT QUEUE
CM DWTRCI,A6 CLEAR RETURN INFO.
CM DWTWRO,A6 CLEAR WRITE INFO.
CFR A14,A11 TRANSPORT HANDLER
CM DWTRCI,A6 CLEAR RETURN INFO
CF A14,PUTDWT PUT DWT IN CHAIN
IFF SWITVC=0
IFF PERMVC=0
SUK A2,CONACT CONNECT ACTIVE
RF(NZ) CONA40 NO!
LC A2,DWTOPT,A6 PVC-OPTION?
SUK A2,1
RF(NZ) CONA40 NO
XIF
IFF PERMVC=0
LDK A2,CONAD
SC A2,DWTSTE,A6 DWT STATE: CONNECTED ACCEPT DATA
RF DISC40 COMPLETE REQUEST
XIF
IFF SWITVC=0
CONA40 EQU *
RB WRIT50 ACTIVATE TIMER
XIF
*
EJECT
*
************************************************************
*
* CLOSE REQUEST
*
************************************************************
*
CLOS00 EQU *
CF A14,FNDLOC CONFIRM LOCAL DTE ADDRESS
ANK A1,STRTFL MASK START FLAG
RF(Z) DISC40 CLOSE ALREADY DONE
*
* LINE OPEN
* CHECK IF CLOSE ALREADY IN PROGRESS
*
LDK A2,CLOSYS
LD A3,CMNFLG,A12
ANK A3,CLOFLG
RF(Z) DISC55 NO
CLOS10 EQU *
ABL ERRSTE SEQUENCE ERROR
*
EJECT
*
*******************************************************************
*
* DISCONNECT REQUEST
*
*******************************************************************
*
DISC00 EQU *
LD A1,DWTLAD,A6 GET LOCAL SYMBOLIC DTE ADDRESS
CF A14,FNDLIN FIND LINE BLOCK ADDRESS
ANK A1,STRTFL MASK START FLAG
ABL(Z) ERRSYS INCORRECT SYSTEM STATE
ANK A4,/FF
RF(Z) DISC40 DISCONNECT ALREADY DONE
CM DWTRCI,A6 CLEAR RETURN INFO
IFT SWITVC=0
RF DISC50
XIF
IFF SWITVC=0
SUK A4,VCREL VIRTUAL CIRCUIT RELEASED
RF(NZ) DISC50 NO
*
* CLEAR INPUT QUEUE
*
DISC10 EQU *
LDK A1,DWTIPQ INPUT QUEUE ANCHOR
ADR A1,A6
LD A2,DWTIPQ,A6 QUEUE EMPTY ?
RF(Z) DISC20 YES
CF A14,DEQUE DEQUEUE ELEMENT
CF A14,RLBUF RELEASE BUFFER
RB DISC10 TAKE NEXT
DISC20 EQU *
LDK A1,DISCON DISCONNECTED
SC A1,DWTSTE,A6
XIF
*
EJECT
*
* REMOVE DWT FROM CHAIN
*
DISC25 EQU *
CF A14,RELDWT RELEASE DWT FROM CHAIN
DISC40 EQU *
LDK A1,ACPT.RC ACCEPTED
ABL RHEXIT COMPLETE REQUEST
DISC50 EQU *
LDK A2,DISCAL
DISC55 EQU *
LDK A5,DISCON
DISC60 EQU *
CFR A14,A11 TRANSPORT HANDLER
SC A5,DWTSTE,A6
IFF PERMVC=0
IFF SWITVC=0
*
* TEST IF PERMANENT VIRTUAL CIRCUIT
*
LC A1,VCTYP,A13
ANK A1,PVC
RF(Z) DISC70 NO
XIF
IFF SWITVC=0
SUK A2,DISCAL DISCONNECT ?
RB(Z) DISC25 YES
DISC70 EQU *
ABL RHSCHE CONTROL TO SCHEDULER
XIF
IFT SWITVC=0
RB DISC25
XIF
*
EJECT
*
***********************************************************
*
* SET STATUS REQUEST
*
***********************************************************
*
STAT05 EQU *
IFF SWITVC=0
LDR A1,A3
SUK A1,VCREL VIRTUAL CIRCUIT RELEASED
ABL(Z) WRIT10 COMPLETE REQUEST
XIF
LD A1,ECBCW1,A8 GET STATUS INFORMATION
IFT SWITVC=0
ABL(NZ) ERRREQ REQUEST ERROR
XIF
IFF SWITVC=0
RF(NZ) STAT20 ACCEPT CALL REQUEST
XIF
SUK A3,CONAD CONNECTED ACCEPT DATA
RF(Z) STAT10 YES
SUK A3,CONRD-CONAD CONNECTED REFUSE DATA
RB(NZ) CLOS10 SEQUENCE ERROR
*
* REFUSE DATA REQUEST
*
STAT10 EQU *
LDK A2,REFDAT REFUSE DATA
LDK A1,CONRD
SC A1,DWTSTE,A6
CFR A14,A11 TRANSPORT HANDLER
ABL RHSCHE CONTROL TO SCHEDULER
IFF SWITVC=0
*
EJECT
*
* ACCEPT CALL REQUEST
*
STAT20 EQU *
SUK A3,INCALR INCOMING CALL RECEIVED
RB(NZ) CLOS10 SEQUENCE ERROR
LDK A2,ACCCAL ACCEPT CALL
LDK A5,CONAD CONNECTED ACCEPT DATA
RB DISC60 TRANSPORT HANDLER
XIF
EJECT
*
********************************************************************
*
* SET TIMEOUT REQUEST
*
********************************************************************
*
TIMO00 EQU *
LD A1,ECBCW1,A8 GET TIMER VALUE
ST A1,DWTRTV,A6
RB DISC40 COMPLETE REQUEST
*
IFT STATI=1
EJECT
*
*
***********************************************************
*
* STATISTIC REQUEST
*
***********************************************************
*
*
STATS EQU *
CF A14,FNDLOC GET LINE NUMBER
LDK A4,STATFL
ANR A4,A1
ABL(NZ) ERRREQ STATISTIC REQUEST BUSY
LD A2,ECBRL,A8
ABL(NP) ERRLEN LENGTH ERROR
ORS A1,CMNFLG,A12 SET STATISTIC REQUEST BUSY FLAG
LDK A1,STATIS
SC A1,DWTFNC,A6 SAVE FUNCTION CODE
*
* SAVE THREE WORDS OF THE USER ECB IN A MONITOR BLOCK
*
LD A1,ECBFC,A8
LD A2,ECBBA,A8
LD A3,ECBCW2,A8
INH . =1
CF A15,GETBLK GET A BLOCK AND SAVE REGISTERS
ENB
ST A4,DWTRTP,A6 SAVE BLOCK ADDRESS IN DWT
ST A6,ECBCW2,A8 SAVE DWT-ADDRESS IN ECB
*
EJECT
*
* PREPARE ECB FOR STATISTIC REQUEST TO LEVEL 2
*
LD A1,FILCOD,A12
ST A1,ECBFC,A8 FILE CODE FOR LINE IDENTIFICATION
IFT MMUPAG=1
LDR A1,A12
ADK A1,INTSTB ADDRESS INTERMEDIATE STATISTIC BUFFER
ST A1,ECBBA,A8 TO ECB
XIF
IFT STATI=1
LDR A1,A8 ECB-ADDRESS AS PARAMETER
*
* ISSUE STATISTIC REQUEST TO LEVEL 2
*
LDK A7,STATR FUNCTION CODE
LKM
DATA -1
DATA STAEND ACTIVATION ADDRESS
ABL EXITDC CONTROL TO SCHEDULER
*
EJECT
*
* RETURN FROM LEVEL 2
*
STAEND EQU *
LDR A8,A1 ECB-ADDRESS
LD A6,ECBCW2,A8 GET DWT-ADDRESS
LD A4,DWTRTP,A6 GET ADDRESS SAVE BLOCK
CM DWTRTP,A6
INH . =1
CF A15,FREBLK RELEASE BLOCK
ENB
ST A1,ECBFC,A8 RESTORE FILE CODE
ST A3,ECBCW2,A8 RESTORE CONTROL WORD
IFT MMUPAG=1
LD A1,ECBBA,A8 GET INTERMEDIATE STAT. BUFFER ADDRESS
ST A2,ECBBA,A8 RESTORE OLD BUFFER ADDRESS
LD A4,ECBEL,A8
LDKL A14,DCSTAK STACK POINTER
CF A14,COPTUB COPY STAT.INFO.TO USER BUFFER
XIF
IFT STATI=1
LD A1,ECBRC,A8 RETURN CODE
INH . =1
CF A15,TENDIO COMPLETE REQUEST TO USER
ENB
LDR A1,A3
CF A14,FNDLIN GET LINE BLOCK ADDRESS
LDK A1,STATFL
C1R A1,A1
ANS A1,CMNFLG,A12 RESET STAT. BUSY FLAG
ABL EXITDC CONTROL BACK TO SCHEDULER
XIF
EJECT
*
* ROUTINE TO GET LINE INDEX AND/OR
* LINE BLOCK ADDRESS
*
***********************************************************
*
* INPUT PARAMETER :
* A1 =SYMBOLIC LOCAL DTE ADDRESS
*
* CALLING SEQUENCE :
* CF A14,FNDLIN
* CF A14,FNDLOC (A1 LOADED IN THE ROUTINE)
*
* OUTPUT PARAMETERS :
* A1 = COMMON FLAGS
* A12= LINE BLOCK ADDRESS
* A3 = LINE INDEX
* NO OTHER REGISTERS ARE CHANGED
*
FNDLOC EQU *
LD A1,ECBCW2,A8 GET LOCAL DTE ADDRESS
FNDLIN EQU *
STR A2,A14 SAVE A2
LDKL A3,LOCAL SET TYPE
INH . =1
CF A15,FNDDNT FIND LOCAL DTE
ENB . =1
LDR A1,A1 FOUND ?
RF(NN) FNDL10 YES
ADKL A14,4 ADJUST STACK POINTER
ABL ERRREQ REQUEST ERROR
FNDL10 EQU *
IFF SYNRLN=1
ADR A3,A3
XIF
LD A12,LINTAB,A3 LINE ADM. TABLE
LD A1,CMNFLG,A12 GET COMMON FLAGS
LDR* A2,A14 RELOAD A2
RTN A14
EJECT
*
*
* PUT DWT IN CHAIN
*
********************************************************************
*
* INPUT PARAMETERS:
* A6 = DWT ADDRESS
* A12 = LINE ADM.BLOCK ADDRESS
* A14 = CF STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,PUTDWT
*
* OUTPUT PARAMETERS:
* A1 IS CHANGED
*
PUTDWT EQU *
STR A2,A14 SAVE A2
LDR A2,A12
ADK A2,CHAIN
PUTD10 EQU *
LDR* A1,A2 GET ANCHOR
RF(Z) PUTD20
LDR A2,A1
ADK A2,DWTCHN
RB PUTD10 END OF CHAIN ?
PUTD20 EQU *
STR A6,A2 PUT IN CHAIN
LDR* A2,A14 RESTORE A2
RTN A14
*
EJECT
*
*
* RELEASE DWT FROM CHAIN
*
*********************************************************************
*
* INPUT PARAMETERS:
* A6 = DWT ADDRESS
* A12 = LINE ADM.BLOCK ADDRESS
* A14 = CF STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,RELDWT
*
* OUTPUT PARAMETERS:
* A1 AND A2 ARE CHANGED
*
RELDWT EQU *
LDR A2,A12
ADK A2,CHAIN
RF RELD20 FIRST IN CHAIN ?
RELD10 EQU *
LDR A2,A1
ADK A2,DWTCHN
RELD20 EQU *
LDR* A1,A2 GET NEXT DWT
RF(Z) RELD30 END OF CHAIN
CWR A1,A6 FOUND ?
RB(NE) RELD10 NO
LD A1,DWTCHN,A6
STR A1,A2 REMOVE FROM CHAIN
CM DWTCHN,A6
RELD30 EQU *
RTN A14
*
EJECT
*
* TRANSPORT HANDLER INTERFACE
*
TRANSP EQU *
SC A2,DWTFNC,A6 SAVE FUNCTION CODE
CF A14,TRANSH CALL TRANSPORT HANDLER
LDR A4,A4 RETURN CODE
RF(Z) TRANSR NO ERROR,RETURN
*
* RETURN CODE TRANSLATION
*
LD A1,RTNCTR,A4
LDKL A4,RHEXIT
ST A4,4,A14 ADJUST RETURN ADDRESS
TRANSR EQU *
RTN A14
*
RTNCTR EQU *
DATA ACPT.RC
DATA ACPT.RC ACCEPT
DATA CLEA.RC VIRTUAL CIRCUIT CLEARED
DATA PHYE.RC NOT OPERABLE
DATA SEQE.RC INVALID Q-BIT
DATA INVL.RC INVALID LENGTH
DATA SEQE.RC INVALID STATE
DATA INVL.RC INVALID LENGTH
DATA NOLC.RC NO LOGICAL CHANNEL AVAILABLE
DATA TIMO.RC TIME OUT DETECTED
DATA RQUE.RC REQUEST ERROR
*
EJECT
*
********************************************************************
*
* REQUEST HANDLER INPUT PART
*
********************************************************************
*
* ENTRY USED BY THE DC-SCHEDULER
*
* INPUT PARAMETERS:
* A1 = QUEUE ANCHOR ADDRESS
* A12 = ADDRESS OF LINE ADMINISTRATION BLOCK
* A13 = ADDRESS OF LOGICAL CHANNEL ADM.BLOCK
* A14 = CF STACK POINTER
*
RHIP EQU *
LDK A7,0 A7:=INDICATION FOR RHIP-ENTRY-POINT
RF RHIP10
*
* ENTRY USED BY THE REQUEST HANDLER OUTPUT PART
*
* INPUT PARAMETERS:
* A6 = DWT ADDRESS
* A14 = CF STACK POINTER
*
RHIPRO EQU *
*
* SET ADDRESS OF QUEUE ANCHOR
*
LDK A1,DWTIPQ
ADR A1,A6
LDK A7,6 A7:=INDICATION FOR RHIPRO-ENTRY-POINT
ST A7,DCLEVL SET DC-LEVEL-INDICATION
*
EJECT
*
* DEQUEUE ELEMENT
*
RHIP10 EQU *
LDR A11,A1 A11=QUEUE ANCHOR
CF A14,DEQUE
LDR A8,A2 A8=BUFFER ADDRESS
*
* GET TYPE OF PACKET
*
LDK A2,0
LC A2,IDENT,A8 A2:=PACKET TYPE
LDK A3,0 A3:=PACKET TYPE INDEX FOR PROCESS-TABLE
*
* TEST IF ENTRY POINT WAS RHIP
*
LDR A7,A7
RF(NZ) RHIP20 NO!
*
* GET DWT ADDRESS FROM LC-ADM
*
LD A6,LCDWT,A13 A6=DWT ADDRESS
RHIP20 EQU *
*
* GET PENDING REQUEST INDICATION
*
LD A5,DWTST,A6
RF(N) RHIP30 NO REQUEST PENDING
*
* GET PENDING REQUEST
*
LDK A5,0
LC A5,DWTFNC,A6
*
EJECT
*
* TEST IF READ REQUEST PENDING
*
SUK A5,READAT
RF(Z) RHIP30 YES
*
* RELOAD REQUEST
*
ADK A5,READAT
RHIP30 EQU *
LDR A6,A6
RF(NZ) RHIP40 DWT ADDRESS AVAILABLE
IFF SWITVC=0
*
* NO DWT ADDRESS
* TEST IF PACKET TYPE IS "CALL PACKET"
*
LDK A3,6 A3:=INDEX FOR PROCESS-TABLE
SUK A2,CAL.P
RF(Z) RHIP90 PROCESS CALL PACKET
*
*
* NO CALL PACKET
*
XIF
*
* RELEASE BUFFER AND SEND CLEAR/RESET PACKET
*
LDK A1,NOUSER A1:=DIAGNOSTIC CODE
RF RHI100
*
RHIP40 EQU *
LDK A1,DWTRCI
ADR A1,A6
LDKL A9,DATA.RC
*
EJECT
*
* TEST IF THERE IS MORE IN THE QUEUE
*
LDR* A4,A11
RF(Z) RHIP50 NO
ORRS A9,A1 SET INDICATION 'DATA RECEIVED'
RF RHIP60
RHIP50 EQU *
C1R A9,A9
ANRS A9,A1 RESET INDICATION 'DATA RECEIVED'
RHIP60 EQU *
IFF SWITVC=0
*
* DWT ADDRESS AVAILABLE
* TEST IF ENTRY POINT WAS RHIP
*
LDR A7,A7
RF(NZ) RHIP70 NO!
*
* TEST IF VC RELEASED
*
LDK A4,VCREL
LDR A10,A4
LC A4,DWTSTE,A6
SUR A10,A4
RF(NZ) RHIP70 NO!
*
EJECT
*
* VC RELEASED
* MOVE INPUT QUEUE ANCHOR FROM LC-ADM TO DWT
*
LDR* A7,A11 A1:=QUEUE ANCHOR
RF(Z) RHIP65
LDR* A4,A7 MORE DATA IN QUEUE ?
RF(NZ) RHIP65 YES
XRRS A9,A1 RESET MORE DATA BIT IN DWTRCI
RHIP65 EQU *
CMR A11 CLEAR QUEUE ANCHOR IN LC.ADM
LDKL A11,DWTIPQ
ADR A11,A6 A11:=ADDRESS OF QUEUE ANCHOR IN DWT
STR A7,A11 STORE QUEUE ANCHOR IN DWT
CM LCDWT,A13 CLEAR RELATION WITH LOGICAL CHANNEL
XIF
*
* TEST IF PACKET TYPE IS "DATA PACKET"
*
RHIP70 EQU *
LDK A4,DATA.P
TM A4,A2
ABL(Z) DATPAC PROCESS DATA PACKET
*
* NO DATA PACKET
*
RHIP80 EQU *
CC A2,TABLE,A3
RF(E) RHIP90 TYPE FOUND
ADK A3,1
RB RHIP80 TRY NEXT PACKET TYPE
*
RHIP90 EQU *
ADR A3,A3 A3:=INDEX FOR PROCESS-TABLE
ABI PACPRO,A3 PROCESS PACKET
*
EJECT
*
* TABLE OF MATCHING PACKET PROCESSING ROUTINES
*
PACPRO EQU *
DATA HALT,HALT RESTART(-CONF.)PACKET
DATA RESPAC,HALT RESET(-CONF.)PACKET
IFF SWITVC=0
DATA CLEPAC,HALT CLEAR(-CONF.)PACKET
DATA CALPAC,CALCON CALL(-CONF.)PACKET
XIF
DATA INTPAC,INTCON INTERRUPT(-CONF.)PACKET
*
* UNEXPECTED PACKET RECEIVED
*
HALT EQU *
HLT
*
*
* GENERAL EXIT OF RHIP
* RELEASE BUFFER AND SEND CLEAR/RESET PACKET
*
RHI100 EQU *
LDR A2,A8
CF A14,RLBUF RELEASE BUFFER
RHI110 EQU *
ABL CLVC EXIT OF RHIP
*
EJECT
*
* COMPLETE REQUEST WITH RETURNCODE "ACCEPTED"
*
RHI120 EQU *
LDK A3,ACPT.RC
*
* COMPLETE REQUEST WITH GIVEN RETURNCODE IN A3
*
RHI130 EQU *
CF A14,CMPREQ
*
* RELEASE BUFFER AND EXIT
*
RHI140 EQU *
LDR A2,A8
CF A14,RLBUF
RF RIPEXI
*
* REQUEUE BUFFER,BLOCK QUEUE AND EXIT
*
RHI150 EQU *
LDR A1,A11 A1:=ADDRESS OF QUEUE ANCHOR
LDR A2,A8 A2:=BUFFER ADDRESS
CF A14,QUEUEF
*
* BLOCK QUEUE
*
LDK A1,NPRFLG A1:=0 PROCESSING FLAG
ORRS A1,A11
*
* EXIT OF RHIP
*
RIPEXI EQU *
ABL EXITDC
EJECT
*
*
* TIMEOUT ROUTINE OF REQUEST HANDLER
*
********************************************************************
*
* INPUT PARAMETERS:
* A12 = DWT ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CF STACK POINTER
*
TIMEXP EQU *
LDK A3,TIMO.RC PRE-SET RETURNCODE"TIMEOUT"
*
* GET ADDRESS OF DWT
*
LDR A6,A12
*
* TEST IF REQUEST ALREADY COMPLETED
*
LD A5,DWTRTP,A6
RB(Z) RIPEXI YES!
*
* CLEAR RUNNING TIMER INDICATION
*
CM DWTRTP,A6
*
EJECT
*
* SCAN ON PENDING REQUEST
*
LDK A5,0
LC A5,DWTFNC,A6
LDR A7,A5 SAVE FUNCTION CODE
SUK A5,WRIDAT WRITE DATA REQUEST
RF(Z) TIME00 YES
SUK A5,READAT-WRIDAT READ REQUEST
RF(Z) COMPLE YES
ADK A5,READAT-WRIINT WRITE INTERRUPT REQUEST
RF(NZ) TIME30 NO
*
* TIMEOUT ON WRITE REQUEST
* TEST IF REQUEST STILL IN OUTPUT QUEUE
*
TIME00 EQU *
LDR A1,A13
ADK A1,QUEOUT A1:=ADDRESS OF OUTPUT QUEUE ANCHOR
*
* TEST IF QUEUE IS EMPTY
*
LDR* A2,A1
RF(Z) TIME20
*
* TEST IF ONLY NO-PROCESSING FLAG IS SET
*
TIME10 EQU *
SUK A2,1
RF(Z) TIME20 YES!
CF A14,DEQUE DEQUEUE ELEMENT
*
EJECT
*
* TEST IF IT IS THE ONE WE ARE LOOKING FOR
*
CWR A2,A6
RF(E) COMPLE YES!
*
* TEST IF THERE IS ANOTHER ELEMENT IN THE QUEUE
*
LDR* A4,A1
CF A14,QUEUE RE-QUEUE ELEMENT
RB(NZ) TIME10 GET SECOND ELEMENT FROM QUEUE
*
* ELEMENT NOT IN QUEUE
* IF NOT WRITE INTERRUPT,IGNORE TIMEOUT
*
TIME20 EQU *
SUK A7,WRIINT
RF(NZ) COMEXI
*
* COMPLETE REQUEST WITH TIMEOUT RETURNCODE
*
COMPLE EQU *
CF A14,CMPREQ
IFT SWITVC=0
TIME30 EQU *
XIF
COMEXI EQU *
RB RIPEXI
IFF SWITVC=0
*
EJECT
*
* RELEASE DWT FROM CHAIN
*
TIME30 EQU *
IFF SWITVC=0
IFF SYNRLN=1
LD A1,DWTLAD,A6 LOCAL DTE ADDRESS
CF A14,FNDLIN GET LINE BLOCK ADDRESS
CF A14,RELDWT
LDK A3,TIMO.RC TIME OUT
XIF
IFF SWITVC=0
IFT SYNRLN=1
LD A12,LINTAB LINE BLOCK ADDRESS
CF A14,RELDWT RELEASE DWT FROM CHAIN
XIF
IFF SWITVC=0
SUK A7,CONACT CONNECT ACTIVE REQUEST ?
RF(Z) TIME40 YES
SUK A7,CONPAS-CONACT CONNECT PASSIVE REQUEST ?
RB(Z) COMPLE YES
*
* (AUTOMATIC)ACCEPT REQUEST
*
TIME40 EQU *
*
* CLEAR DWT TO LC-ADM RELATION
*
LDK A4,0
LC A4,DWTLCN,A6 LC NUMBER
CF A14,GTLCAD GET LC-ADM ADDRESS
CM LCDWT,A13 CLEAR DWT-ADDRESS
CF A14,CMPREQ COMPLETE REQUEST
LDK A1,0
RB RHI110 SEND CLEAR PACKET AND EXIT
*
EJECT
*
*
* CALL PACKET
*
********************************************************************
*
* INPUT PARAMETERS:
* A5 = REQUEST PENDING IND.
* A6 = DWT ADDRESS OR ZERO
* A8 = BUFFER ADDRESS
* A11 = QUEUE ANCHOR
* A12 = LINE-ADM ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CF STACK POINTER
*
CALPAC EQU *
*
* TEST IF ONLY USER DATA HAS TO BE PASSED TO THE USER
*
LDR A6,A6
ABL(NZ) CAL180 YES!
*
* GET DWT FOR LOGICAL CHANNEL
*
LD A6,CHAIN,A12 GET DWT CHAIN ANCHOR
RF(Z) CALP30 NO CONNECT REQUEST FOR THIS LINE
*
EJECT
*
* TEST IF CONNECT PASSIVE REQUEST IS PENDING
*
CALP10 EQU *
LD A4,DWTST,A6
RF(N) CALP20 NO REQUEST PENDING
LDK A4,CONPAS
CC A4,DWTFNC,A6 CONNECT PASSIVE ?
RF(E) CALP40 YES
CALP20 EQU *
LD A6,DWTCHN,A6 GET NEXT DWT
RB(NZ) CALP10 .
*
* NO MATCHING DWT FOUND
* RELEASE BUFFER AND SEND CLEAR/RESET PACKET AND EXIT
*
CALP30 EQU *
LDK A1,NOTINT A1:=DIAGNOSTIC CODE
RB RHI100
*
* TEST IF CALLING DTE-ADDRESS KNOWN BY SYSTEM
*
CALP40 EQU *
LDK A5,BEGDAT
ADR A5,A8
*
* GET ADDRESS WHERE CALLING LENGTH IN PACKET WILL BE STORED
*
LCR A1,A5
ADK A5,1
LDR A2,A5
IFT CALDTE=1
*
EJECT
*
* TEST IF CALLED DTE-ADDRESS ALSO IN PACKET
*
LDR A4,A1
ANK A4,/0F
RF(Z) CALP80 NO
*
* MOVE CALLING DTE-ADDRESS TO CALLED DTE-ADDRESS
*
LDR A7,A2
SRL A4,1 LENGTH OF CALLED DTE IN OCTADS
* TRUCATED!!!
ADR A5,A4
*
* TEST IF CALLING DTE-ADDRESS STARTS ON OCTAD BOUNDARY IN PACKET
*
LDR A3,A1
SRL A1,4 A1:=LENGTH OF CALLING DTE IN SEMI-OCT
LDR A4,A1 LENGTH OF CALLING DTE IN SEMI-OCTADS
ANK A3,1
RF(Z) CALP60 YES
*
EJECT
*
* DTE-ADDRESS STARTS 0N SEMI-OCTAD
*
CALP50 EQU *
LCR A3,A5
SLL A3,8 A3:=HIGH ORDER DIGIT
ADK A5,1 UPDATE ADDRESS OF CALLING DTE IN PAC
LCR A3,A5
SRL A3,4 A3:=LOW ORDER DIGIT
SCR A3,A7 STORE DIGITS AT BEGIN OF PACKET
ADK A7,1 UPDATE ADDRESS
SUK A4,2
RB(P) CALP50 MOVE NEXT TWO DIGITS
RF(NZ) CALP85
ADK A5,1
RF CALP85
*
* DTE-ADDRESS STARTS ON OCTAD BOUNDARY
*
CALP60 EQU *
LCR A3,A1
SCR A3,A7
ADK A7,1
ADK A5,1
SUK A4,2
RB(P) CALP60
RF CALP85
CALP80 EQU *
XIF
IFF SWITVC=0
LDR A4,A1
SRA A4,5
RF(NN) CALP82
ADK A4,1
CALP82 EQU *
ANK A4,/0F LENGTH IN OCTETS
ADR A5,A4
CALP85 EQU *
*
EJECT
*
* GET DTE-ADDRESS
*
LDKL A3,LOCAL SET TYPE
INH . =1
CF A15,GETDST GET SYMBOLIC DTE-ADDRESS
ENB . =1
*
* TEST IF SYMBOLIC DTE ADDRESS FOUND
*
LDR A1,A1
RB(N) CALP30 NO
*
* TEST IF REMOTE ADDRESS ACCEPTED
*
LD A2,DWTRAD,A6
RF(Z) CALP90 ALL REMOTE ACCEPTED
CWR A1,A2
RB(NE) CALP20 NOT ACCEPTED,TRY NEXT
*
* DWT FOUND
*
CALP90 EQU *
ST A1,DWTRAD,A6 STORE REMOTE SYMBOLIC DTE-ADDRESS
LD A2,DWTECB,A6
ST A1,ECBCW1,A2
*
EJECT
*
* STORE LOG CHAN NUMBER IN DWT
*
LC A1,LCIDNT,A8 GET LC NUMBER
SC A1,DWTLCN,A6 STORE IT IN DWT
*
* STORE DWT ADDRESS IN LC-ADM
*
ST A6,LCDWT,A13
*
* TEST IF FACILITIES OR USER DATA AVAILABLE
*
LDR* A3,A8 PACKET LENGTH
ADR A3,A8 END ADDRESS OF PACKET
SUK A3,2
CWR A5,A3 FACILITIES OR USER DATA IN PACKET ?
RF(E) CAL150 NO
STR A5,A8 STORE BEGIN ADDR.IN HDLC-HEADDER
*
EJECT
*
* TEST IF FACILITIES ONLY
*
LCR A1,A5
ANK A1,/3F A1:=LENGTH OF FACILITIES
RF(Z) CAL100 NO FACILITIES AT ALL
ADR A1,A5
CWR A1,A3
RF(NE) CAL100 FACILITIES AND USER DATA
*
* ONLY FACILITIES
*
ADK A1,1 ADD FACILITY-LENGTH OCTAD
SUR A1,A5
LDR A3,A1
RF CAL110
CAL100 EQU *
ADK A3,2
SUR A3,A5 A3:=LENGTH IN OCTADS
CAL110 EQU *
SC A3,LCIDNT,A8 STORE LENGTH IN LOGICAL CHAN.NUMBER
LDKL A3,DATA.RC
*
* TEST IF OPTION SET IN CONNECT PASSIVE REQUEST
*
LDK A2,INCALR
LC A4,DWTOPT,A6
ANK A4,CALOPT
RF(NZ) CAL130 YES
*
* SEND CALL CONFIRMATION
*
ST A3,DWTRCI,A6
*
EJECT
*
* REQUEUE BUFFER AND BLOCK QUEUE
*
LDR A2,A8
LDR A1,A11
CF A14,QUEUEF REQUEUE BUFFER
LDK A1,NPRFLG
ORRS A1,A11 BLOCK QUEUE
LDK A5,INCALL
CAL120 EQU *
LDK A2,ACCCAL
LDKL A11,TRANSP
ABL DISC60 ACCEPT CALL
CAL130 EQU *
SC A2,DWTSTE,A6
CF A14,CMPREQ
*
* REQUEUE BUFFER,BLOCK QUEUE AND EXIT
*
CAL140 EQU *
ABL RHI150
*
EJECT
*
* NO USER DATA AVAILABLE
* TEST IF OPTION SET IN CONNECT PASSIVE REQUEST
*
CAL150 EQU *
LDK A5,CONAD
LC A3,DWTOPT,A6
ANK A3,CALOPT
RF(NZ) CAL155 YES
LDR A2,A8
CF A14,RLBUF RELEASE BUFFER
RB CAL120
*
CAL155 EQU *
LDK A5,INCALR
SC A5,DWTSTE,A6 CHANGE DWT STATE
*
* COMPLETE REQUEST WITH RETURNCODE "ACCEPTED"
* RELEASE BUFFER AND EXIT
*
CAL160 EQU *
ABL RHI120
CAL170 EQU *
LDR A2,A8
CF A14,RLBUF RELEASE BUFFER
RB CAL120
EJECT
*
* MOVE INFORMATION OF INCOMMING CALL IN READ BUFFER
*
CAL180 EQU *
*
* TEST IF READ REQUEST PENDING
*
LDR A5,A5
RF(NZ) CAL190 NO
*
* READ REQUEST PENDING
*
LDR* A1,A8 A1:=ADDRESS OF FACILITY LENGTH IN PAC
*
* GET NUMBER OF CHARACTERS TO MOVE FROM PACKET IN BUFFER
*
LDK A4,0
LC A4,LCIDNT,A8
CF A14,COPTUB
RB CAL160 COMPLETE REQUEST WITH RETURN CODE
'ACCEPTED',RELEASE BUFFER AND EXIT
*
* TEST IF VC RELEASED
*
CAL190 EQU *
LDR A10,A10
RB(NZ) CAL140 NO! REQUEUE BUFFER,BLOCK QUEUE,EXIT
ABL RHI140 YES! RELEASE BUFFER AND EXIT
*
EJECT
*
*
* CALL CONFIRMATION PACKET
*
********************************************************************
*
* INPUT PARAMETERS:
* A6 = DWT ADDRESS
* A8 = BUFFER ADDRESS
* A14 = CF STACK POINTER
*
CALCON EQU *
LDK A2,CONAD DWT STATE :=
SC A2,DWTSTE,A6 CONNECTED, ACCEPT DATA
*
* COMPLETE REQUEST WITH RETURNCODE "ACCEPTED"
* RELEASE BUFFER AND EXIT
*
ABL RHI120
*
EJECT
*
*
* CLEAR PACKET
*
*********************************************************************
*
* INPUT PARAMETERS:
* A5 = REQUEST PENDING INDICATION
* <0: NO REQUEST PENDING
* =0: READ REQUEST PENDING
* >0: OTHER REQUEST PENDING
* A6 = DWT ADDRESS
* A8 = BUFFER ADDRESS
* A11 = ADDRESS OF INPUT-QUEUE ANCHOR
* A14 = CF STACK POINTER
*
CLEPAC EQU *
LDK A3,CLEA.RC+MORE.RC CLEAR + MORE INFO
LDK A1,DWTCLE DISP FOR CLEAR INFO
RF CLERES
XIF
EJECT
*
*
* RESET PACKET
*
********************************************************************
*
* INPUT PARAMETERS:
* A5 = REQUEST PENDING INDICATION
* <0: NO REQUEST PENDING
* =0: READ REQUEST PENDING
* >0: OTHER REQUEST PENDING
* A6 = DWT ADDRESS
* A8 = BUFFER ADDRESS
* A14 = CF STACK POINTER
*
RESPAC EQU *
CM DWTRCI,A6 CLEAR RETURN INFO
LDK A4,0
SC A4,DWTWRO,A6
LDK A3,RSET.RC+MORE.RC RESET + MORE INFO
LDK A1,DWTRES DISP FOR RESET INFO
CLERES EQU *
ADR A1,A6 WHERE TO STORE INFO
LDK A4,CAUSE
ADR A4,A8 A4:=STARTADDR.OF CAUSE-FIELD IN PACKET
*
* GET CAUSE AND DIAGNOSTIC CODE FROM PACKET
*
LCR A7,A4
ECR A7,A7
LC A7,1,A4
EJECT
*
* STORE RESET CAUSE AND DIAGNOSTIC IN DWT
*
ORS A3,DWTRCI,A6
STR A7,A1
*
* TEST IF REQUEST PENDING
*
LDR A5,A5
RF(N) RESP30 NO!
*
* TEST IF CLOSE SYSTEM REQUEST PENDING
*
SUK A5,CLOSYS
IFT STATI=1
RF(Z) RESP40 YES !
*
* TEST IF STATISTIC REQUEST PENDING
*
SUK A5,STATIS-CLOSYS
XIF
RF(Z) RESP40 YES
LDK A1,TOLD.RC RESET/CLEAR TOLD TO USER
ORS A1,DWTRCI,A6
CF A14,CMPREQ COMPLETE REQUEST
RESP30 EQU *
IFF SWITVC=0
ANK A3,CLEA.RC CLEAR PACKET ?
RF(Z) RESP40 NO
CF A14,RELDWT RELEASE DWT FROM CHAIN
XIF
*
* RELEASE BUFFER AND EXIT
*
RESP40 EQU *
ABL RHI140
EJECT
*
*
* DATA PACKET
*
*******************************************************************
*
* INPUT PARAMETERS:
* A5 = REQUEST PENDING INDICATION
* <0: NO REQUEST PENDING
* =0: READ REQUEST PENDING
* >0: OTHER REQUEST PENDING
* A6 = DWT ADDRESS
* A8 = BUFFER ADDRESS
* A10 = VC RELEASE INDICATION
* =0: VC RELEASED,ELSE NOT RELEASED
* A11 = ADDRESS OF QUEUE ANCHOR
* A13 = LC-ADM ADDRESS
* A14 = CF STACK POINTER
*
DATPAC EQU *
LDKL A9,DATA.RC
LDR A3,A6
ADK A3,DWTRCI
*
* TEST IF READ REQUEST PENDING
*
LDR A5,A5
RF(NZ) DAT030
*
EJECT
*
* READ REQUEST PENDING
* COPY PACKET TO USER BUFFER
*
LDK A1,BEGDAT A1:=DISPL.IN PACKET FOR USER DATA
ADR A1,A8 A1:=STARTADDR.OF USER DATA IN PACKET
LDR* A4,A8 A4:=TOTAL LENGTH OF DATA PACKET
SUK A4,BEGDAT A4:=LENGTH OF USER DATA
CF A14,COPTUB
IFF SWITVC=0
*
* TEST IF DWT STATE IS VC RELEASED
*
LDR A10,A10
RF(Z) DAT005 YES!
XIF
LC A2,NRNUBF,A13
ADK A2,1
SC A2,NRNUBF,A13 INCREMENT NR.OF UNUSED BUFFERS
DAT005 EQU *
*
* PREPARE RETURNCODE
*
LDR* A3,A3
*
* TEST IF MORE-DATA-INDICATION SET
*
LC A5,MBIT,A8
ANK A5,MPOS
RF(NZ) DAT010
*
* MORE DATA INDICATION NOT SET
* ADJUST RETURN CODE
*
ORKL A3,LAST.RC
*
EJECT
*
* TEST IF QUALIFIER-BIT SET
*
DAT010 EQU *
LC A1,QBIT,A8
ANK A1,QPOS
RF(Z) DAT020
*
* QUALIFIER-BIT SET; ADJUST RETURN CODE
*
ORKL A3,QBIT.RC
*
* COMPLETE REQUEST WITH RETURNCODE IN A3
* RELEASE BUFFER AND EXIT
*
DAT020 EQU *
ABL RHI130
*
* NO READ REQUEST PENDING
*
DAT030 EQU *
ORRS A9,A3 SET DATA AVAILABLE IN DWT
*
* REQUEUE BUFFER,BLOCK QUEUE AND EXIT
*
ABL RHI150
EJECT
*
*
* INTERRUPT PACKET
*
*******************************************************************
*
* INPUT PARAMETERS:
* A5 = REQUEST PENDING INDICATION
* <0: NO REQUEST PENDING
* =0: READ REQUEST PENDING
* >0: OTHER REQUEST PENDING
* A6 = DWT ADDRESS
* A8 = BUFFER ADDRESS
* A10 = VC RELEASE INDICATION
* =0: VC RELEASED,ELSE NOT RELEASED
* A11 = ADDRESS OF QUEUE ANCHOR
* A13 = LC-ADM ADDRESS
* A14 = CF STACK POINTER
*
INTPAC EQU *
LDK A7,DWTRCI
ADR A7,A6
LDKL A3,INTR.RC
*
* TEST IF READ REQUEST PENDING
*
LDR A5,A5
RF(NZ) INT010
*
EJECT
*
* READ REQUEST PENDING
* COPY PACKET TO USER BUFFER
* RESET INTERRUPT RECEIVED INDICATION IN DWT
*
C1R A3,A3
ANRS A3,A7
LDK A1,BEGDAT A1:=DISPL.IN PACKET FOR INTERRUPT-
USER DATA
ADR A1,A8 A1:=START ADDRESS OF INT.USER DATA
LDK A4,1 LENGTH OF INT.USER DATA
CF A14,COPTUB
C1R A3,A3 A3:=RETURNCODE:INTERRUPT PACKET REC.
ORR* A3,A7
CF A14,CMPREQ COMPLETE REQUEST
LDR A2,A8
CF A14,RLBUF RELEASE BUFFER
*
* TEST IF DWT STATE IS VC RELEASED
*
LDR A10,A10
RF(Z) INT008 YES!
*
* PREPARE INTERRUPT CONFIRMATION PACKET
*
INT002 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF
*
* TEST IF BUFFER IS FREE
*
LDR* A1,A2
RF(Z) INT004 YES
LDKL A1,INT002 A1:=REACTIVATION ADDRESS
ABL BUFWAT WAIT FOR FREE BUFFER
*
EJECT
*
* BUFFER IS FREE
*
INT004 EQU *
LDK A1,INT.CP
SC A1,IDENT,A2 SET INTERRUPT CONF.TYPE IN BUFFER
LDK A1,INT.CL PACKET LENGTH OF INTERRUPT CONF.
ST A1,HDLC,A2 STORE LENGTH IN BUFFER
LDR A1,A13
ADK A1,QUEOUT A1:=ADDRESS OF OUTPUT QUEUE ANCHOR
CF A14,QUEUEF
*
* SET PROCESSING FLAG FOR OUTPUT QUEUE
*
LDK A2,NPRFLG
C1R A2,A2
ANRS A2,A1 STORE PROCESSING FLAG
INT008 EQU *
ABL EXITDC EXIT
*
* NO READ REQUEST PENDING
* SET INTERRUPT RECEIVED INDICATION IN DWT
*
INT010 EQU *
ORRS A3,A7
*
* REQUEUE BUFFER,BLOCK QUEUE AND EXIT
*
ABL RHI150
EJECT
*
*
* INTERRUPT CONFIRMATION PACKET
*
*********************************************************************
*
* INPUT PARAMETERS:
* A5 = REQUEST PENDING INDICATOR
* <0: NO REQUEST PENDING
* =0: READ REQUEST PENDING
* >0: OTHER REQUEST PENDING
* A6 = DWT ADDRESS
* A8 = BUFFER ADDRESS
* A14 = CF STACK POINTER
*
INTCON EQU *
*
* TEST IF ANY REQUEST PENDING
*
LDR A5,A5
RF(N) INC020
*
* TEST IF WRITE INTERRUPT REQUEST PENDING
*
SUK A5,WRIINT
RF(NZ) INC020 NO; IGNORE PACKET
*
* INTERRUPT REQUEST PENDING; COMPLETE REQUEST
* RELEASE BUFFER AND EXIT
*
ABL RHI120
*
* RELEASE BUFFER AND EXIT
*
INC020 EQU *
ABL RHI140
EJECT
*
*
* COMPLETE USER REQUEST
*
********************************************************************
*
* INPUT PARAMETERS:
* A3 = RETURN CODE
* A6 = DWT ADDRESS
* A14 = CF STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,CMPREQ
*
* OUTPUT PARAMETERS:
* NO REGISTERS ARE CHANGED
*
CMPREQ EQU *
IFT CPU852=1
ST A1,CMPSAV SAVE A1
ST A2,CMPSAV+2 SAVE A2
XIF
IFT CPU852=0
MS 2,CMPSAV SAVE A1 AND A2
XIF
*
* TEST IF REQUEST PENDING
*
LD A1,DWTST,A6
RF(N) CMP020 NO!
*
EJECT
*
* TEST IF REQUEST TIMER IS RUNNING
*
LD A1,DWTRTP,A6
RF(Z) CMP010 NO TIMER RUNNING
*
* CANCEL RUNNING TIMER
*
CF A14,CANTIM
CM DWTRTP,A6 CLEAR RUNNING TIMER INDICATION
CMP010 EQU *
*
* PREPARE INTERFACE FOR TENDIO
*
LDR A1,A3 A1:= RETURN CODE
INH . =1
CF A15,TENDIO COMPLETE REQUEST
ENB
CMP020 EQU *
IFT CPU852=1
LD A1,CMPSAV RELOAD A1
LD A2,CMPSAV+2 RELOAD A2
XIF
IFT CPU852=0
ML 2,CMPSAV RELOAD A1 AND A2
XIF
RTN A14 RETURN TO CALLER
*
* SAVE AREA FOR A1,A2
*
CMPSAV EQU *
DATA 0,0
EJECT
*
*
* COPY INFORMATION FROM SYSTEM TO USER AREA
*
********************************************************************
*
* INPUT PARAMETERS:
* A1 = SYSTEM BUFFER ADDRESS
* A4 = LENGTH OF BUFFER
* A6 = DWT ADDRESS
* A14 = CF STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,COPTUB
*
* OUTPUT PARAMETERS:
* NONE
*
COPTUB EQU *
STR A3,A14 SAVE A3
LD A3,DWTECB,A6 GET ECB ADDRESS
LD A2,ECBBA,A3 GET USER BUFFER ADDRESS
ST A4,ECBEL,A3 SET EFFECTIVE LENGTH
LDR A3,A4 BUFFER LENGTH
LD A4,DWTTAB,A6 GET TTAB ADDRESS
INH . =1
CF A15,MOVSU MOVE DATA FROM SYSTEM TO USER
ENB . =1
LDR* A3,A14 RESTORE A3
RTN A14
*
EJECT
*
*
* SAVE REGISTERS A1-A8 IN DC SAVE AREA
*
********************************************************************
*
* CALLING SEQUENCE:
* CF A14,SAVE8
*
* OUTPUT PARAMETERS:
* NO REGISTERS ARE CHANGED
*
SAVE8 EQU *
IFT CPU852=1
ST A1,SAVE
ST A2,SAVE+2
ST A3,SAVE+4
ST A4,SAVE+6
ST A5,SAVE+8
ST A6,SAVE+10
ST A7,SAVE+12
ST A8,SAVE+14
XIF
IFT CPU852=0
MS 8,SAVE
XIF
RTN A14
EJECT
*
*
* RELOAD REGISTERS A1-A8 FROM DC SAVE AREA
*
*******************************************************************
*
* CALLING SEQUENCE:
* CF A14,RELOA8
*
* OUTPUT PARAMETERS:
* REGISTERS A1-A8 ARE RELOADED
*
RELOA8 EQU *
IFT CPU852=1
LD A1,SAVE
LD A2,SAVE+2
LD A3,SAVE+4
LD A4,SAVE+6
LD A5,SAVE+8
LD A6,SAVE+10
LD A7,SAVE+12
LD A8,SAVE+14
XIF
IFT CPU852=0
ML 8,SAVE
XIF
RTN A14 RETURN TO CALLER
EJECT
*
*
* THIS MODULE SELECTS FROM THE DWT THE TRANSPORT HANDLER
* FUNCTION WHICH HAS TO BE EXECUTED.
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS (NOT FOR START & STOP REQUEST)
* A12 = LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,TRANSH
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
* A13 = LC-ADM ADDRESS
* NO OTHER REGISTERS ARE CHANGED
*
TRANSH EQU *
CF A14,SAVE8 SAVE REGISTERS
LC A1,DWTFNC,A6 GET FUNCTION CODE
ANK A1,/FF .
LC A4,DWTLCN,A6 GET LC-ADM ADDRESS
ANK A4,/FF .
SLL A4,1 .
AD A4,LC:TAB,A12 .
LDR* A13,A4 .
ABI TABTH,A1 BRANCH TO THE CONCERNING ROUTINE
*
EJECT
*
* GENERAL RETURN PART
*
READY EQU *
ST A4,SAVE+6 SAVE RETURN CODE
CF A14,RELOA8
RTN A14 BACK TO THE REQUEST HANDLER
*
* BRANCH TABLE FOR TRANSPORT HANDLER FUNCTIONS
*
TABTH EQU *
DATA START OPEN REQUEST
DATA STPINT CLOSE REQUEST
DATA CALLR CONNECT ACTIVE REQUEST
IFF SWITVC=0
DATA CALL30 CONNECT PASSIVE REQUEST
DATA CLEAR DISCONNECT REQUEST
DATA CALLCR ACCEPT CALL
XIF
IFT SWITVC=0
DATA HLT CONNECT PASSIVE REQUEST
DATA CLEAR DISCONNECT REQUEST
DATA HLT ACCEPT CALL
XIF
DATA RRR ACCEPT DATA(READ)
DATA RNRR REFUSE DATA REQUEST
DATA DATA WRITE REQUEST
DATA INTR WRITE INTERRUPT REQUEST
*
STPINT EQU *
CF A14,STOP
RB READY
*
EJECT
*
*
* PROCESSING OF THE OPEN SYSTEM REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A12 = LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL START
* A RETURN IS MADE TO THE LABEL "READY"
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
START EQU *
LDK A4,HRDERR PRESET RETURN CODE
LDK A1,CLOFLG CLOSE STILL BUSY ?
AN A1,CMNFLG,A12 .
ABL(NZ) READY YES
LDK A2,0
*
* INITIATE LC-ADM TABLES
*
LC A4,NRLC,A12 GET # OF LOGICAL CHANNELS
ANK A4,/FF .
SUK A4,1 .
IFF PERMVC=0
LC A7,NRPVC,A12 GET # OF PVC'S
ANK A7,/FF .
SUK A7,1 .
XIF
*
EJECT
STRT00 EQU *
CF A14,GTLCAD GET LC-ADM ADDRESS
SC A4,LCNUM,A13 LOGICAL CHANNEL NUMBER
ST A2,LCSTAT,A13 STATUS AND SUB-STATUS
ST A2,FLAGS,A13 BOOLEAN VARIABLES
SC A2,VCTYP,A13 VC-TYPE
SC A2,NRNUBF,A13 FREE INPUT BUFFERS
ST A2,LCDWT,A13 LC TO DWT RELATION
ST A2,QUEINP,A13 RH-INPUT QUEUE
ST A2,QUEOUT,A13 TH-OUTPUT QUEUE
ST A2,TIMADR,A13 TIMER BLOCK ADDRESS
ST A2,SYSBUF,A13 FREE SYSTEM BUFFER
LDKL A1,/1000
ORR A1,A4 GENERAL FORMAT + LOG. CHANNEL NR.
ST A1,SYSBUF+LCIDNT-1,A13
IFF SWITVC=0
IFF PERMVC=0
CWR A7,A4 IS THIS A PVC ?
RF(NE) STRT02 NO
XIF
IFF PERMVC=0
LDKL A8,PVC SET PVC TYPE
SC A8,VCTYP,A13 .
LDKL A8,DATA.ST SET DATA TRANSFER STATE
SC A8,LCSTAT,A13 .
LD A1,WNDSIZ,A12 SET WINDOW SIZES
SC A1,LCREWN,A13 .
SC A1,LCTRWN,A13 .
LD A1,PACKLN,A12 SET PACKET LENGTH
ST A1,TRBFSZ,A13 .
ST A1,REBFSZ,A13 .
CF A14,TRTHR TRANSLATE THRESHOLD PERCENTAGE
CF A14,CLLCAD CLEAR LC-ADM FIELDS
SUK A7,1 .
STRT02 EQU *
XIF
SUK A4,1 NEXT LC-ADM ?
RB(NN) STRT00 YES
*
EJECT
*
* INITIATE LINE BLOCK
*
LD A1,FILCOD,A12 FILE CODE
LDR A8,A12 LINE ECB-ADDRESS
ADKL A8,LOCECB .
STR A1,A8 SAVE FILE CODE
CM NRPNDT,A12 NUMBER OF PENDING OUTPUT REQUESTS
CM HRDSTA,A12 HARDWARE STATUS
CM RTMADR,A12 RESTART TIMER ADDRESS
CM RSTQUE,A12 CLEAR RESTART QUEUE ANCHOR
*
* INITIATE OUTPUT ECB'S
*
LDK A2,SYNRTR GET NUMBER OF ECB'S
LDR A3,A12 GET FIRST ECB ADDRESS
ADK A3,ECBOU1 .
STRT05 EQU *
ST A1,ECBFC,A3 SAVE FILE CODE
CM ECBBA,A3 CLEAR BUFFER ADDRESS
ADK A3,ECBINL+SYSBFL
SUK A2,1
RB(P) STRT05 NEXT ECB
*
* PREPARE OPEN REQUEST ECB
*
LDR A8,A12 ECB-ADDRESS
ADKL A8,LOCECB .
LDR A4,A12 ADDRESS USER BLOCK
ADK A4,UBNUM .
ST A4,ECBBA,A8 TO ECB
LD A5,PACKLN,A12 RECEIVE BUFFER SIZE
ADK A5,BEGDAT .
ST A5,ECBRL,A8 .
*
EJECT
*
* SET OPEN BUSY INDICATION
*
LDK A3,OPEFLG
ORS A3,CMNFLG,A12
*
* PREPARE USER BLOCK WITH INPUT BUFFERS
*
LDK A3,SYUBNR NUMBER OF USER BUFFERS
STR A3,A4 .
STRT10 EQU *
ADK A4,2 UPDATE STORE POINTER
CF A14,GTBUF GET A BUFFER
STR A2,A4 SAVE BUFFER ADDRESS
SUK A3,1 MORE BUFFERS NEEDED ?
RB(P) STRT10 YES
LDK A7,CONN+/80 ORDER CODE
LD A2,DWTRTV,A6 GET TIMER VALUE
STRT20 EQU *
LKM ISSUE OPEN LINE REQUEST
DATA 1
*
* AFTER COMPLETION,CHECK RETURN CODE
*
LD A1,ECBRC,A8
RF(Z) STRT40 NO ERRORS
LDKL A3,HRDWER HARDWARE ERRORS ?
ANR A3,A1 .
RF(Z) STRT30 NO
ST A1,HRDSTA,A12 SAVE STATUS
LDK A4,HRDERR RETURN CODE
RF RETUR2
*
EJECT
*
* TEST ON TYPE OF ERROR
*
STRT30 EQU *
LDK A4,DISCRM PRESET REURN CODE
CWK A1,REMDIS IS IT REMOTE DISC. ?
RF(E) RETUR2 YES
CWK A1,DEFTIM TIME-OUT ?
ABL(NE) HLT ERROR
LDR A2,A2 TIME OUT ?
RB(Z) STRT20 NO
LDK A4,TMEOUT PRESET RETURN CODE
SUKL A2,330 TIME OUT ?
RF(N) RETUR2 YES,COMPLETE REQUEST
RB STRT20 NO,CONTINUE
*
EJECT
*
* ISSUE A NUMBER OF INPUT REQUESTS
*
STRT40 EQU *
LDK A1,STRTFL SET SYSTEM STARTED FLAG
ORS A1,CMNFLG,A12 .
LDK A4,SYNRRC NUMBER OF INPUT REQUESTS
LDR A8,A12 ADDRESS FIRST INPUT ECB
ADKL A8,ECBIN1 .
STRT50 EQU *
LD A1,FILCOD,A12 FILE CODE TO ECB
ST A1,ECBFC,A8 .
CF A14,GTBUF GET AN INPUT BUFFER
ST A2,ECBBA,A8 .
LD A1,PACKLN,A12 RECEIVE BUFFER SIZE
ADK A1,BEGDAT .
ST A1,ECBRL,A8 .
LDR A1,A8 PARAMETER AFTER COMPLETION
LDK A7,RECEIV ORDER CODE
LKM ISSUE INPUT REQUEST
DATA -1
DATA ENDIN ACTIVATION ADDRESS
ADKL A8,ECBINL GET NEXT ECB-ADDRESS
SUK A4,1 NEXT ONE ?
RB(P) STRT50 YES
*
EJECT
*
* PREPARE RESTART PACKET AND QUEUE IT FOR OUTPUT
*
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDK A1,RSTR.P RESTART PACKET TYPE
SC A1,IDENT,A2 .
LDK A1,0
SC A1,CAUSE,A2 RESTART CAUSE
SC A1,DGNCOD,A2 DIAGNOSTIC CODE
LDK A1,RSTR.L PACKET LENGTH
ST A1,HDLC,A2 .
LDR A1,A12 OUTPUT QUEUE ANCHOR ADDRESS
ADK A1,RSTQUE .
CF A14,QUEUE QUEUE ELEMENT
LDK A1,RSTFLG SET RESTART BUSY FLAG
ORS A1,CMNFLG,A12 .
*
* START TIMER
*
LDR A2,A13 SAVE REGISTER A13
SUR A13,A13 CLEAR IT
LDKL A4,TIMOUT ACTIVATION ADDRESS
LDKL A8,SYRSTM TIME-OUT VALUE
CF A14,STRTIM START TIMER
ST A4,RTMADR,A12 SAVE TIMER ADDRESS
LDR A13,A2 RESTORE REGISTERS
LDK A4,RTNOK RETURN CODE := OK
*
EJECT
*
* READY
*
RETURN EQU *
*
* RESET OPEN SYSTEM BUSY INDICATION
*
LDK A1,OPEFLG
C1R A1,A1
ANS A1,CMNFLG,A12
ABL READY BACK TO CALLER
*
* RELEASE BUFFERS, CONNECTION FAILED
*
RETUR2 EQU *
LDK A3,SYUBNR
LD A1,ECBBA,A8 PARAMETER BLOCK ADDRESS
RETUR4 EQU *
ADK A1,2
LDR* A2,A1 A2 := BUFFER TO BE RELEASED
CF A14,RLBUF
SUK A3,1
RB(P) RETUR4 RELEASE NEXT BUFFER
RB RETURN
EJECT
*
*
* PROCESSING OF THE CLOSE SYSTEM REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT ADDRESS OR ZERO (INTERNAL CALL)
* A12 = LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK
*
* CALLING SEQUENCE:
* CF A14,STOP
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
* A1,A2,A3,A5,A6,A7,A8 ARE CHANGED
*
STOP EQU *
*
* GET LINE IDENTIFICATION
*
LDK A1,CLOFLG
AN A1,CMNFLG,A12 CLOSE BUSY?
RF(NZ) CLOS40 YES
LDK A1,CLOFLG
ORS A1,CMNFLG,A12 SET CLOSE BUSY
*
EJECT
*
* PREPARE CLOSE REQUEST ECB
*
LDR A8,A12 LINE ECB-ADDRESS
ADKL A8,LOCECB .
LDR A1,A12 ADDRESS USER BLOCK
ADK A1,UBNUM .
ST A1,ECBBA,A8 .
ST A6,ECBCW1,A8 SAVE DWT ADDRESS
LDK A4,SYUBNR NUMBER OF USER BUFFERS
STR A4,A1 .
*
* TEST IF THERE IS ANY PENDING REQUESTS TO
* COMPLETE FOR THIS LINE(IF ALLOWED !)
*
LDR A5,A6
CLOS01 EQU *
LD A6,CHAIN,A12 GET DWT CHAIN ANCHOR
RF(Z) CLOS30 NO CONNECTION ACTIVE
CLOS05 EQU *
*
* TEST IF DISCONNECTION ALLOWED
*
ADK A5,0 INTERNAL CALL ?
RF(Z) CLOS15 YES
LDK A3,SEQE.RC SEQUENCE ERROR
LC A1,DWTOPT,A5
ANK A1,CLOOPT CLOSE ALLOWED ?
RF(Z) CLOS15 YES
LDR A6,A5 RELOAD A6
LDK A1,CLOFLG
XRS A1,CMNFLG,A12 RESET CLOSE BUSY IND.
RF CLOS55 COMPLETE REQUEST
*
EJECT
*
CLOS15 EQU *
LDK A3,LOGE.RC LOGICAL ERROR
LDK A2,DISCON
LDK A7,0
LC A7,DWTFNC,A6 GET FUNCTION CODE
LDR A1,A7
IFT STATI=1
SUK A7,STATIS STATISTIC REQUEST ?
RF(Z) CLOS16 YES
ADK A7,STATIS
XIF
SUK A1,CLOSYS CLOSE SYSTEM ?
RF(NZ) CLOS18 NO
CLOS16 EQU *
CW A2,DWTSTE,A6 DWT DISCONNECTED ?
RF(E) CLOS25 YES
CLOS18 EQU *
SC A2,DWTSTE,A6
LD A2,DWTST,A6 REQUEST PENDING ?
RF(N) CLOS19 NO
SUK A7,CONPAS CONNECT PASSIVE ?
RF(Z) CLOS20 YES
CLOS19 EQU *
LC A4,DWTLCN,A6
CF A14,GTLCAD GET LC-ADM ADDRESS
CM LCDWT,A13 CLEAR RELATION LC-DWT
CLOS20 EQU *
CF A14,RELDWT RELEASE DWT FROM CHAIN
ADK A1,0 CLOSE SYSTEM ?
RB(Z) CLOS01 YES
CF A14,CMPREQ COMPLETE REQUEST
RB CLOS01 TAKE NEXT
*
EJECT
*
* TEST IF MORE DWT'S IN CHAIN
*
CLOS25 EQU *
LD A6,DWTCHN,A6
RB(NZ) CLOS05 YES
CLOS30 EQU *
*
* ISSUE STOP REQUEST
*
LDK A7,DISCN ORDER CODE,CLOSE LINE
LDR A1,A8 PARAMETER FOR ACTIVATION PART
LKM
DATA -1
DATA CLOEND ACTIVATION LABEL
CLOS40 EQU *
LDK A4,RTNOK SET RETURN CODE
RTN A14 BACK TO CALLER
EJECT
*
* ACTIVATION PART AFTER COMPLETED CLOSE REQUEST
*
CLOEND EQU *
LDKL A14,DCSTAK SET CALL FUNCTION STACK POINTER
LDR A8,A1 SAVE ECB-ADDRESS
CF A14,GTLBA GET LINE BLOCK ADDRESS
LDK A1,STRTFL+CLOFLG RESET FLAGS
ORK A1,RSTFLG
C1R A1,A1 .
ANS A1,CMNFLG,A12 .
LD A4,ECBBA,A8 ADDRESS USER BLOCK
LDR* A3,A4 NUMBER OF USER BUFFERS
CLOS50 EQU *
ADK A4,2
LDR* A2,A4 BUFFER ADDRESS
CF A14,RLBUF RELEASE INPUT BUFFER
SUK A3,1 NEXT ONE ?
RB(P) CLOS50 YES
LD A6,ECBCW1,A8 GET DWT ADDRESS
*
* TEST IF DWT ADDRESS IS VALID
*
RF(Z) CLOS60
LDK A3,0
CLOS55 EQU *
CF A14,CMPREQ COMPLETE REQUEST
CLOS60 EQU *
ABL EXITDC CONTROL TO SCHEDULER
EJECT
*
* PROCESSING OF A CONNECT ACTIVE REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A12 = LINE CONTROL BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CALLR
* A RETURN IS MADE TO THE LABEL READY
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
* A13 = LC-ADM ADDRESS
*
CALLR EQU *
IFF SWITVC=0
LC A1,DWTOPT,A6 PVC REQUESTED ?
ANK A1,PVC
RF(NZ) CALLPV YES
*
* TEST IF REMOTE DTE IS SUPPORTED
*
LD A1,DWTRAD,A6
LDKL A3,SVCTYP SET TYPE
LDK A4,NOLCAV
INH . =1
CF A15,FNDDNT FIND DTE
ENB . =1
LDR A1,A1 FOUND ?
RF(N) CALL40 NO
*
EJECT
*
* SEARCH FOR A READY LOGICAL CHANNEL
*
LC A4,NRLC,A12 GET # OF LOGICAL CHANNELS
ANK A4,/FF .
SUK A4,1 .
CALL00 EQU *
CF A14,GTLCAD GET LC-ADM ADDRESS
LC A1,LCSTAT,A13 LC-STATUS
ANK A1,/FF
RF(Z) CALL10 READY
SUK A4,1 TRY NEXT ENTRY
RB(NN) CALL00 YES
EJECT
IFT PERMVC=0
CALLPV EQU *
XIF
IFF SWITVC=0
LDK A4,NOLCAV RETURN CODE := NO LOG. CHAN. AVAILABLE
RF CALL40 BACK TO CALLER
CALL10 EQU *
SC A4,DWTLCN,A6 SAVE LC-NUM IN DWT
*
* COMPLETE LC-ADM
*
LDK A1,LCAL.ST LC-STAT := LOCAL-CALL
SC A1,LCSTAT,A13 .
LDK A1,0 ALL INPUT BUFFERS ARE USED
SC A1,NRNUBF,A13 .
ST A6,LCDWT,A13 SAVE DWT-ADDRESS
XIF
IFT SWITVC=0
RF CALLPV
*
EJECT
XIF
*
* QUEUE CONNECT REQUEST FOR OUTPUT
*
CALL20 EQU *
LDR A2,A6 ELEMENT ADDRESS
CF A14,QUEO QUEUE ELEMENT
*
* READY
*
CALL30 EQU *
LDK A4,RTNOK RETURN CODE := OK
CALL40 EQU *
ABL READY
IFF PERMVC=0
EJECT
*
* A CONNECT REQUEST FOR A PERMANENT VIRTUAL CIRCUIT
*
CALLPV EQU *
*
* SEARCH FOR A NOT USED LOGICAL CHANNEL
*
LC A4,NRLC,A12 GET # OF LOG. CHANNELS
ANK A4,/FF .
SUK A4,1 .
LDK A1,NOREMO REMOTE ADDRESS NOT SUPPORTED
CALL60 EQU *
CF A14,GTLCAD GET LC-ADM ADDRESS
LDK A3,PVC IS IT A PVC ?
CC A3,VCTYP,A13 .
RF(NE) CALL70 NO
LD A3,DWTRAD,A6 THE REQUESTED DESTINATION ?
CW A3,REMADR,A13
RF(NE) CALL70 NO
LDK A1,NOLCAV NO LOGICAL CHANNEL AVAILABLE
LD A3,LCDWT,A13 LC ALREADY IN USE ?
RF(Z) CALL80 NO
CALL70 EQU *
SUK A4,1 TRY NEXT ENTRY
RB(NN) CALL60 .
LDR A4,A1 GET RETURN CODE
RB CALL40 BACK TO CALLER
*
CALL80 EQU *
SC A4,DWTLCN,A6 SAVE LOG. CHAN. NR IN DWT
ST A6,LCDWT,A13 SAVE DWT ADDRESS
RB CALL30 BACK TO CALLER
XIF
IFF SWITVC=0
EJECT
*
*
* PROCESSING OF AN ACCEPT CALL REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CALLCR
* A RETURN IS MADE TO THE LABEL READY
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
CALLCR EQU *
LDK A4,INVSTA PRESET RETURN CODE := ILL. STATUS
LDK A1,RCAL.ST LC-STATUS = REMOTE CALL ?
CC A1,LCSTAT,A13 .
RB(NE) CALL40 NO, ERROR
*
* UPDATE LC-ADM
*
LDK A1,DATA.ST LC-STATUS := DATA TRANSFER
ECR A1,A1 .
ST A1,LCSTAT,A13 LC-SUBSTAT := FLOW CONTROL READY
CF A14,CLLCAD CLEAR FIELDS IN LC-ADM
*
EJECT
*
* IF ACCEPT REQUEST FROM USER THEN EMPTY INPUT QUEUE
*
LDK A1,INCALR
CC A1,DWTSTE,A6
RB(NE) CALL20 NO USER REQUEST
CF A14,CLINPQ
*
* RESET DATA AVAILABLE INDICATION
*
CM DWTRCI,A6
*
* QUEUE PACKET AND RETURN
*
RB CALL20
*
XIF
EJECT
*
*
* PROCESSING OF A DATA TRANSMISSION REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL DATA
* A RETURN IS MADE TO THE LABEL READY
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
DATA EQU *
LDK A4,INVSTA PRESET RETURN CODE
LDK A1,DATA.ST
CC A1,LCSTAT,A13 LC-STATUS = DATA TRANSF. ?
RB(NE) CALL40 NO, ERROR
*
* QUEUE REQUEST AND RETURN
*
DATA10 EQU *
RB CALL20
EJECT
*
*
* PROCESSING OF A DISCONNECT REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CLEAR
* A RETURN IS MADE TO THE LABEL READY
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
CLEAR EQU *
IFF SWITVC=0
LC A1,VCTYP,A13 PVC CONCERNING ?
ANK A1,PVC
RF(Z) CLEA00 NO!
XIF
CF A14,CLINPQ CLEAR INPUT QUEUE
CM LCDWT,A13 RELEASE RELATION WITH DWT
RB CALL30
*
IFF SWITVC=0
CLEA00 EQU *
LDK A1,CLEA.ST LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RF(NE) CLEA10 NO
*
EJECT
*
* REFUSE REQUEST
*
LDK A4,CLEBUS SET RETURN CODE
RB CALL40
*
* START TIMER
*
CLEA10 EQU *
LDKL A8,SYCLTM TIME-OUT VALUE
CF A14,STTIM START TIMER
*
* UPDATE LC-ADM
*
LDK A1,CLEA.ST NEW STATUS := CLEAR
SC A1,LCSTAT,A13 .
*
* EMPTY INPUT QUEUE
*
CF A14,CLINPQ
*
* QUEUE ELEMENT AND RETURN
*
RB CALL20
*
XIF
EJECT
*
*
* PROCESSING OF THE ACCEPT DATA REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RRR
* A RETURN IS MADE TO THE LABEL READY
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
RRR EQU *
LDK A4,INVSTA PRESET RETURN CODE
LDK A1,DATA.ST
CC A1,LCSTAT,A13 LC-STATUS = DATA TRANSFER ?
RB(NE) CALL40 NO, ERROR
*
* QUEUE ELEMENT AS FIRST FOR TRANSMISSION
*
RF INTR00
EJECT
*
*
* PROCESSING OF THE REFUSE DATA REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RNRR
* A RETURN IS MADE TO THE LABEL READY
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
RNRR EQU *
LDK A4,INVSTA PRESET RETURN CODE
LDK A1,DATA.ST
CC A1,LCSTAT,A13 LC-STATUS = DATA TRANSFER ?
RB(NE) CALL40 NO, ERROR
*
* BLOCK INPUT QUEUE
*
LDK A1,NPRFLG
ORS A1,QUEINP,A13
*
* QUEUE ELEMENT FOR TRANSMISSION
*
RF INTR00
EJECT
*
*
* PROCESSING OF THE WRITE INTERRUPT REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL INTR
*
* OUTPUT PARAMETERS:
* A4 = RETURN CODE
*
INTR EQU *
LDK A4,INVSTA PRESET RETURN CODE
LDK A1,DATA.ST
CC A1,LCSTAT,A13 LC-STATUS = DATA TRANSFER ?
RB(NE) CALL40 NO, ERROR
LDK A4,SEQE.RC SEQUENCE ERROR
LDK A1,INTPNG INTERRUPT PENDING ?
AN A1,FLAGS,A13 .
RB(NZ) CALL40 YES !
LDK A1,INTPNG SET INTERRUPT PENDING FLAG
ORS A1,FLAGS,A13
*
EJECT
*
* QUEUE ELEMENT FOR TRANSMISSION
*
INTR00 EQU *
LDR A2,A6 ELEMENT ADDRESS
LDR A1,A13 QUEUE ANCHOR ADDRESS
ADK A1,QUEOUT .
CF A14,QUEUEF QUEUE AS FIRST ELEMENT
LDK A2,NPRFLG RESET NO PROCESSING FLAG
C1R A2,A2 .
ANRS A2,A1 .
ABL CALL30 BACK TO CALLER
EJECT
*
*
* THIS MODULE GETS CONTROL FROM THE SCHEDULER
* IN ORDER TO TRANSMIT A PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A1 = QUEUE ANCHOR ADDRESS
* A12 = LINE BLOCK ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL OUTPCK
*
OUTPCK EQU *
*
* GET AN OUTPUT ECB
*
LDR A3,A12 FIRST OUTPUT ECB
ADK A3,ECBOU1 .
OUTP00 EQU *
LD A2,ECBBA,A3 IS ECB BUSY ?
RF(Z) OUTP10 NO
ADK A3,ECBINL+SYSBFL NEXT OUTPUT ECB
RB OUTP00 .
*
OUTP10 EQU *
LDR A8,A3 ECB-ADDRESS
ADK A3,ECBINL
ST A3,ECBBA,A8 SYSTEM OUTPUT BUFFER
CM HDLC,A3 CLEAR HDLC-HEADER
LDK A4,/10
SC A4,GNFRM,A3 GENERAL FORMAT IDENTIFIER
*
EJECT
*
* DEQUEUE AND CHECK ELEMENT
*
CF A14,DEQUE GET ELEMENT
ST A1,SAVE SAVE QUEUE ANCHOR ADDRESS
LDKL A1,DWTTYP
CW A1,DWTCHP,A2 CHECK TYPE
ABL(NE) OUT400 NO DWT
LDR A6,A2 SAVE DWT-ADDRESS
LD A9,DWTECB,A6 GET ECB-ADDRESS
ABL(Z) EXITDC ELEMENT ALREADY COMPLETED
LC A4,DWTLCN,A6
SC A4,LCIDNT,A3 LOGICAL CHANNEL NUMBER
*
* SELECTION ON REQUEST TYPE
*
LDR A2,A3 SAVE BUFFER ADDRESS
LC A3,DWTFNC,A6 GET FUNCTION CODE
ANK A3,/FF .
SUK A3,CONACT
ABI OUTTAB,A3
*
EJECT
*
* REQUEST OUTPUT TABLE
*
OUTTAB EQU *
IFF SWITVC=0
DATA OUT100 CONNECT ACTIVE REQUEST
DATA HLT CONNECT PASSIVE REQUEST
DATA OUT200 DISCONNECT REQUEST
DATA OUT210 ACCEPT CALL
XIF
IFT SWITVC=0
DATA HLT CONNECT ACTIVE REQUEST
DATA HLT CONNECT PASSIVE REQUEST
DATA HLT DISCONNECT REQUEST
DATA HLT ACCEPT CALL
XIF
DATA OUT300 ACCEPT DATA
DATA OUT310 REFUSE DATA REQUEST
DATA OUT000 WRITE REQUEST
DATA OUT220 WRITE INTERRUPT REQUEST
DATA OUT300 READ(ACCEPT DATA)
*
HLT HLT ILLEGAL
*
EJECT
*
* A DATA PACKET HAS TO BE TRANSMITTED
*
OUT000 EQU *
LDK A1,REMBUS
AN A1,FLAGS,A13 IS REMOTE STATION BUSY ?
RF(NZ) OUT050 YES
*
* IS WINDOW FULL ?
*
LDK A4,0
LDK A5,0
LC A4,PS,A13 PS TO BE TRANSMITTED
LC A5,SLWE,A13 SEND LOWER WINDOW EDGE
SUR A4,A5 PS - LWE
ANK A4,/07 MODULO 8
CC A4,LCTRWN,A13 MUST BE WITHIN WINDOW SIZE
RF(NL) OUT050 WINDOW IS FULL
*
* PREPARE DATA PACKET HEADER
*
LC A1,DWTWRO,A6 WRITE OPTION
LDR A3,A1 SAVE IT
ANK A1,QPOS
ECR A1,A1
ORS A1,GNFRM,A2 INCLUDE Q-BIT
LC A1,PS,A13 PS
SLL A1,1 PUT IT ON THE RIGHT POSITION
ANK A3,MPOS
ORR A1,A3 INCLUDE M-BIT
LC A3,PR,A13 PR
SC A3,RLWE,A13 SAVE IT AS LAST TRANSMITTED PR
SLL A3,5 PUT IT ON THE RIGHT POSITION
ORR A1,A3 ALL TOGETHER
*
EJECT
*
* INCREMENT SEND SEQUENCE NUMBER
*
LC A5,PS,A13 GET OLD PS
ADK A5,1 INCREMENT
ANK A5,/07 MODULO 8
SC A5,PS,A13 SAVE NEW PS
SC A1,IDENT,A2 SAVE PS & PR IN OUTPUT BUFFER
*
* COPY USER DATA TO OUTPUT BUFFER
*
LD A1,ECBBA,A9 USER BUFFER ADDRESS
ADK A2,BEGDAT WHERE TO MOVE
LD A3,ECBRL,A9
LDR A4,A3
ADK A4,BEGDAT
ST A4,ECBRL,A8 OUTPUT BUFFER
LD A5,DWTTAB,A6
CF A15,MOVUS MOVE FROM USER TO SYSTEM
*
* ISSUE OUTPUT REQUEST
*
OUT040 EQU *
LDR A1,A8 PARAMETER ADDRESS
LDK A7,TRANSM ORDER CODE
*
LKM
DATA -1
DATA ENDOUT ACTIVATION LABEL AFTER COMPLETION
IM NRPNDT,A12 INCREMENT NUMBER OF PENDING OUTPUT
RF OUT060 CONTROL BACK TO SCHEDULER
*
EJECT
*
* NO TRANSMISSION ALLOWED AT THIS MOMENT
*
OUT050 EQU *
CM ECBBA,A8
LD A1,SAVE QUEUE ANCHOR ADDRESS
LDR A2,A6 ELEMENT ADDRESS
CF A14,QUEUEF ELEMENT BACK TO QUEUE
LDK A2,NPRFLG SET "NO PROCESSING" FLAG
ORRS A2,A1 .
OUT060 EQU *
ABL EXITDC CONTROL BACK TO SCHEDULER
IFF SWITVC=0
*
EJECT
*
* PREPARE AND TRANSMIT CALL PACKET
*
OUT100 EQU *
LDK A1,CAL.P
SC A1,IDENT,A2 PACKET TYPE
*
* GET REMOTE DTE-ADDRESS
*
ADK A2,BEGDAT+1
LDR A4,A2
LD A1,DWTRAD,A6
LDKL A3,SVCTYP SET TYPE
INH . =1
CF A15,GETDNT GET REAL DTE-ADDRESS
ENB . =1
LDR A3,A1 SAVE LENGTH
IFT CALDTE=1
*
* GET LOCAL DTE-ADDRESS
*
LDR A7,A2 SAVE ADDRESS
LD A1,DWTLAD,A6
INH . =1
CF A15,GETDNA GET DTE NETWORK ADDRESS
ENB . =1
SLL A1,4 PUT IT IN RIGTH POSITION
ORR A3,A1 CALLING AND CALLED DTE-ADDRESS
*
EJECT
*
* TEST IF LOCAL DTE-ADDRESS HAS TO BE MOVED
*
LDR A5,A3 REMOTE DTE-ADDRESS LENGTH...
ANK A5,/01 GIVES SEMI-OCTET BOUNDARY ?
RF(Z) OUT145 NO
*
* MOVE LOCAL DTE-ADDRESS
*
SRL A1,4 A1:=LENGTH IN SEMI-OCTETS
LDR A5,A7 A7:=WHERE TO GET IT
SUK A5,/01 A5:=WHERE TO PUT IT
OUT130 EQU *
LCR A2,A5 GET STORED SECOND SEMI-OCTET
SLL A2,4
LCR A2,A7
SRL A2,4 PUT TWO SEMI-OCTETS TOGETHER
SCR A2,A5 AND STORE THEM
ADK A5,1 INCREMENT 'TO'-POINTER
SUK A1,1 DECRESE LENGTH
RF(Z) OUT140 READY
LCR A2,A7 GET NEXT TWO SEMI-OCTETS
SLL A2,4
SCR A2,A5 STORE SECOND SEMI-OCTET
ADK A7,1 INCREMENT 'FROM'-POINTER
SUK A1,1 READY ?
RB(P) OUT130 NO
ADK A5,1
OUT140 EQU *
LDR A2,A5 NEXT FREE ADDRESS
OUT145 EQU *
XIF
*
EJECT
*
IFF SWITVC=0
IFT LOOP=1
*
* EXCHANGE CALLING AND CALLED LENGTH
*
ECR A3,A3
SRL A3,8
XIF
IFF SWITVC=0
SUK A4,1
SCR A3,A4 STORE CALLING AND CALLED LENGTH
*
* USER FACILITIES & USER DATA
*
LD A3,ECBRL,A9
RF(Z) OUT180 NO DATA SPECIFIED
LD A5,DWTTAB,A6
*
* TEST IF FACILITIES ONLY
*
LD A1,ECBBA,A9
LCR A7,A1
ANK A7,/FF FACILITY LENGTH
RF(Z) OUT150 NO FACILITIES AT ALL
ADK A7,1
SUR A7,A3
RF(Z) OUT148 FACILITIES ONLY
LDK A7,0 A7:=INDICATION NOT ONLY FACILITIES
RF OUT150
*
OUT148 EQU *
LDK A7,/C0 A7:=INDICATION FACILITIES ONLY
OUT150 EQU *
INH . =1
CF A15,MOVUS MOVE FROM USER TO SYSTEM
ENB . =1
*
EJECT
*
* TEST IF ONLY FACILITIES
*
LDR A7,A7
RF(Z) OUT190 NO
RF OUT188
*
* NO USER DATA SPECIFIED
*
OUT180 EQU *
LDK A1,0
SCR A1,A2 FACILITY LENGTH = ZERO
ADK A2,1 UPDATE POINTER
OUT188 EQU *
LDK A1,/C0
SCR A1,A2 SET PROTOCOL IDENTIFIER
ADK A2,1 UPDATE POINTER
*
* CALCULATE LENGTH OF CALL PACKET
*
OUT190 EQU *
SU A2,ECBBA,A8
ST A2,ECBRL,A8 LENGTH TO ECB
*
* COMPLETE LC-ADM
*
LD A2,ECBBA,A8 ADDRESS CALL PACKET
CF A14,GTWNDS GET WINDOW SIZE & PACKET LENGTH
CF A14,TRTHR TRANSLATE THRESHOLD PERCENTAGE
OUT195 EQU *
ABL OUT040 ISSUE OUTPUT REQUEST
EJECT
*
* TRANSMISSION OF CLEAR PACKET
*
OUT200 EQU *
IFT MMUPAG=1
LD A1,ECBBA,A9 USER BUFFER
ADK A2,DGNCOD DIAGNOSTIC CODE DISPLACEMENT
LDK A3,1 LENGTH
LD A5,DWTTAB,A6
INH . =1
CF A15,MOVUS MOVE FROM USER TO SYSTEM
ENB . =1
SUK A2,DGNCOD+1 RESTORE SYSTEM BUFFER ADDRESS
XIF
IFF SWITVC=0
IFT MMUPAG=0
LC* A1,ECBBA,A9 DIAGNOSTIC CODE
SC A1,DGNCOD,A2
LDK A3,0
XIF
IFF SWITVC=0
SC A3,CAUSE,A2 RESET CAUSE FIELD
LDK A1,CLE.P CLEAR PACKET TYPE
LDK A4,CLE.L PACKET LENGTH
RF OUT260
*
* TRANSMISSION OF CALL CONFIRMATION PACKET
*
OUT210 EQU *
LDK A1,CAL.CP CALL CONFIRMATION PACKET TYPE
LDK A4,CAL.CL PACKET LENGTH
RF OUT260
*
XIF
*
EJECT
*
* TRANSMISSION OF INTERRUPT PACKET
*
OUT220 EQU *
IFT MMUPAG=1
LD A1,ECBBA,A9 USER BUFFER
ADK A2,CAUSE INTERRUPT DATA DISPLACEMENT
LDK A3,1 LENGTH
LD A5,DWTTAB,A6
INH . =1
CF A15,MOVUS MOVE FROM USER TO SYSTEM
ENB . =1
SUK A2,CAUSE+1 RESTORE SYSTEM BUFFER ADDRESS
XIF
IFT MMUPAG=0
LC* A1,ECBBA,A9 INTERRUPT DATA
SC A1,CAUSE,A2
XIF
LDK A1,INT.P INTERRUPT PACKET TYPE
LDK A4,INT.L PACKET LENGTH
OUT260 EQU *
SC A1,IDENT,A2
OUT270 EQU *
ST A4,ECBRL,A8 PACKET LENGTH
ABL OUT040 ISSUE OUTPUT REQUEST
EJECT
*
* TRANSMISSION OF RR- OR RNR PACKET
*
OUT300 EQU *
LDK A1,RR.P RR-PACKET TYPE
RF OUT320
*
OUT310 EQU *
LDK A1,RNR.P RNR-PACKET TYPE
OUT320 EQU *
LC A3,PR,A13 GET PR
SC A3,RLWE,A13 SAVE IT AS LAST TRANMITTED
SLL A3,5
ORR A3,A1 COMBINE WITH PACKET TYPE
SC A3,IDENT,A2 TO OUTPUT BUFFER
LDK A4,RR.L PACKET LENGTH
RB OUT270 ISSUE OUTPUT REQUEST
*
* TRANSMISSION OF A PACKET
*
OUT400 EQU *
ST A2,ECBBA,A8 BUFFER ADDRESS TO ECB
LDK A1,RSET.P
CC A1,IDENT,A2 IS IT A RESET PACKET ?
RF(NE) OUT410 NO
LDK A1,NPRFLG BLOCK OUTPUT QUEUE
ORS A1,QUEOUT,A13 .
OUT410 EQU *
LD A4,HDLC,A2 BUFFER LENGTH
RB OUT270 ISSUE OUTPUT REQUEST
EJECT
*
*
* THIS ROUTINE HANDLES A COMPLETED OUTPUT REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A1 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ACTIVATION ON LABEL ENDOUT
*
ENDOUT EQU *
LDK A3,1 SET PROCESS INDICATION
ST A3,DCLEVL .
LDKL A14,DCSTAK SET STACK POINTER
LDR A8,A1 SAVE ECB-ADDRESS
CF A14,GTLBA GET LINE BLOCK ADDRESS
LD A2,ECBBA,A8 BUFFER ADDRESS
CM ECBBA,A8 FREE ECB
CM HDLC,A2 FREE DWT-BUFFER
LD A5,ECBRC,A8 GET RETURN CODE
RF(Z) ENDO30 CORRECT COMPLETED
CWK A5,18 TRANSMITTER RESET ?
RF(E) ENDO30 YES
*
EJECT
*
* THE OUTPUT REQUEST IS NOT CORRECT COMPLETED. WHEN THIS IS THE FIRST
* TIME A DISCONNECT REQUEST FOR THE DC-CONNECTION WILL BE GIVEN AND
* ALL NOT READY SVC'S WILL BE CLEARED LOCAL AND ALL RELATIONS
* DWT <--> PVC WILL BE RELEASED.
*
LD A3,CMNFLG,A12 IS SUBSYS STARTED ?
ANK A3,STRTFL .
RF(Z) ENDO20 ALREADY DOWN
LDK A1,STRTFL RESET START FLAG
C1R A1,A1 .
ANS A1,CMNFLG,A12 .
ST A5,HRDSTA,A12 SAVE RETURN CODE
LDK A6,0 NO DWT AVAILABLE
CF A14,STOP ISSUE DISCONNECT LINE REQUEST
LDK A1,LOCCLE DIAGN. CODE = LOST CONNECTION
CF A14,CLAVCS CLEAR ALL VC'S LOCAL
ENDO20 EQU *
LDKL A1,-1
ADS A1,NRPNDT,A12 DECREASE # OF PENDING TRANSM. REQUE.
ABL EXITDC CONTROL BACK TO SCHEDULER
*
* CORRECT COMPLETED OUTPUT REQUEST
*
ENDO30 EQU *
LC A4,LCIDNT,A2 LOGICAL CHANNEL NUMBER
ANK A4,/FF .
CF A14,GTLCAD GET LC-ADM ADDRESS
LD A6,LCDWT,A13 GET DWT-ADDRESS
RF(Z) ENDO56 NO DWT
LD A1,DWTST,A6 DWT-STATUS
RF(N) ENDO56
*
EJECT
*
* TEST IF DATA PACKET
*
LC A3,IDENT,A2
LDR A1,A3
ANK A3,DATA.P
RF(Z) ENDO58 YES
*
* TEST IF RNR PACKET
*
LC A4,DWTFNC,A6
ANK A1,/1F
SUK A1,RNR.P
IFF SWITVC=0
RF(NZ) ENDO46 NO
XIF
IFT SWITVC=0
RF(NZ) ENDO56 NO
XIF
SUK A4,REFDAT REFUSE DATA REQUEST?
RF(NZ) ENDO56 NO
RF ENDO58 YES
IFF SWITVC=0
*
* TEST IF CALL CONFIRMATION PACKET
*
ENDO46 EQU *
SUK A1,CAL.CP-RNR.P
RF(NZ) ENDO48 NO
SUK A4,ACCCAL ACCEPT CALL REQUEST ?
RF(Z) ENDO58 YES
RF ENDO56 NO
*
EJECT
*
* TEST IF CLEAR PACKET
*
ENDO48 EQU *
SUK A1,CLE.P-CAL.CP
RF(NZ) ENDO56 NO
SUK A4,DISCAL DISCONNECT REQUEST ?
RF(NZ) ENDO56 NO
ENDO50 EQU *
CF A14,RELDWT RELEASE DWT FROM CHAIN
CM LCDWT,A13 RELEASE RELATION WITH THE DWT
ENDO52 EQU *
LDK A3,ACPT.RC RETURN CODE
XIF
ENDO54 EQU *
CF A14,CMPREQ COMPLETE REQUEST
ENDO56 EQU *
RB ENDO20
ENDO58 EQU *
LD A3,DWTRCI,A6
LDR A1,A3
ANK A1,MORE.RC MORE INFO ?
RB(Z) ENDO54 NO
LDK A1,TOLD.RC INDICATE..
XRS A1,DWTRCI,A6 ..TOLD TO USER
RB ENDO54 COMPLETE REQUEST
EJECT
*
* THIS MODULE IS ACTIVATED WHEN A CONFIRMATION TIMER OF
* THE DC-TASK EXPIRES.
*
*********************************************
*
* INPUT PARAMETERS:
* A1 = PARAMETER BLOCK ADDRESS
*
* CALLING SEQUENCE:
* ACTIVATION ON LABEL TIMOUT
*
TIMOUT EQU *
LDK A3,5 SET PROCESS INDICATOR
ST A3,DCLEVL .
LDKL A14,DCSTAK SET STACK POINTER
LDR A4,A1 ADDRESS PARAMETER BLOCK
INH . =1
CF A15,FREBLK GET PARAMETERS
ENB
LDR A12,A3 LINE BLOCK ADDRESS
LDR A13,A1 LC-ADM ADDRESS
ANK A2,1
ABL(NZ) TIMEXP TIME-OUT OF REQUEST HANDLER
LDR A13,A13
RF(NZ) TIM10 NO RESTART CONF. TIMER
*
* A RESTART CONFIRMATION TIMER IS EXPIRED, SO CLEAR ALL NOT
* READY VC'S LOCAL.
*
CM RTMADR,A12 CLEAR TIMER ADDRESS
LDK A1,RSTFLG IS A RESTART PROCEDURE ACTIVE ?
AN A1,CMNFLG,A12 .
RF(Z) TIM40 NO
LDK A1,LOCCLE DIAGN. CODE
CF A14,CLAVCS CLEAR ALL VC'S LOCAL
RF TIM40
EJECT
*
* THE TIMER OF A RESET OR CLEAR PACKET IS EXPIRED
*
TIM10 EQU *
CM TIMADR,A13 CLEAR TIMER ADDRESS
LDK A1,CONTIM IS CONFIRMATION TIMER STARTED ?
AN A1,FLAGS,A13 .
RF(Z) TIM40 NO
XRS A1,FLAGS,A13 RESET TIMER FLAG
IFF SWITVC=0
LDK A1,RSET.ST IS LC-STATUS = RESET ?
CC A1,LCSBST,A13 .
RF(NE) TIM30 NO, SO IT MUST BE A CLEAR
XIF
*
* A RESET TIMER IS EXPIRED, SO CLEAR CONCERNING VC
*
SUR A1,A1 RESET SUB-STATUS
SC A1,LCSBST,A13 .
LDK A1,NPRFLG RESET NO PROCESSING FLAG
C1R A1,A1 .
ANS A1,QUEOUT,A13 .
IFF SWITVC=0
IFF PERMVC=0
LDK A1,PVC IS IT A PVC ?
CC A1,VCTYP,A13 .
RF(E) TIM20 YES
XIF
IFF SWITVC=0
LDK A1,LOCPER DIAGN. CODE
ABL CLVC CLEAR VC AND RETURN TO SCHEDULER
XIF
*
EJECT
*
* COMPLETE EVENTS IN OUTPUT QUEUE
*
TIM20 EQU *
LDKL A3,RSET.RC RC = RESET
CF A14,CMEVNT
IFF SWITVC=0
RF TIM40
*
* A CLEAR TIMER IS EXPIRED
*
TIM30 EQU *
CM LCSTAT,A13 NEW LC-STATUS := READY
XIF
TIM40 EQU *
ABL EXITDC CONTROL BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF A COMPLETED INPUT REQUEST
*
********************************************
*
* INPUT PARAMETERS:
* A1 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ACTIVATION ON LABEL
*
ENDIN EQU *
LDK A3,3 SET PROCESS INDICATOR
ST A3,DCLEVL .
LDKL A14,DCSTAK SET RETURN STACK POINTER
LDR A8,A1 SAVE ECB-ADDRESS
CF A14,GTLBA GET LINE BLOCK ADDRESS
LD A5,ECBRC,A8 GET RETURN CODE
RF(Z) END20 CORRECT COMPLETED
CWK A5,17 RECEIVER RESET ?
RF(E) END20 YES
EJECT
*
* THE INPUT REQUEST IS NOT CORRECT COMPLETED. WHEN THIS IS THE FIRST
* TIME A DISCONNECT REQUEST FOR THE DC-CONNECTION WILL BE GIVEN AND
* ALL NOT READY SVC'S WILL BE CLEARED LOCAL AND ALL RELATIONS
* DWT <--> PVC WILL BE RELEASED.
*
LD A2,ECBBA,A8 BUFFER ADDRESS
CM ECBBA,A8 FREE ECB
CF A14,RLBUF INPUT BUFFER BACK TO POOL
LD A3,CMNFLG,A12 IS SUBSYS STARTED ?
ANK A3,STRTFL .
RF(Z) END10 ALREADY DOWN
LDK A1,STRTFL RESET START FLAG
C1R A1,A1 .
ANS A1,CMNFLG,A12 .
ST A5,HRDSTA,A12 SAVE RETURN CODE IN HARDWARE STA
LDK A6,0 NO DWT AVAILABLE
CF A14,STOP ISSUE DISCONNECT LINE REQUEST
LDK A1,LOCCLE DIAGN. CODE = LOST CONNECTION
CF A14,CLAVCS CLEAR ALL VC'S LOCAL
END10 EQU *
ABL EXITDC CONTROL BACK TO SCHEDULER
*
* THE INPUT REQUEST IS CORRECT COMPLETED
*
END20 EQU *
LD A5,ECBBA,A8 BUFFER ADDRESS
LD A3,ECBEL,A8 EFFECTIVE BUFFER LENGTH
LDK A4,0
LC A4,LCIDNT,A5 LOGICAL CHANNEL NUMBER
IFT LOOP=1
*
EJECT
*
* ONLY FOR LOOP TEST
*
LC A6,NRLC,A12
ANK A6,/FF
SUK A6,1
IFF PERMVC=0
LC A2,NRPVC,A12
ANK A2,/FF
CWR A2,A4
RF(NG) LOOP1 SVC
LDR A6,A2
SUK A6,1
RF LOOP2
LOOP1 EQU *
ADR A6,A2 PVC
LOOP2 EQU *
XIF
IFT LOOP=1
SUR A6,A4
LDR A4,A6
SC A4,LCIDNT,A5
* END OF ONLY LOOP-TEST!!!!
XIF
CC A4,NRLC,A12 LC-NUMBER WITHIN LIMITS?
RF(L) END30 YES
EJECT
*
* IGNORE RECEIVED BUFFER AND ISSUE A NEW INPUT REQUEST
*
LDR A1,A8 ECB-ADDRESS
LDK A7,RECEIV FUNCTION CODE FOR RECEIVE
LKM
DATA -1
DATA ENDIN ACTIVATION ADDRESS
RB END10 CONTROL BACK TO SCHEDULER
*
* LC-NUMBER IS CORRECT
*
END30 EQU *
CF A14,GTLCAD GET LC-ADM ADDRESS
CF A14,GTBUF GET AN INPUT BUFFER
ST A2,ECBBA,A8 TO ECB
LDR A1,A8 ECB-ADDRESS AS PARAMETER
LDK A7,RECEIV FUNCTION CODE FOR RECEIVE
LKM ISSUE A NEW RECEIVE REQUEST
DATA -1
DATA ENDIN ACTIVATION ADDRESS
*
* TEST IF A RESTART PROCEDURE IS ACTIVE
*
LDR A2,A5 BUFFER ADDRESS
LD A4,CMNFLG,A12 IS RESTART FLAG SET ?
ANK A4,RSTFLG .
LC A4,IDENT,A2 GET PACKET TYPE
RF(Z) END40 NO RESTART PROCEDURE ACTIVE
ANK A4,/FF .
CWK A4,RSTR.P IS IT A RESTART PACKET
RF(E) END40 YES
CWK A4,RSTR.CP IS IT A RESTART CONF. PACKET
RF(E) END40 YES
CF A14,RLBUF RELEASE INPUT BUFFER
RB END10 CONTROL BACK TO SCHEDULER
EJECT
*
* SEARCH PACKET DEPENDENT ROUTINE
*
END40 EQU *
LDK A5,DATA.P
TM A4,A5 IS IT A DATA PACKET ?
ABL(Z) DATIN YES
ANK A4,/1F
LDK A5,RR.P
CWR A4,A5 IS IT A RR-PACKET ?
ABL(E) RRIN YES
LDK A5,RNR.P
CWR A4,A5 IS IT AN RNR-PACKET ?
ABL(E) RNRIN YES
LDK A5,TABLNG
END50 EQU *
LC A4,IDENT,A2
CC A4,TABLE,A5 SEARCH IDENT IN TABLE
RF(E) END70 FOUND
SUK A5,1
RB(NN) END50 TRY NEXT ONE
*
* INVALID PACKET TYPE
*
END60 EQU *
CF A14,RLBUF RELEASE INPUT BUFFER
LDK A1,LOCPER DIAGNOSTIC CODE = PROCEDURE ERRO
ABL CLVC CLEAR VC AND RETURN TO SCHED.
*
EJECT
*
* PACKET TYPE FOUND, BRANCH TO CONCERNING ROUTINE
*
END70 EQU *
SLL A5,1 PREPARE FOR INDEXING
ABI BRATAB,A5 BRANCH TO MODULE
*
* PACKET TYPE TABLE
*
TABLE EQU *
BYTE RSTR.P,RSTR.CP RESTART(-CONF.) PACKET
BYTE RSET.P,RSET.CP RESET(-CONF.) PACKET
IFF SWITVC=0
BYTE CLE.P,CLE.CP CLEAR(-CONF.) PACKET
BYTE CAL.P,CAL.CP CALL(-CONF.) PACKET
XIF
BYTE INT.P,INT.CP INTERRUPT(-CONF.) PACKET
TABLNG EQU *-1-TABLE TABLE LENGTH
*
* BRANCH TABLE
*
BRATAB EQU *
DATA RSTIN RESTART
DATA RSTCIN RESTART CONFIRMATION
DATA RESIN RESET
DATA RESCIN RESET CONFIRMATION
IFF SWITVC=0
DATA CLRIN CLEAR
DATA CLRCIN CLEAR CONFIRMATION
DATA CALLIN CALL
DATA CALCIN CALL CONFIRMATION
XIF
DATA INTIN INTERRUPT
DATA INTCIN INTERRUPT CONFIRMATION
EJECT
*
* PROCESSING OF RECEIVED DATA PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL DATIN
*
DATIN EQU *
CF A14,TDARR TEST PART OF PACKET CONTENTS
LDR A1,A1 O.K. ?
RF(NZ) DAT00 NO
LC A1,IDENT,A2 GET RECEIVED PS
SRL A1,1 .
ANK A1,/07 .
CC A1,RPS,A13 DOES IT MATCH WITH THE LC-ADM
RF(NE) DAT00 NO
*
* TEST IF RECEIVED P(S) IS IN WINDOW
*
LDK A7,0 PRESET WINDOW NOT FULL INDIC.
LC A5,RLWE,A13 GET NUMBER OF PACKETS IN WIND.
SUR A1,A5 .
ANK A1,/07 .
ADK A1,1 .
CC A1,LCREWN,A13 COMPARE WITH WINDOW SIZE
RF(L) DAT20 WINDOW IS NOT FULL
RF(G) DAT00 OUT OF WINDOW, RESET LC
LDK A7,1 SET WINDOW FULL INDIC.
RF DAT20 .
EJECT
*
* PACKET RECEIVED OUT OF SEQUENCE, START RESET PROCEDURE
*
DAT00 EQU *
LDK A1,RSET.ST LC-SUBSTATUS := RESET
SC A1,LCSBST,A13 .
*
* PREPARE AND QUEUE RESET PACKET FOR RH
*
LC A1,LCNUM,A13 LOGICAL CHANNEL NUMBER
SC A1,LCIDNT,A2 .
LDK A1,RSET.P PACKET TYPE FOR RESET INDICATION
SC A1,IDENT,A2
LDK A1,RSET.L LENGTH INTERN. RESET CONF NOT.
ST A1,HDLC,A2 TO HDLC HEADER
LDK A1,0
SC A1,CAUSE,A2 CLEAR RESET CAUSE
LDK A1,RESLCH
SC A1,DGNCOD,A2 SET DIAGNOSTIC CODE
CF A14,RSETVC
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
*
* PREPARE RESET PACKET AND QUEUE IT FOR OUTPUT
*
DAT05 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) DAT10 YES
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,DAT05 REACTIVATION ADDRESS
ABL BUFWAT
*
EJECT
*
DAT10 EQU *
LDK A1,RSET.P
SC A1,IDENT,A2 PACKET TYPE
LDK A1,0
SC A1,CAUSE,A2 CLEAR RESET CAUSE
LDK A1,RESLCH
SC A1,DGNCOD,A2 DIAGNOSTIC CODE
LDK A1,RSET.L RESET PACKET LENGTH TO HDLC HEADER
ST A1,HDLC,A2 .
CF A14,QUEO PUT ELEMENT IN OUTPUT QUEUE
LDKL A8,SYRETM RESET CONFIRMATION TIMER
CF A14,STTIM START TIMER
ABL EXITDC CONTROL BACK TO SCHEDULER
*
* TEST CURRENT M-BIT
*
DAT20 EQU *
LC A1,MBIT,A2 GET CURRENT M-BIT
ANK A1,MPOS .
RF(Z) DAT30 M-BIT NOT SET
*
* M-BIT IS SET, SO DATA LENGTH HAS TO BE MAXIMUM
*
LD A1,TRBFSZ,A13 MAX.DATA LENGTH IN DATA PACKET
ADK A1,BEGDAT ADD HEADERS
CWR A1,A3
RF(E) DAT30 OK, THEY ARE EQUAL
*
* DATA LENGTH NOT MAXIMUM, SO CLEAR VC
*
RB END60 CLEAR VC AND RETURN TO SCHEDULER
*
EJECT
*
* UPDATE PS TO BE RECEIVED NEXT
*
DAT30 EQU *
LC A1,RPS,A13 GET RPS
ADK A1,1 INCREMENT
ANK A1,/07 MODULO 8
SC A1,RPS,A13 .
*
* GET RECEIVED PR
*
LC A1,IDENT,A2 GET PR FROM RECEIVED PACKET
SRL A1,5 .
ANK A1,/07 .
*
* IF IT IS A SEND WINDOW UPDATING, RESET "NO PROCESSING" FLAG OF
* OUTPUT QUEUE
*
CC A1,SLWE,A13 COMPARE WITH SEND LOWER WINDOW E
RF(E) DAT50 NO UPDATING
SC A1,SLWE,A13 SAVE NEW VALUE
LDK A1,NPRFLG RESET "NO PROCESSING" FLAG
C1R A1,A1
ANS A1,QUEOUT,A13 .
*
* QUEUE PACKET FOR REQUEST HANDLER
*
DAT50 EQU *
ST A3,HDLC,A2 SAVE PACKET LENGTH IN HDLC-HEADE
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
*
EJECT
*
* CAN RECEIVE WINDOW BE UPDATED
*
DAT60 EQU *
LDK A3,0 PRESET INDIC.: NO PR UPDATING
LC A1,NRNUBF,A13 ARE ALL RESERVED BUFFERS USED ?
ANK A1,/FF .
RF(Z) DAT70 YES
LDK A3,1 SET INDIC.: PR UPDATED
*
* UPDATE PR
*
LC A4,PR,A13 UPDATE PR TO BE SENT NEXT
ADR A4,A1 ADD NUMBER OF NOT USED BUFFERS
ANK A4,/07 MODULO 8
SC A4,PR,A13 .
SUR A1,A1 ALL RES. BUFFERS ARE NOW USED
SC A1,NRNUBF,A13 .
*
* DID THE RECEIVED PS PASSES THE THRESHOLD OF THE RECEIVE WINDOW
*
DAT70 EQU *
LDK A2,0
LC A1,RPS,A13 RECEIVED PS
LC A2,RLWE,A13 RECEIVER LOWER WINDOW EDGE
SUR A1,A2 RPS - RLWE
ANK A1,/07 MODULO 8
CC A1,LCTHRE,A13 DID IT PASSED THE THRESHOLD ?
RF(NG) DAT130 NO
*
EJECT
*
* IF RECEIVE WINDOW IS NOT UPDATED, WAIT FOR IT
*
LDR A3,A3
RF(NZ) DAT90 IT IS UPDATED
LDR A7,A7 IS WINDOW FULL ?
RF(Z) DAT130 NO, DON'T WAIT FOR IT
LDR A1,A13 PARAMETER FOR DELAY AND ACTIVATION
LD A7,TSKID
LDKL A8,BUFDEL DELAY TIME
LKM
DATA -6
DATA DAT80 ACTIVATION ADDRESS
RF DAT130 CONTROL BACK TO SCHEDULER
*
DAT80 EQU *
LDR A13,A1 RESTORE LC-ADM ADDRESS
LDK A7,1 SET WINDOW FULL INDICATION
LDKL A14,DCSTAK RESET STACK POINTER
RB DAT60
*
* THE RECEIVE WINDOW IS UPDATED, CAN NEW PR BE SENT IN A DATA PACKET ?
*
DAT90 EQU *
LD A1,QUEOUT,A13 IS OUTPUT QUEUE EMPTY ?
RF(Z) DAT100 YES
*
* TEST IF ONLY NO-PROCESSING FLAG SET
*
SUK A1,1
RF(Z) DAT100 YES
*
EJECT
*
* REMOTE BUSY FLAG SET ?
*
LDK A3,REMBUS
AN A3,FLAGS,A13
RF(NZ) DAT100
*
* IS SEND WINDOW FULL ?
*
LC A1,PS,A13
LC A2,SLWE,A13
SUR A1,A2
ANK A1,/7
CC A1,LCTRWN,A13
RF(L) DAT130 NO
*
* SEND NEW PR IN RR-PACKET
*
DAT100 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) DAT120 YES
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,DAT100 REACTIVATION ADDRESS
ABL BUFWAT
*
EJECT
*
DAT120 EQU *
LC A1,PR,A13 PR
SC A1,RLWE,A13 SAVE IT AS LAST SENT PR
SLL A1,5 PR IN PACKET
ORK A1,RR.P .
SC A1,IDENT,A2 .
LDK A1,RR.L PACKET LENGTH TO HDLC-HEADER
ST A1,HDLC,A2 .
*
* RESET NO PROCESSING FLAG AND QUEUE PACKET
*
LDK A1,NPRFLG RESET "NO PROCESSING" FLAG
C1R A1,A1
ANS A1,QUEOUT,A13 .
LDR A1,A13 QUEUE ELEMENT AS FIRST
ADK A1,QUEOUT .
CF A14,QUEUEF .
DAT130 EQU *
ABL EXITDC CONTROL BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF RECEIVED RR-PACKET
*
********************************************
*
* INPUT PARAMETER:
* A2 = BUFFER ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RRIN
*
RRIN EQU *
CF A14,TDARR TEST RR-PACKET
LDR A1,A1 PR OUT OF SEQUENCE ?
ABL(NZ) DAT00 YES RESET LC (MODULE DATIN)
*
* TEST IF REMOTE BUSY FLAG SET
*
LD A1,FLAGS,A13
ANK A1,REMBUS
RF(Z) RNRI00 NO!
C1R A1,A1
ANS A1,FLAGS,A13 RESET REMOTE BUSY FLAG
LDK A1,NPRFLG
C1R A1,A1
ANS A1,QUEOUT,A13 RESET NO PROCESSING FLAG
RF RNRI00
EJECT
*
* PROCESSING OF RECEIVED RNR-PACKET
*
********************************************
*
* INPUT PARAMETER:
* A2 = BUFFER ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RNRIN
*
RNRIN EQU *
CF A14,TDARR TEST RR-PACKET
LDR A1,A1 PR OUT OF SEQUENCE ?
ABL(NZ) DAT00 YES RESET LC (MODULE DATIN)
LDK A1,REMBUS SET REMOTE BUSY FLAG
ORS A1,FLAGS,A13 .
*
* GET RECEIVED PR
*
RNRI00 EQU *
LC A1,IDENT,A2 GET PR FROM RECEIVED PACKET
SRL A1,5 .
ANK A1,/07 .
*
EJECT
*
* IF IT IS A SEND WINDOW UPDATING, RESET "NO PROCESSING" FLAG OF
* OUTPUT QUEUE
*
CC A1,SLWE,A13 COMPARE WITH SEND LOWER WINDOW E
RF(E) RNRI10 NO UPDATING
SC A1,SLWE,A13 SAVE NEW VALUE
LDK A1,NPRFLG RESET "NO PROCESSING" FLAG
C1R A1,A1
ANS A1,QUEOUT,A13 .
RNRI10 EQU *
CF A14,RLBUF BUFFER BACK TO POOL
ABL EXITDC CONTROL BACK TO SCHEDULER
IFF SWITVC=0
EJECT
*
*
* PROCESSING OF RECEIVED CALL-PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CALLIN
*
CALLIN EQU *
LDK A1,READ.ST IS LC-STATUS: READY ?
CC A1,LCSTAT,A13 .
RF(E) CALLI1 YES
CF A14,RLBUF RELEASE INPUT BUFFER
LDK A1,LCAL.ST IS LC-STATUS: LOCAL-CALL ?
CC A1,LCSTAT,A13 .
RF(NE) CALC00 NO, SO CLEAR VC
*
* A CALL COLLISION IS OCCURED, IGNORE RECEIVED CALL
*
ABL EXITDC CONTROL BACK TO SCHEDULER
*
* THE LC-STATUS IS VALID IN COMBINATION WITH THE CALL PACKET
*
CALLI1 EQU *
ST A3,HDLC,A2 SAVE BUFFER LENGTH IN BUFFER
LDK A1,RCAL.ST LC-STAT := REMOTE CALL
SC A1,LCSTAT,A13 .
LDK A1,0 ALL RESERVED BUFFERS ARE USED
SC A1,NRNUBF,A13 .
EJECT
*
* GET WINDOW SIZES AND PACKET LENGTH
*
CF A14,GTWNDS
*
* CHANGE TRANSMIT AND RECEIVE WINDOW SIZES
*
LC A1,LCTRWN,A13
ECR A1,A1
LC A1,LCREWN,A13
SC A1,LCTRWN,A13
ECR A1,A1
SC A1,LCREWN,A13
*
* CHANGE TRANSMIT AND RECEIVE PACKET LENGTH
*
LD A1,TRBFSZ,A13
LD A3,REBFSZ,A13
ST A3,TRBFSZ,A13
ST A1,REBFSZ,A13
*
* TRANSLATE THRESHOLD PERCENTAGE INTO A NUMBER OF PACKETS
*
CF A14,TRTHR
*
* QUEUE PACKET FOR THE REQUEST HANDLER
*
RF CALC20
EJECT
*
*
* PROCESSING OF RECEIVED CALL CONFIRMATION PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CALCIN
*
CALCIN EQU *
LDK A1,LCAL.ST IS LC-STATUS: LOCAL-CALL STATE
CC A1,LCSTAT,A13 .
RF(E) CALC10 YES
*
* ILLEGAL STATE, SO CLEAR VC
*
CF A14,RLBUF BUFFER BACK TO POOL
CALC00 EQU *
LDK A1,LOCPER DIAGNOSTIC CODE = PROCEDURE ERRO
ABL CLVC CLEAR VC AND RETURN TO SCHED.
*
EJECT
*
* STATUS WILL BE DATA TRANSFER, UPDATE LC-ADM
*
CALC10 EQU *
LDK A1,DATA.ST LC-STATUS := DATA TRANSFER
ECR A1,A1 .
ST A1,LCSTAT,A13 SUBSTATUS := FLOW CONTROL READY
CF A14,CLLCAD CLEAR LC-ADM FIELDS
*
* UPDATE CALL CONFIRMATION PACKET
*
ST A3,HDLC,A2 PACKET LENGTH TO HDLC-HEADER
*
* QUEUE PACKET AND RETURN
*
CALC20 EQU *
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
ABL EXITDC CONTROL BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF RECEIVED CLEAR PACKET
*
********************************************
*
* INPUT PARAMETER:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CLRIN
*
CLRIN EQU *
IFF PERMVC=0
LC A1,VCTYP,A13 GET TYPE OF LOGICAL CHANNEL
ANK A1,/FF .
CWK A1,SVC IS IT A SWITCH VIRTUAL CIRCUIT ?
RF(E) CLR00 YES
LDK A1,LOCPER DIAGN. CODE : PROCEDURE ERROR
ABL CLVC RESET PVC
*
CLR00 EQU *
XIF
IFF SWITVC=0
LDK A1,CLEA.ST IS LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RF(E) CLRCIN YES, CO CLEAR COLLISION
*
EJECT
*
* HAS THE REQUEST HANDLER TO BE NOTIFIED ?
*
LD A6,LCDWT,A13 DOES THE RH KNOWS THIS VC ?
RF(Z) CLR10 NO
LDK A1,VCREL
SC A1,DWTSTE,A6
LDK A1,NPRFLG UNBLOCK INPUT QUEUE
C1R A1,A1 .
ANS A1,QUEINP,A13 .
ST A3,HDLC,A2 PACKET LENGTH TO HDLC-HEADER
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
RF CLR15
*
CLR10 EQU *
CF A14,RLBUF BUFFER BACK TO POOL
*
EJECT
*
* LC-STATUS WAS "NOT CLEAR", SO SEND CLEAR CONFIRMATION TO REMOTE STATIO
*
CLR15 EQU *
*
* EMPTY OUTPUT QUEUE
*
LDKL A3,CLEA.RC RETURN CODE FOR USER
CF A14,CMEVNT
CLR20 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) CLR30 YES
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,CLR20 REACTIVATION ADDRESS
ABL BUFWAT
*
CLR30 EQU *
LDK A1,CLE.CP PACKET IDENTIFICATION
SC A1,IDENT,A2 .
LDK A1,CLE.CL PACKET LENGTH TO HDLC-HEADER
ST A1,HDLC,A2 .
CM LCSTAT,A13 NEW STATUS:=READY
*
* QUEUE PACKET
*
CLR40 EQU *
CF A14,QUEO PUT ELEMENT IN OUTPUT QUEUE
CLR50 EQU *
ABL EXITDC CONTROL BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF RECEIVED CLEAR CONFIRMATION PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
CLRCIN EQU *
CF A14,RLBUF BUFFER BACK TO POOL
*
* RESET CONFIRMATION TIMER AND FLAG
*
LD A1,TIMADR,A13 GET ADDRESS TIMER BLOCK
CF A14,CANTIM CANCEL TIMER
CM TIMADR,A13 CLEAR TIMER ADDRESS
LDK A1,CONTIM RESET TIMER STARTED FLAG
C1R A1,A1 .
ANS A1,FLAGS,A13 .
LDK A1,CLEA.ST IS LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RF(E) CLRC00 YES
LDK A1,READ.ST IS LC-STATUS = READY ?
CC A1,LCSTAT,A13 .
RF(E) CLRC10 YES
*
EJECT
*
* STATUS IS NOT READY OR CLEAR, SO PROCEDURE ERROR
*
RB CALC00 CLEAR VC
*
CLRC00 EQU *
CM LCSTAT,A13 SET STATUS := READY
CLRC10 EQU *
RB CLR50 CONTROL BACK TO SCHEDULER
*
XIF
*
EJECT
*
*
* PROCESSING OF RECEIVED RESET PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RESIN
*
RESIN EQU *
LDK A1,CLEA.ST IF LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RF(E) RESC00 YES, IGNORE PACKET
*
* TEST IF A RESET COLLISION HAS OCCURED
*
LDK A1,RSET.ST IS LC-STATUS = RESET ?
CC A1,LCSBST,A13 .
RF(E) RESCIN YES
*
* TEST IF CURRENT STATUS MATCH WITH RECEIVED PACKET
*
LDK A1,DATA.ST IS LC-STATUS = DATA TRANSFER ?
CC A1,LCSTAT,A13 .
RF(NE) RESC10 NO, SO PROCEDURE ERROR
*
EJECT
*
* LC-STATUS IS DATA TRANSFER, SO RESET LC-ADM
*
ST A3,HDLC,A2 PACKET LENGTH TO HDLC-HEADER
CF A14,RSETVC RESET VIRTUAL CIRCUIT
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
*
* PREPARE AND TRANSMIT RESET CONFIRMATION PACKET
*
RES40 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) RES60 YES
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,RES40 REACTIVATION ADDRESS
ABL BUFWAT
*
RES60 EQU *
LDK A1,RSET.CP RESET CONF. PACKET TYPE
SC A1,IDENT,A2 .
LDK A1,RSET.CL PACKET LENGTH TO HDLC-HEADER
ST A1,HDLC,A2 .
*
* QUEUE ELEMENT
*
CF A14,QUEO
ABL EXITDC CONTROL BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF A RECEIVED RESET CONFIRMATION PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RESCIN
*
RESCIN EQU *
LD A1,TIMADR,A13 TIMER BLOCK ADDRESS
CF A14,CANTIM CANCEL TIMER
CM TIMADR,A13
LDK A3,CONTIM
C1R A3,A3
ANS A3,FLAGS,A13 .
LDK A1,RSET.ST IS LC-STATUS = DATA-TRANSF/RESET
CC A1,LCSBST,A13 .
RF(NE) RESC10 NO
LDK A1,FLCN.ST SUB-STATUS := FLOW CNTRL READY
SC A1,LCSBST,A13 .
LDK A1,NPRFLG RESET NO PROCESSING FLAG
C1R A1,A1 .
ANS A1,QUEOUT,A13 .
RESC00 EQU *
CF A14,RLBUF BUFFER BACK TO POOL
ABL EXITDC CONTROL BACK TO SCHEDULER
*
EJECT
*
* ILLEGAL STATE, SO CLEAR VC
*
RESC10 EQU *
CF A14,RLBUF BUFFER BACK TO POOL
LDK A1,LOCPER DIAGN. CODE = PROCEDURE ERROR
ABL CLVC CLEAR VC AND RETURN TO SCHED.
EJECT
*
*
* PROCESSING OF A RECEIVED RESTART PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A12=LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RSTIN
*
RSTIN EQU *
LDK A1,RSTFLG ALREADY RESTART BUSY ?
AN A1,CMNFLG,A12 .
RF(NZ) RSTCIN YES, RESTART COLLISION
CF A14,RLBUF BUFFER BACK TO POOL
*
* CLEAR ALL NOT READY VC'S LOCAL
*
LDK A1,RSTRED DIAGN. CODE = RESTART RECEIVED
CF A14,CLAVCS CLEAR ALL VC'S LOCAL
*
* PREPARE AND TRANSMIT RESTART CONFIRMATION PACKET
*
RST00 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) RST20 YES
*
EJECT
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,RST00 REACTIVATION ADDRESS
ABL BUFWAT
*
RST20 EQU *
LDK A1,RSTR.CP RESTART CONF. PACKET TYPE
SC A1,IDENT,A2 .
LDK A1,RSTR.CL PACKET LENGTH
ST A1,HDLC,A2 .
*
* STORE ELEMENT IN RESTART QUEUE
*
LDR A1,A12 QUEUE ANCHOR ADDRESS
ADK A1,RSTQUE .
CF A14,QUEUE QUEUE ELEMENT
RF RSTC20 CONTROL BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF A RECEIVED RESTART CONFIRMATION PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A12 = LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL RSTCIN
*
RSTCIN EQU *
*
* RESET TIMER
*
CF A14,RLBUF BUFFER BACK TO POOL
LD A1,RTMADR,A12 TIMER ACTIVE ?
CF A14,CANTIM CANCEL TIMER
CM RTMADR,A12
LDK A1,RSTFLG RESTART PROCEDURE BUSY ?
AN A1,CMNFLG,A12 .
RF(Z) RSTC20 NO, IGNORE PACKET
XRS A1,CMNFLG,A12 RESET RESTART PROC. BUSY FLAG
RSTC20 EQU *
ABL EXITDC
EJECT
*
*
* PROCESSING OF RECEIVED INTERRUPT PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL INTIN
*
INTIN EQU *
LDK A4,0 INDICATE ENTRY FOR INTERRUPT PACKET
*
* THE NEXT PART OF CODING IS COMMON FOR THE PROCESSING OF
* AN INTERRUPT- AND AN INTERRUPT CONFIRMATION PACKET.
*
INT00 EQU *
LDK A1,DATA.ST IS LC-STATUS = DATA TRANSFER ?
CC A1,LCSTAT,A13 .
RF(E) INT20 YES
*
* LC-STATUS IS NOT DATA TRANSFER, IF CLEAR: IGNORE PACKET, ELSE
* PROCEDURE ERROR.
*
LDK A1,CLEA.ST IS LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RB(NE) RESC10 NO, SO PROCEDURE ERROR
RB RESC00 IGNORE PACKET
*
EJECT
*
* STATE = DATA TRANSFER, IF SUB-STATE = RESET: IGNORE PACKET
*
INT20 EQU *
LC A1,LCSBST,A13 IS LC-SUBSTATUS = RESET
ANK A1,RSET.STA .
RB(NZ) RESC00 IGNORE PACKET
*
* QUEUE PACKET FOR REQUEST HANDLER
*
INT30 EQU *
ST A3,HDLC,A2 SAVE PACKET LENGTH IN BUFFER
LDR A1,A13 INPUT QUEUE ANCHOR ADDRESS
ADK A1,QUEINP
CF A14,QUEUEF QUEUE ELEMENT AS FIRST
LDK A2,NPRFLG RESET NO PROCESSING FLAG
C1R A2,A2
ANRS A2,A1
LDR A4,A4
RF(NZ) INTC10 CONTINUE WITH SPECIFIC PROCESSING
OF INTERRUPT CONF. PACKET
RB RSTC20 CONTROL BLOCK BACK TO SCHEDULER
EJECT
*
*
* PROCESSING OF RECEIVED INTERRUPT CONFIRMATION PACKET
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A3 = BUFFER LENGTH
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL INTCIN
INTCIN EQU *
LDK A4,1 INDICATION FOR INTERR. CONF. PACKET ENTRY
*
* STATUS CKECKING ETC. IS DONE IN COMMON PART OF CODING WITH
* THE PROCESSING OF A INTERRUPT PACKET.
*
RB INT00
*
* RESET INTERRUPT PENDING FLAG
*
INTC10 EQU *
LDK A1,INTPNG RESET INTERRUPT PENDING FLAG
C1R A1,A1 .
ANS A1,FLAGS,A13 .
RB RSTC20 CONTROL BLOCK BACK TO SCHEDULER
EJECT
*
*
* THIS MODULE PERFORMS THE CLEARING RESP. THE
* RESETTING OF A SVC RESP. PVC.
*
********************************************
*
* INPUT PARAMETERS:
* A1 = DIAGNOSTIC CODE
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* ABL CLVC
*
CLVC EQU *
LDR A5,A1 SAVE DIAGNOSTIC CODE
IFF SWITVC=0
IFF PERMVC=0
*
* SELECT ON VC-TYPE
*
LDK A1,PVC GET VC-TYPE
CC A1,VCTYP,A13 .
RF(E) CLV100 TYPE IS PERMANENT
*
* SWITCHED VIRTUAL CIRCUIT
*
XIF
IFF SWITVC=0
LDK A1,CLEA.ST IS LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RF(E) CLVC60 YES, NO ACTION
SC A1,LCSTAT,A13 LC-STATUS:=CLEAR
*
EJECT
*
* EMPTY INPUT QUEUE
*
CF A14,CLINPQ
*
* COMPLETE EVENTS IN OUTPUT QUEUE
*
LDKL A3,CLEA.RC
CF A14,CMEVNT
*
* SEND NOTIFICATION TO RH, IF APPLICABLE
*
LD A6,LCDWT,A13 DOES THE RH KNOWS THIS LC ?
RF(Z) CLVC20 NO
LDK A1,VCREL
SC A1,DWTSTE,A6
CF A14,GTBUF GET AN INPUT BUFFER
LC A1,LCNUM,A13 LOGICAL CHANNEL NUMBER
SC A1,LCIDNT,A2 .
LDK A1,CLE.P INTERNAL PACKET TYPE
SC A1,IDENT,A2 .
SC A5,DGNCOD,A2 .
LDK A1,CLE.L PACKET LENGTH
ST A1,HDLC,A2 .
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
LD A1,TIMADR,A13 GET TIMER BLOCK ADDRESS
CF A14,CANTIM CANCEL TIMER
CM TIMADR,A13
*
EJECT
*
* PREPARE CLEAR PACKET AND TRANSMIT IT TO THE REMOTE STATION
*
CLVC20 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) CLVC40 YES
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,CLVC20 REACTIVATION ADDRESS
ABL BUFWAT
*
CLVC40 EQU *
LDK A1,CLE.P CLEAR PACKET TYPE
SC A1,IDENT,A2 .
SC A5,DGNCOD,A2 DIAGNOSTIC CODE
LDK A1,0
SC A1,CAUSE,A2 CLEAR CLEARING CAUSE
LDK A1,CLE.L CLEAR PACKET LENGTH
ST A1,HDLC,A2 .
CF A14,QUEO PUT ELEMENT IN OUTPUT QUEUE
*
* START CONFIRMATION TIMER
*
LDKL A8,SYCLTM CLEAR CONFIRMATION TIMER
CF A14,STTIM START TIMER
CLVC60 EQU *
ABL EXITDC CONTROL BACK TO SCHEDULER
XIF
IFF PERMVC=0
EJECT
*
* PERMANENT VIRTUAL CIRCUITS
*
CLV100 EQU *
LDK A1,RSET.ST IS SUB-STATUS = RESET ?
CC A1,LCSBST,A13 .
RF(E) CLV160 YES, NO ACTION
SC A1,LCSBST,A13 SUBSTATUS := RESET
*
* RESET VIRTUAL CIRCUIT
*
CF A14,RSETVC
*
* SEND NOTIFICATION TO RH, IF APPLICABLE
*
LD A1,LCDWT,A13 DOES THE RH KNOWS THIS LC ?
RF(Z) CLV130 NO
CF A14,GTBUF GET AN INPUT BUFFER
LC A1,LCNUM,A13 LOGICAL CHANNEL NUMBER
SC A1,LCIDNT,A2 .
LDK A1,RSET.P PACKET TYPE
SC A1,IDENT,A2 .
SC A5,DGNCOD,A2 .
LDK A1,RSET.L PACKET LENGTH
ST A1,HDLC,A2 .
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
LD A1,TIMADR,A13 GET TIMER BLOCK ADDRESS
CF A14,CANTIM CANCEL TIMER
CM TIMADR,A13
*
EJECT
*
* PREPARE RESET PACKET AND TRANSMIT IT TO THE REMOTE STATION
*
CLV130 EQU *
LDR A2,A13 GET AN OUTPUT BUFFER
ADK A2,SYSBUF .
LDR* A1,A2 IS IT FREE ?
RF(Z) CLV150 YES
*
* WAIT FOR RELEASING OF OUTPUT BUFFER
*
LDKL A1,CLV130 REACTIVATION ADDRESS
ABL BUFWAT
*
CLV150 EQU *
LDK A1,RSET.P RESET PACKET TYPE
SC A1,IDENT,A2 .
SC A5,DGNCOD,A2 DIAGNOSTIC CODE
LDK A1,0
SC A1,CAUSE,A2 CLEAR RESET CAUSE
LDK A1,RSET.L RESET PACKET LENGTH
ST A1,HDLC,A2 .
CF A14,QUEO PUT ELEMENT IN OUTPUT QUEUE
*
* START CONFIRMATION TIMER
*
LDKL A8,SYRETM RESET CONFIRMATION TIMER
CF A14,STTIM START TIMER
CLV160 EQU *
ABL EXITDC
XIF
EJECT
*
*
* THIS MODULE RELEASE ALL RELATION BETWEEN THE
* DWT AND THE LOGICAL CHANNELS. THE LC IS PLACED
* IN THE INITIAL STATE.
*
********************************************
*
* INPUT PARAMETERS:
* A1 = DIAGNOSTIC CODE FOR THE RH
* A12 = LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,CLAVCS
*
* OUTPUT PARAMETERS:
* NO REGISTERS ARE CHANGED
*
CLAVCS EQU *
CF A14,SAVE8 SAVE REGISTERS
LDR A7,A13 SAVE A13
*
* RELEASE ALL LOGICAL CHANNELS
*
LC A4,NRLC,A12 GET # OF LOGICAL CHANNELS
ANK A4,/FF .
SUK A4,1 .
CLAV00 EQU *
CF A14,GTLCAD GET LC-ADM ADDRESS
*
EJECT
*
CF A14,CLINPQ CLEAR INPUT QUEUE
IFF SWITVC=0
LDK A2,0
IFF PERMVC=0
LC A1,VCTYP,A13 VC-TYPE
ANK A1,/FF .
RF(Z) CLAV10 SWITCHED VIRTUAL CIRCUIT
XIF
IFF PERMVC=0
LDK A2,DATA.ST PRESET LC-STATUS
ECR A2,A2 .
XIF
CLAV10 EQU *
ST A2,LCSTAT,A13 SET STATUS TO INITIALE VALUE
LD A6,LCDWT,A13 IS THERE RELATION WITH A DWT
RF(Z) CLAV30 NO
IFF SWITVC=0
IFF PERMVC=0
ADK A1,0 PVC ?
RF(NZ) CLAV15 YES
XIF
IFF SWITVC=0
LDK A1,VCREL
SC A1,DWTSTE,A6
CLAV15 EQU *
XIF
*
* RESET TIMER FLAGS
* CANCEL TIMER
*
LD A1,TIMADR,A13
CF A14,CANTIM
CM TIMADR,A13
LDK A1,CONTIM MASK VALUE
C1R A1,A1 .
ANS A1,FLAGS,A13 RESET FLAG
*
* COMPLETE PENDING OUTPUT REQUESTS
LDKL A3,CLEA.RC RETURN CODE
*
CF A14,CMEVNT
*
EJECT
*
* PREPARE CLEAR OR RESET NOTIFICATION FOR RH
*
CF A14,GTBUF GET AN INPUT BUFFER
LC A1,LCNUM,A13 LOGICAL CHANNEL NUMBER
SC A1,LCIDNT,A2 .
IFF SWITVC=0
LDK A3,CLEA.RC RETURN CODE
LDK A1,CLE.P PRESET PACKET TYPE = CLEAR
IFF PERMVC=0
LC A3,VCTYP,A13 VC-TYPE
ANK A3,/FF .
RF(Z) CLAV20 SWITCHED VIRTUAL CIRCUIT
XIF
IFF PERMVC=0
LDK A3,RSET.RC RETURN CODE
LDK A1,RSET.P PACKET TYPE = RESET
CLAV20 EQU *
XIF
SC A1,IDENT,A2 SAVE PACKET TYPE
LD A1,SAVE GET INPUT PARAMETER
SC A1,DGNCOD,A2 DIAGNOSTIC CODE
LDK A1,CLE.L PACKET LENGTH
ST A1,HDLC,A2 .
CF A14,QUEI PUT ELEMENT IN INPUT QUEUE
CLAV30 EQU *
SUK A4,1 NEXT ENTRY IN LC:TAB
RB(NN) CLAV00 .
*
* READY
*
LDR A13,A7 RELOAD SAVED A13
CF A14,RELOA8
RTN A14 BACK TO CALLER
EJECT
*
*
* WAIT FOR RELEASING OF SYSTEM BUFFER
*
********************************************
*
* INPUT PARAMETERS:
* A1 = RESTART ADDRESS
* A12 = LINE BLOCK ADDRESS
* A13 = LC-ADM ADDRESS
*
* CALLING SEQUENCE:
* ABL BUFWAT
*
* OUTPUT PARAMETERS:
* AFTER A CERTAIN TIME THE CALLER IS ACTIVATED
* ON THE RESTART LABEL
* A13 AND A14 REMAIN UNCHANGED.
*
BUFWAT EQU *
LDR A2,A13 SAVE REGISTERS
LDR A3,A12 .
INH . =1
CF A15,GETBLK GET A MONITOR BLOCK
LDR A1,A4 BLOCK ADDRESS AS PARAMETER
CF A15,SETIME SET TIMER
DATA BUFW00 ACTIVATION ADDRESS
DATA BUFDEL DELAY TIMER
ENB
ABL EXITDC CONTROL BACK TO SCHEDULER
*
EJECT
*
* ACTIVATION
*
BUFW00 EQU *
LDR A4,A1 GET MONITOR BLOCK ADDRESS
INH . =1
CF A15,FREBLK RELEASE BLOCK
ENB
LDR A12,A3 RESTORE REGISTERS
LDR A13,A2 .
LDKL A14,DCSTAK A14:=CF STACK POINTER
ABR A1 BACK TO CALLER
EJECT
*
*
* TRANSLATE THRESHOLD PERCENTAGE INTO A NUMBER OF PACKETS
*
********************************************
*
* INPUT PARAMETERS:
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,TRTHR
*
* OUTPUT PARAMETERS:
* THE NUMBER OF PACKETS IS STORED IN THE LC-ADM.
* A1 IS CHANGED
*
TRTHR EQU *
STR A4,A14 SAVE REGISTER
LDK A1,0
LC A1,LCREWN,A13 RECEIVE WINDOW SIZE = W
SUK A1,1
LDK A4,0
TRTHR1 EQU *
AD A4,THRESH
SUK A1,1 GET P*W
RB(NN) TRTHR1
LDKL A1,-1
TRTHR2 EQU *
ADK A1,1
SUK A4,100 P*W/100
RB(NN) TRTHR2
SC A1,LCTHRE,A13 THRESHOLD VALUE IN PACKETS
LDR* A4,A14 RESTORE REGISTER
RTN A14
EJECT
IFF SWITVC=0
*
*
* CALCULATION OF THE WINDOW SIZES AND PACKET LENGTH
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A12 = LINE BLOCK ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,GTWNDS
*
* OUTPUT PARAMETERS:
* REGISTERS A1 AND A3 ARE CHANGED
*
GTWNDS EQU *
ST A2,SAVE+6 SAVE REGISTER
LD A1,WNDSIZ,A12 PRESET ON MAXIMUM VALUES
SC A1,LCTRWN,A13 .
SC A1,LCREWN,A13 .
LD A1,PACKLN,A12 .
ST A1,TRBFSZ,A13 .
ST A1,REBFSZ,A13 .
ADK A2,BEGDAT POINTER
LCR A1,A2 GET LENGTH VALUE
ANK A1,/F0 LENGTH CALLING DTE
SRL A1,4 .
LCR A3,A2 LENGTH CALLED DTE
ANK A3,/0F
ADR A1,A3 ADD BOTH LENGTH
*
EJECT
*
ADK A1,1 ROUNDED UPWARDS
SRL A1,1 MAKE IT BYTES
ADR A2,A1 PASS DTE FIELDS
ADK A2,1 POINTS TO FACILITY
LCR A1,A2 FACILITY SPECIFIED ?
ANK A1,/3F
RF(Z) GTWND6 NO
ADK A2,1 POINTS TO FIRST FACILITY
GTWND1 EQU *
LCR A3,A2 GET FACILITY CODE
CWK A3,/02 FLOW CONTROL ?
RF(E) GTWND2 YES
ADK A2,2 TRY NEXT ONE
SUK A1,2 UPDATE LENGTH
RF(NP) GTWND6 EXHAUSTED
RB GTWND1 NEXT ONE
*
* FACILITY FOR FLOW CONTROL SELECTION SPECIFIED
*
GTWND2 EQU *
*
* GET TRANSMITTER DATA
*
ADK A2,1 POINTS TO FACILITY PARAMETER
LCR A3,A2 GET PARAMETER
ANK A3,/0F TRANSMITTER PARAMETERS
SLL A3,1 PREPARE FOR INDEXING
RF(Z) GTWND4 NOT SPECIFIED
LD A3,CLAS1-2,A3 GET VALUES
CC A3,TRBFSZ+1,A13 PACKET SIZE TOO LARGE ?
RF(NL) GTWND3 YES
SC A3,TRBFSZ+1,A13 SAVE TRANSMITTER BUFFER SIZE
*
EJECT
*
GTWND3 EQU *
ECR A3,A3
CC A3,LCTRWN,A13 WINDOW SIZE TOO LARGE ?
RF(NL) GTWND4 YES
SC A3,LCTRWN,A13 SAVE WINDOW SIZE
*
* GET RECIEVER DATA
*
GTWND4 EQU *
LCR A3,A2 GET PARAMETER AGAIN
ANK A3,/F0 RECEIVER PARAMETER
SRL A3,3 PREPARE FOR INDEXING
RF(Z) GTWND6 NOT SPECIFIED
LD A3,CLAS1-2,A3 GET VALUES
CC A3,REBFSZ+1,A13 PACKET SIZE TOO LARGE ?
RF(NL) GTWND5 YES
SC A3,REBFSZ+1,A13 SAVE RECEIVER BUFFER SIZE
GTWND5 EQU *
ECR A3,A3
CC A3,LCREWN,A13 WINDOW SIZE TOO LARGE ?
RF(NL) GTWND6 YES
SC A3,LCREWN,A13 SAVE WINDOW SIZE
GTWND6 EQU *
LD A2,SAVE+6 RELOAD SAVED A2
RTN A14
EJECT
XIF
*
*
* COMPLETE AN OUTPUT EVENT, DUE TO AN ERROR SITUATION
*
********************************************
*
* INPUT PARAMETERS:
* A3 = RETURN CODE
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,CMEVNT
*
* OUTPUT PARAMETERS:
* A1 ,A2 AND A6 ARE CHANGED
*
CMEVNT EQU *
LDR A1,A13 QUEUE ANCHOR ADDRESS
ADK A1,QUEOUT .
LDK A2,NPRFLG SET MASK VALUE
C1R A2,A2 .
ANRS A2,A1 IS QUEUE EMPTY ?
RF(Z) CMEV20 YES
CF A14,DEQUE GET ELEMENT FROM QUEUE
LDKL A1,DWTTYP
CW A1,DWTCHP,A2 IS IT A DWT ?
RF(NE) CMEV10 NO
LDR A6,A2 A6 = DWT-ADDRESS
CF A14,CMPREQ COMPLETE REQUEST
RB CMEVNT
*
EJECT
*
* THE ELEMENT IS A SYSTEM BUFFER
*
CMEV10 EQU *
CMR A2 RELEASE SYSTEM BUFFER
RB CMEVNT
*
CMEV20 EQU *
RTN A14
EJECT
*
*
* THIS MODULE PERFORMS SOME TESTS ON A RECIEIVED
* DATA-, RR- OR RNR PACKET.
*
********************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,TDARR
*
* OUTPUT PARAMETERS:
* A1 = 0 NO ERRORS FOUND
* 1 P(R) ERROR FOUND
* WHEN A PROCEDURE ERROR IS DETECTED, THE VC WILL BE CLEARED
* OR RESET AND THE MODULE RETURNS TO THE SCHEDULER.
*
TDARR EQU *
LDK A1,DATA.ST IS LC-STATUS = DATA TRANSFER ?
CC A1,LCSTAT,A13 .
RF(E) TDA10 YES
*
* LC-STATUS IS NOT DATA TRANSFER, IF CLEAR: IGNORE PACKET, ELSE
* PROCEDURE ERROR
*
LDK A1,CLEA.ST IS LC-STATUS = CLEAR ?
CC A1,LCSTAT,A13 .
RF(NE) TDA00 YES
CF A14,RLBUF IGNORE PACKET
ABL EXITDC CONTROL BACK TO SCHEDULER
*
EJECT
*
* ILLEGAL STATE, SO PROCEDURE ERROR
*
TDA00 EQU *
CF A14,RLBUF BUFFER BACK TO POOL
LDK A1,LOCPER DIAG. CODE = PROCEDURE ERROR
ABL CLVC CLEAR VC AND RETURN TO SCHEDULER
*
* STATE = DATA TRANSFER, IF SUB-STATE = RESET: IGNORE PACKET
*
TDA10 EQU *
LDK A1,RSET.ST IS LC-STATUS = RESET
CC A1,LCSBST,A13 .
RF(NE) TDA20 NO
CF A14,RLBUF BUFFER BACK TO POOL
ABL EXITDC CONTROL BACK TO SCHEDULER
*
* TEST IF RECEIVED P(R) IS IN WINDOW: SLWE <= P(R) <= PS
* OR P(R) - SLWE <= PS - SLWE
*
TDA20 EQU *
LC A1,IDENT,A2 GET RECEIVED P(R)
SRL A1,5 .
ANK A1,/07 .
LC A4,SLWE,A13 SEND LWE = OLD P(R)
ANK A4,/FF .
SUR A1,A4 GET P(R) - SLWE
ANK A1,/07 MODULO 8
STR A1,A14 SAVE IT
LC A1,PS,A13 GET PS - SLWE
SUR A1,A4 .
ANK A1,/07 MODULO 8
CWR* A1,A14 >=
RF(NL) TDA30 YES
EJECT
*
* P(R) IS NOT IN WINDOW, RETURN CODE := 1
*
LDK A1,1 SET RETURN CODE
RF TDA40
*
* PACKET CORRECT
*
TDA30 EQU *
LDK A1,0 SET RETURN CODE
TDA40 EQU *
RTN A14
EJECT
*
*
* CALCULATE QUEUE ANCHOR ADDRESS AND QUEUE ELEMENT
*
********************************************
*
* INPUT PARAMETERS:
* A2 = ELEMENT ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,QUEI/QUEO
*
* OUTPUT PARAMETERS:
* NONE
* A1 IS CHANGED
*
QUEI EQU *
LDK A1,QUEINP
RF QUEO00
*
QUEO EQU *
LDK A1,QUEOUT
QUEO00 EQU *
ADR A1,A13 GET QUEUE ANCHOR ADDRESS
CF A14,QUEUE QUEUE ELEMENT
RTN A14
EJECT
*
*
* QUEUE ROUTINE (FIFO)
*
********************************************
*
* INPUT PARAMETERS:
* A1 = ADDRESS QUEUE ANCHOR
* A2 = ELEMENT ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,QUEUE
*
* OUTPUT PARAMETERS:
* NO REGISTERS ARE CHANGED
*
QUEUE EQU *
IFT CPU852=1
ST A1,QUESAV SAVE REGISTERS A1-A3
ST A2,QUESAV-2
ST A3,QUESAV-4
XIF
IFT CPU852=0
MS 3,QUESAV-4 SAVE REGISTERSA1-A3
XIF
LDR* A3,A1
ANKL A3,/FFFE QUEUE FILLED?
RF(Z) QUE10 NO
*
EJECT
*
QUE05 EQU *
LDR A1,A3 GET NEXT ELEMENT
LD A3,BFCHPT,A1 CHAIN FILLED?
RB(NZ) QUE05 YES
ST A2,BFCHPT,A1 STORE NEW ELEMENT
RF QUE15
QUE10 EQU *
ORRS A2,A1 STORE ELEMENT IN ANCHOR
QUE15 EQU *
CM BFCHPT,A2 SET ZERO IN CHAINPOINTER
IFT CPU852=1
LD A1,QUESAV RESTORE REGISTERS A1-A3
LD A2,QUESAV-2
LD A3,QUESAV-4
XIF
IFT CPU852=0
ML 3,QUESAV-4 RESTORE REGISTERS A1-A3
XIF
RTN A14
EJECT
*
*
* QUEUE ROUTINE (LIFO)
*
********************************************
*
* INPUT PARAMETERS:
* A1 = ADDRESS QUEUE ANCHOR
* A2 = ELEMENT ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,QUEUEF
*
* OUTPUT PARAMETERS:
* NO REGISTERS ARE CHANGED
*
QUEUEF EQU *
ST A3,QUESAV SAVE REGISTERS A3,A4
ST A4,QUESAV-2
CM BFCHPT,A2
LDR* A4,A1 GET ADDRESS FROM QUEUE ANCHOR
ANK A4,/01 SAVE BIT 15
LDKL A3,/FFFE
ANRS A3,A1 CLEAR BIT 15 OF ANCHOR
LDR* A3,A1 ADDRESS FROM QUEUE ANCHOR
RF(Z) QUEF10
ST A3,BFCHPT,A2 STORE OLD POINTER IN NEW ELEMENT
QUEF10 EQU *
STR A2,A1 STORE NEW ELEMENT IN ANCHOR
ORRS A4,A1 STORE OLD BIT 15 IN ANCHOR
LD A3,QUESAV RESTORE REGISTERS A3,A4
LD A4,QUESAV-2
RTN A14
EJECT
*
*
* DEQUEUE ROUTINE
*
********************************************
*
* INPUT PARAMETERS:
* A1 = ADDRESS QUEUE ANCHOR
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,DEQUE
*
* OUTPUT PARAMETERS:
* A2 = ELEMENT ADDRESS
* NO REGISTERS ARE CHANGED
*
DEQUE EQU *
ST A3,QUESAV SAVE REGISTER A3
LDR* A2,A1 GET ELEMENT FROM ANCHOR
LD A3,BFCHPT,A2 GET ADDRESS NEXT ELEMENT
STR A3,A1 STORE IN ANCHOR
CM BFCHPT,A2 ZERO IN CHAINPOINTER
LDR A3,A2
ANK A3,1 .
XRR A2,A3 RESET BIT 15 IN ELEMENT ADDR.
LD A3,QUESAV RESTORE REGISTER A3
RTN A14
EJECT
*
*
* START TIMER ROUTINE
*
********************************************
*
* INPUT PARAMETERS:
* A4 = ACTIVATION ADDRESS
* A8 = TIME-OUT VALUE
* A12 = 1TH PARAMETER
* A13 = 2ND PARAMETER
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,STRTIM
*
* OUTPUT PARAMETERS:
* A4 = ADDRESS TIMER
* NO OTHER REGISTERS ARE CHANGED
*
STRTIM EQU *
IFT CPU852=1
ST A1,TIMSAV SAVE REGISTERS
ST A2,TIMSAV-2
ST A3,TIMSAV-4
XIF
IFT CPU852=0
MS 3,TIMSAV-4 SAVE REGISTERS
XIF
ST A8,STRPAR+2 SET TIME
LDR A1,A13 LC-ADM ADDRESS
LDR A2,A4 DISPATCH ADDRESS
LDR A3,A12 1TH PARAMETER
*
EJECT
*
INH . =1
CF A15,GETBLK GET MONITOR BLOCK
LDR A1,A4 ADDRESS BLOCK
CF A15,SETIME SET TIMER
STRPAR DATA TIMACT TIMER ENTRY AFTER TIME OUT
DATA 0 TIMER VALUE IN 0,1 SEC
ENB
IFT CPU852=1
LD A1,TIMSAV RESTORE REGISTERS
LD A2,TIMSAV-2
LD A3,TIMSAV-4
XIF
IFT CPU852=0
ML 3,TIMSAV-4 RESTORE REGISTERS
XIF
RTN A14
*
* RETURN AFTER TIME OUT
*
TIMACT EQU *
LDKL A5,TTBX25 TTAB-ADDRESS
LD A2,2,A1 GET DISPATCH ADDRESS
LDK A3,0
CF A15,ACTOT ACTIVATE TASK
ABL TDISP
EJECT
*
*
* CANCEL TIMER ROUTINE
*
********************************************
*
* INPUT PARAMETERS:
* A1 = ADDRESS TIMER
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,CANTIM
*
* OUTPUT PARAMETERS:
* A1 = REMAINING TIME
* NO OTHER REGISTERS ARE CHANGED
*
CANTIM EQU *
ST A2,TIMSAV SAVE REGISTERS
ST A3,TIMSAV-2
ST A4,TIMSAV-4
LDR A2,A1 ADDRESS TIMER VALUE
INH
RF(Z) CANTEN NO TIMER SPECIFIED
LDR* A1,A2 GET TIMER VALUE
RF(Z) CANTEN TIMER = 0
C1R A1,A1 GET REMAINING TIME
CMR A2 SET TIMER VALUE 0
LD A3,-2,A2 ADDRESS TIMOUTBLOCK
LD A4,4,A3 ADDRESS ACTIVATIONBLOCK
ST A1,4,A4 SAVE A1
INH . =1
CF A15,FREBLK RELEASE ACTIVATIONBLOCK
*
EJECT
*
CANTEN EQU *
ENB
LD A2,TIMSAV RESTORE REGISTERS
LD A3,TIMSAV-2
LD A4,TIMSAV-4
RTN A14
*
RES 3 SAVE AREA
TIMSAV EQU *-2
QUESAV EQU *-2
EJECT
*
*
* MODULE TO CONTROL THE PROCESSES IN THE DC-TASK
*
********************************************
*
* INPUT PARAMETERS:
* NONE
*
* CALLING SEQUENCE:
* ABL EXITDC
*
* OUTPUT PARAMETERS:
* AT ENTRY OF AN ACTIVATED PROCESS:
* A1 = QUEUE ANCHOR ADDRESS
* A12 = LINE BLOCK ADDRESS
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
EXITDC EQU *
LDK A5,NPRFLG NO PROCESSING MASK
C1R A6,A5 .
*
* GET SAVED LAST SCAN PARAMETERS
*
LD A4,SCHEDC LOGICAL CHANNEL INDEX
LD A7,SCHEDL LINE INDEX
LDKL A14,DCSTAK SET STACK POINTER
LDKL A10,-2 SCAN LOOP-COUNTER
*
EJECT
*
EXIT00 EQU *
LDKL A12,LINTAB GET LINE BLOCK ADDRESS
IFF SYNRLN=1
ADR A12,A7 .
ADR A12,A7 .
XIF
LDR* A12,A12 .
*
* TEST IF LINE CONNECTED
*
LD A13,CMNFLG,A12
RF(Z) EXIT04 NO! CONTINUE WITH NEXT LINE (IF ANY)
*
* TEST IF ONLY STATISTIC FLAG IS SET
*
SUKL A13,STATFL
RF(Z) EXIT04 YES
ADK A4,1 TAKE NEXT LOGICAL CHANNEL
CC A4,NRLC,A12 IS THERE A NEXT ONE ?
RF(L) EXIT10 YES
EXIT04 EQU *
LDKL A4,-1 PRESET FOR NEW LG.CH. OF NEXT LINE
IFF SYNRLN=1
ADK A7,1 UPDATE LINE INDEX
CWK A7,SYNRLN IS THERE A NEXT LINE ?
RF(L) EXIT30 YES
LDK A7,0 START AGAIN WITH FIRST LINE
XIF
ADKL A10,1
RF(Z) EXIT32 END OF SCANNING
RF EXIT30 .
*
EJECT
*
EXIT10 EQU *
CF A14,GTLCAD GET LC-ADM ADDRESS
LDKL A8,OUTPCK PRESET ACTIVATION ADDRESS
LDKL A9,1 PRESET PROCESS INDICATION
LD A3,NRPNDT,A12 CHECK NR. OF OUTPUT REQUESTS
CWK A3,SYNRTR .
RF(NL) EXIT20 MAXIMUM, SO NO OUTPUT
LDR A1,A12 CHECK RESTART OUTPUT QUEUE
ADK A1,RSTQUE .
LDR* A2,A1 .
RF(NZ) EXIT35 NOT EMPTY
LDR A1,A13 CHECK OUTPUT QUEUE
ADK A1,QUEOUT .
LDR* A2,A1 .
RF(Z) EXIT20 QUEUE IS EMPTY
TM A2,A6
RF(Z) EXIT20 ONLY NO PROCESSING FLAG IS SET
TM A2,A5 TEST IF QUEUE IS BLOCKED
RF(Z) EXIT40 NO, SO PROCESS THIS QUEUE
EXIT20 EQU *
LDKL A8,RHIP PRESET ACTIVATION ADDRESS
LDKL A9,4 PRESET PROCESS INDICATION
LDR A1,A13 CHECK INPUT QUEUE
ADK A1,QUEINP .
LDR* A2,A1 .
RF(Z) EXIT30 QUEUE IS EMPTY
TM A2,A6
RF(Z) EXIT30 ONLY NO PROCESSING FLAG IS SET
TM A2,A5 TEST IF QUEUE IS BLOCKED
RF(Z) EXIT40 NO, SO PROCESS THIS QUEUE
*
EJECT
*
* CHECK IF A COMPLETED SCAN CYCLE IS DONE
*
EXIT30 EQU *
CW A4,SCHEDC
RB(NE) EXIT00 CONTINUE WITH SCANNING
CW A7,SCHEDL
RB(NE) EXIT00 CONTINUE WITH SCANNING
CM DCLEVL SET PROCESS INDICATION
EXIT32 EQU *
LKM EXIT DC-TASK
DATA 3
*
* A NOT EMPTY QUEUE IS FOUND, ACTIVATE THE CONCERNING PROCESS
*
EXIT35 EQU *
LD* A13,LC:TAB,A12 USE LOGICAL CHANNEL 0 FOR RESTART
EXIT40 EQU *
ST A4,SCHEDC SAVE SCAN PARAMETERS
ST A7,SCHEDL .
ST A9,DCLEVL SET PROCESS INDICATION
ABR A8 BRANCH TO THE ROUTINE
*
SCHEDC DATA 0 LOGICAL CHANNEL INDEX
SCHEDL DATA 0 LINE INDEX
EJECT
*
*
* ROUTINE TO RESET A VIRTUAL CIRCUIT
*
********************************************
*
* INPUT PARAMETERS:
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,RSETVC
*
* OUTPUT PARAMETERS:
* NONE
*
RSETVC EQU *
CF A14,SAVE8
CF A14,CLLCAD CLEAR LC-ADM FIELDS
*
* EMPTY INPUT QUEUE
*
CF A14,CLINPQ
*
* COMPLETE EVENTS IN OUTPUT QUEUE
*
LD A1,LCDWT,A13 IS THERE A RELATION WITH AN USER
RF(Z) RSET20 NO
LDKL A3,RSET.RC RETURN CODE
CF A14,CMEVNT
RSET20 EQU *
CF A14,RELOA8
RTN A14
*
EJECT
*
*
* ROUTINE TO EMPTY THE INPUT QUEUE
*
****************************************************
*
* INPUT PARAMETERS:
* A13 = LC-ADM ADDRESS
* A14 = CF STACK POINTER
*
* OUTPUT PARAMETERS:
* NONE
*
CLINPQ EQU *
LDR A1,A13 QUEUE ANCHOR ADDRESS
ADK A1,QUEINP .
LDK A2,NPRFLG SET MASK VALUE
C1R A2,A2 .
ANRS A2,A1 IS QUEUE EMPTY ?
RF(Z) CLINP1 YES
CF A14,DEQUE GET ELEMENT FROM QUEUE
CF A14,RLBUF RELEASE BUFFER
RB CLINPQ
*
CLINP1 EQU *
RTN A14
EJECT
*
*
* ROUTINE TO CLEAR LC-ADM FIELDS
*
********************************************
*
* INPUT PARAMETERS:
* A13 = LC-ADM FIELDS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,CLLCAD
*
* OUTPUT PARAMETERS:
* NONE
* A1 IS CHANGED
*
CLLCAD EQU *
LDK A1,0
ST A1,FLAGS,A13 CLEAR FIELDS IN LC-ADM
ST A1,SYSBUF-2,A13
SC A1,PS,A13 .
SC A1,PR,A13 .
SC A1,RPS,A13 .
SC A1,SLWE,A13 .
SC A1,RLWE,A13
SC A1,NRNUBF,A13
RTN A14
EJECT
*
*
* THIS ROUTINE CALCULATES FROM THE FILE CODE OF THE
* LINE ECB THE LINE BLOCK ADDRESS
*
********************************************
*
* INPUT PARAMETERS:
* A8 = LINE ECB ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,GTLBA
*
* OUTPUT PARAMETERS:
* A12 = LINE BLOCK ADDRESS
*
GTLBA EQU *
IFT SYNRLN=1
LD A12,LINTAB LINE BLOCK ADDRESS
XIF
IFF SYNRLN=1
STR A1,A14 SAVE REGISTER
LDKL A1,LINTAB TABLE WITH LINE BLOCK ADDRESS
GTLB00 EQU *
LDR* A12,A1 LINE BLOCK ADDRESS
LD A2,FILCOD,A12 CHECK FILE CODE
CC A2,ECBFC,A8 .
RF(E) GTLB10 CORRECT ONE
ADK A1,2
RB GTLB00 TRY NEXT LINE BLOCK
*
GTLB10 EQU *
LDR* A1,A14 RESTORE REGISTER
XIF
RTN A14 RETURN
EJECT
*
*
* ROUTINE TO GET LC-ADM ADDRESS
*
********************************************
*
* INPUT PARAMETERS:
* A4 = LOGICAL CHANNEL NUMBER
* A12 = LINE BLOCK ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,GTLCAD
*
* OUTPUT PARAMETERS:
* A13 = LC-ADM ADDRESS
*
GTLCAD EQU *
LDR A13,A4 PREPARE FOR INDEXING
ADR A13,A13 .
AD A13,LC:TAB,A12 LC-ADM ADDRESS
LDR* A13,A13 GET LC-ADM ADDRESS
RTN A14
EJECT
*
*
* MODULE TO ACTIVATE A CONFIRMATION TIMER
*
********************************************
*
* INPUT PARAMTERS:
* A8 = TIME-OUT VALUE
* A13 = LC-ADM ADDRESS
* A14 = CALL FUNCTION STACK POINTER
*
* CALLING SEQUENCE:
* CF A14,STTIM
*
* OUTPUT PARAMETERS:
* A1 AND A4 CHANGED
*
STTIM EQU *
LDKL A4,TIMOUT ACTIVATION LABEL
CF A14,STRTIM START TIMER
ST A4,TIMADR,A13 SAVE TIMER ADDRESS
LDK A1,CONTIM SET TIMER STARTED FLAG
ORS A1,FLAGS,A13 .
RTN A14
EJECT
*
*
*
* GET BUFFER ROUTINE
*
****************************************************
*
* INPUT PARAMETERS:
* A14 = CF STACK POINTER
*
* OUTPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* NO OTHER REGISTERS ARE CHANGED
*
GTBUF EQU *
STR A1,A14 SAVE A1
LD A2,BUFANC BUFFER CHAIN ANCHOR
RF(Z) GTBU10 NO BUFFER AVAILABLE
LDR* A1,A2 GET BUFFER FROM CHAIN
ST A1,BUFANC .
ADK A2,2 START OF BUFFER
LDR* A1,A14 RELOAD A1
RTN A14
GTBU10 EQU *
HLT ERROR
*
EJECT
*
*
* RELEASE BUFFER ROUTINE
*
*****************************************************
*
* INPUT PARAMETERS:
* A2 = BUFFER ADDRESS
* A14 = CF STACK POINTER
*
* OUTPUT PARAMETERS:
* NONE
*
RLBUF EQU *
STR A1,A14 SAVE A1
LD A1,BUFANC BUFFER POOL ANCHOR
SUK A2,2
STR A1,A2 PUT BUFFER..
ST A2,BUFANC FIRST IN QUEUE
LDR* A1,A14 RELOAD A1
RTN A14
*
END