|
|
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: 199774 (0x30c5e)
Notes: pts_type(SC)
Names: »DRDC25.SC«
└─⟦13e5fd45a⟧ Bits:30009699 Philips computer tape "600507"
└─⟦this⟧ »TOSSWORK/DRDC25.SC«
└─⟦bc20f3abf⟧ Bits:30009670 Philips computer tape "600126"
└─⟦this⟧ »TOSSWORK/DRDC25.SC«
IDENT DRDC25 REL 11.0 81-01-26 870105041100
*
*********************************************
*
* PHILIPS TERMINAL SYSTEM PTS
*
* DRDC25: DRIVER FOR DATA COMMUNICATION
* HDLC: ASYNCHRONOUS RESPONSE MODE OR
* ASYNCHRONOUS BALANCED MODE
* (OPTIONS 2,8,11 AND 12)
*
*
*********************************************
*
*
*
EJECT
ENTRY DC25ON
ENTRY DW2501
ENTRY DW2502
ENTRY DW2503
ENTRY DW2504
ENTRY IH2501
ENTRY IH2502
ENTRY IH2503
ENTRY IH2505
ENTRY IH2507
ENTRY IH2504
ENTRY IH2506
ENTRY IH2508
ENTRY PARTA1 PROTOCOL TABLE,LINE 1
ENTRY CURTRP CURRENT TRACE POINTER
ENTRY TRASTR TRACE START ADDRESS
ENTRY TRAEND TRACE END ADDRESS
ENTRY CURLGP CURRENT LOGG POINTER
ENTRY LOGSTR LOGG START ADDRESS
ENTRY LOGEND LOGG END ADDRESS
ENTRY DW2500
*
EXTRN DWTST
EXTRN DWTECB
EXTRN DWTTAB TTAB ADDRESS
EXTRN DWTWAT WAIT OR ACTIVATE INDICATOR
EXTRN SAVE8
EXTRN RETUR8
EXTRN TENDIO
EXTRN TDISP
EXTRN SETIME
EXTRN INTSAV INTERRUPT SAVE ADDRESS
*
***** BUFFER EQUATES *****
RECAD EQU 0 POINTER TO BUFFER ADDRESS FIELD
RECCT EQU 1 POINTER TO BUFFER CONTROL FIELD
*
EJECT
*
*****************************************
*
* SYSGEN PARAMETERS
*
*
X:A EQU 1
SYNRLN EQU X:A NUMBER OF LINES
*
X:B EQU 0 CHLC 6836 OR CULC 6856(HLCUZ)
HLCUZ EQU X:B 0=6836,1=6856
*
X:C EQU /02
REDV01 EQU X:C REC.UNIT ADDR. LINE 1
*
IFF SYNRLN=1
X:D EQU /22
REDV02 EQU X:D REC.UNIT ADDR. LINE 2
*
IFF SYNRLN=2
X:E EQU /04
REDV03 EQU X:E REC.UNIT ADDR. LINE 3
*
IFF SYNRLN=3
X:F EQU /05
REDV04 EQU X:F REC.UNIT ADDR. LINE 4
XIF
*
EJECT
*
IFT HLCUZ=0
SEDV01 EQU REDV01+/10 TRANS.UNIT ADDR. LINE 1
IFF SYNRLN=1
SEDV02 EQU REDV02+/10 TRANS.UNIT ADDR. LINE 2
IFF SYNRLN=2
SEDV03 EQU REDV03+/10 TRANS.UNIT ADDR. LINE 3
IFF SYNRLN=3
SEDV04 EQU REDV04+/10 TRANS.UNIT ADDR. LINE 4
XIF
*
IFT HLCUZ=1
SEDV01 EQU REDV01+/01 TRANS.UNIT ADDR. LINE 1
IFF SYNRLN=1
SEDV02 EQU REDV02+/01 TRANS.UNIT ADDR. LINE 2
IFF SYNRLN=2
SEDV03 EQU REDV03+/01 TRANS.UNIT ADDR. LINE 3
IFF SYNRLN=3
SEDV04 EQU REDV04+/01 TRANS.UNIT ADDR. LINE 4
XIF
*
X:G EQU 1 LINE ACCESS PROCEDURE
ABM EQU X:G 0=ARM,1=ABM
*
X:H EQU 0 PROGRAMMED CHANNEL OR IOP
IOPCON EQU X:H 0=PC,1=IOP
*
X:I EQU 0
STAT EQU X:I STATISTICAL COUNTERS
*
CPU852 EQU 1 0=EXTENDED INSTRUCTION SET
*
EJECT
*
SYUBNR EQU 2 NR OF INP.BUFFERS IN OPEN/CLOSE
SYIORY EQU 100 NUMBER OF I/O ERROR RETRIES
SYNRY EQU 7 NR OF RETRIES (TIME OUT AND I/O)
SYNRTR EQU 2 NR OF OUTPUT REQUESTS ALLOWED
SYTRWN EQU SYNRTR TRANSMIT WINDOW
SYNRRC EQU 2 NR OF INPUT REQUESTS ALLOWED
SYADCM EQU 1 COMMAND ADDRESS
SYADRS EQU 3 RESPONSE ADDRESS
SYTIM0 EQU 200 TIME OUT VALUE TIMER STATE 0: SILENT TIMER
SYTIM1 EQU 40 TIME OUT VALUE TIMER STATE 1: WAIT FOR F
SYTIM2 EQU 40 TIME OUT VALUE TIMER STATE 2: WAIT FOR ACK
SYTIM3 EQU 40 TIME OUT VALUE TIMER STATE 3: CHECK BUSY
SYTIM4 EQU 40 TIME OUT VALUE TIMER STATE 4: RESET
*
NRLEC1 EQU SYNRRC+SYUBNR+2 NUMBER OF LINE ECB'S ON DRIVER INTERFACE
NRLEC2 EQU SYNRRC+SYNRTR+2 NUMBER OF LINE ECB'S FOR SAVING DWT INFO
NRLECB EQU NRLEC1+NRLEC2 TOTAL NUMBER OF LINE ECB'S
*
TRACE EQU 0 LOGGING OF RECEIVED AND TRANSM. I-FRAMES
LOG EQU 0 LOGGING OF RECEIVED AND TRANSM. HDLC-FRAMES
LOOP EQU 0 LOOPTEST INDICATION
IOPPC EQU 0 IOP+PC USED ?
IOLOG EQU 0 I/O-INSTRUCTIONS LOGGED ?
*
***** LINE FILECODES FOR I/O-HANDLER INTERFACE *****
*
FC:LN1 EQU /60 FILECODE LINE 1
IFF SYNRLN=1
FC:LN2 EQU /61 FILECODE LINE 2
IFF SYNRLN=2
FC:LN3 EQU /62 FILECODE LINE 3
IFF SYNRLN=3
FC:LN4 EQU /63 FILECODE LINE 4
XIF
IFT SYNRLN=4
LINE4 EQU 1
LINE3 EQU 1
LINE2 EQU 1
XIF
IFT SYNRLN=3
LINE4 EQU 0
LINE3 EQU 1
LINE2 EQU 1
XIF
IFT SYNRLN=2
LINE4 EQU 0
LINE3 EQU 0
LINE2 EQU 1
XIF
IFT SYNRLN=1
LINE4 EQU 0
LINE3 EQU 0
LINE2 EQU 0
XIF
*
IFT TRACE=0
CURTRP EQU 0 DUMMY
TRASTR EQU 0 DUMMY
TRAEND EQU 0 DUMMY
XIF
*
IFT LOG=0
CURLGP EQU 0 DUMMY
LOGSTR EQU 0 DUMMY
LOGEND EQU 0 DUMMY
XIF
*
* DUMMY ENTRY
*
DW2500 EQU *
*
* CONNECTION STATE VARIABLES (CSV)
*
DISCNT EQU 0 DISCONNECTED
CNTA EQU 1 CONNECTING, LOCAL STATION HAS STARTED
A CONNECT SEQUENCE BY SENDING
A SARM OR SABM
IFT ABM=0
CNTB EQU 2 CONNECTING, LOCAL STATION IS WAITING
FOR RESPONSE ON HIS TRANSMITTED SARM AFTRE
HAVING RECEIVED A SARM FROM THE REMOTE
STATION.
CNTC EQU 3 CONNECTING, LOCAL STATION HAS RECEIVED
UA ON HIS TRANSMITTED SARM AND IS NOW
WAITING FOR THE REMOTE SARM
XIF
CNT EQU 4 CONNECTED
CNTRES EQU 5 CONNECTED, DUE TO AN ERROR A
CMDR/FRMR IS TRANSMITTED, THE
LOCAL STATION IS WAITING FOR
REMOTE RESET REQUEST
CNTRS1 EQU 6 RESETTING, LOCAL STATION IS WAITING
FOR THE RESPONSE ON HIS SARM
DISCF EQU 7 DISCONNECTING, A LOCAL DISCONNECT
REQUEST IS RECEIVED, THE LOCAL
STATION IS WAITING FOR AN F-BIT
BEFORE TRANSMITTING A DISC.
DISCA EQU 8 DISCONNECTING, LOCAL STATION HAS
STARTED THE DISCONNECT SEQUENCE
BY SENDING A DISCONNECT.
IFT ABM=0
DISCB EQU 9 DISCONNECTING, LOCAL STATION IS
WAITING FOR RESPONSE ON HIS
TRANSMITTED DISC, AFTER
HAVING RECEIVED A DISC
FROM THE REMOTE STATION
DISCC EQU 10 DISCONNECTING, LOCAL STATION IS WAITING
FOR RESPONSE ON HIS DISC, AFTER HAVING
RECEIVED A DISC FROM THE REMOTE
STATION DURING CONNECTING
DISCD EQU 11 DISCONNECTING, LOCAL STATION IS WAITING
FOR RESPONSE ON HIS DISC, AFTER HAVING
RECEIVED A DISC FROM THE REMOTE
STATION DURING DISCONNECTING
DISCE EQU 12 DISCONNECTING, LOCAL STATION IS WAITING
FOR REMOTE DISC, AFTER HAVING RECEIVED
A RESPONSE ON HIS TRANSMITTED DISC
XIF
EJECT
*
***** NOTIFICATIONS *****
*
*
*
NTAC EQU 0 ACCEPTED CALL
NTNC EQU 1 NOT CONNECTED
NTQF EQU 2 TOO MANY CALL'S
NTTL EQU 3 LENGTH ERROR
NTND EQU 4 SECOND CONNECT NOT ACCEPTED
NTPCI EQU 5 INCORRECT NR OF PROTOCOL BUFFERS
NTNA EQU 6
IIFRA EQU 7 I-FRAME ACCEPTED
NTQE EQU 9 QUEUEING ERROR
NTDC EQU 10 DISCONNECTED
NTPR EQU 11 INCORRECT PRIORITY
NTLD EQU 12 LOCAL DISCONNECT
NTRD EQU 13 REMOTE DISCONNECT
NTTO EQU 14 DEFINIT TIME OUT
NTCU EQU /8010 UNKNOWN DEVICE ADDRESS
NTRRST EQU 17 RECEIVER RESET
NTTRST EQU 18 TRANSMITTER RESET
*
*
***** ECB EQUATES *****
*
*
*
ECBFC EQU 0
ECBBA EQU 2
ECBRL EQU 4
ECBEL EQU 6
ECBRC EQU 8
ECBPR EQU 10
*
*
*
***** FOR GENERAL USE *****
*
*
*
ITYP EQU /11
STYP EQU /1F
UTYP EQU /FF
INPER1 EQU 0 I/O-HANDLER ERROR CONTROL WORD MASK
*** BIT 15: MODEM NOT OPERABLE
*** BIT 14: THROUGHPUT ERROR
*** BIT 13: CRC ERROR
*** BIT 12: INCORRECT LENGTH
*** BIT 10:
*** BIT 10: CARRIER OFF
*
*
EJECT
*
***** ALLOWED LKM ORDERS *****
*
*
*
READ EQU /02
WRITE EQU /06
CONN EQU /21
DISCN EQU /22
STATR EQU /2D
*
*
*
***** LEVEL 1 ALLOWED ORDERS *****
*
*
*
ORCNL1 EQU 1 LEVEL 1 CONNECT REQUEST
ORINL1 EQU 2 LEVEL 1 INPUT REQUEST
OROTL1 EQU 3 LEVEL 1 OUTPUT REQUEST
ORDIL1 EQU 4 LEVEL 1 DISCONNECT REQUEST
ORTIL1 EQU 5 TIMER ORDER
*
*
*
***** DWT DISPLACEMENTS *****
*
*
*
DWTPT EQU /18
*
IFT STAT=1
EJECT
***** STATISTICAL COUNTER IDENTIFICATIONS
*
* RECEIVER STATISTICS
*
R.I EQU 0 I-FRAMES
R.RR EQU 2 RR-FRAMES
R.RNR EQU 4 RNR-FRAMES
R.REJ EQU 6 REJ-FRAMES
R.DISC EQU 8 DISC-FRAMES
R.SABM EQU 10 SABM/SARM-FRAMES
R.DM EQU 12 DM-FRAMES
R.UA EQU 14 UA-FRAMES
R.FRMR EQU 16 FRMR/CMDR-FRAMES
R.INV EQU 18 INVALID FRAMES
*
* TRANSMITTER STATISTICS
*
T.I EQU 20 I-FRAMES
T.RR EQU 22 RR-FRAMES
T.RNR EQU 24 RNR-FRAMES
T.REJ EQU 26 REJ-FRAMES
T.DISC EQU 28 DISC-FRAMES
T.SABM EQU 30 SABM/SARM-FRAMES
T.DM EQU 32 DM-FRAMES
T.UA EQU 34 UA-FRAMES
T.FRMR EQU 36 FRMR/CMDR-FRAMES
T.TOUT EQU 38 NUMBER OF TIME OUTS
T.RETRY EQU 40 NUMBER OF RETRIES
STALNG EQU T.RETRY+2 LENGTH OF STATISTIC AREA
XIF
*
* GENERAL LIST OF EQUATES TO BE USED WITH THE HDLC PROTOCOL
*
I EQU /00 I-FRAME
IP EQU /10 I-FRAME + P-BIT
RR EQU /01 RR-FRAME
RRP EQU /11 RR-FRAME + P-BIT
RRF EQU RRP RR-FRAME + F-BIT
RNR EQU /05 RNR-FRAME
RNRP EQU /15 RNR-FRAME + P-BIT
RNRF EQU RNRP RNR-FRAME + F-BIT
REJ EQU /09 REJ-FRAME
REJF EQU /19 REJ-FRAME + F-BIT
REJP EQU REJF REJ-FRAME + P-BIT
SABM EQU /2F SABM-FRAME
SABMP EQU /3F SABM-FRAME + P-BIT
SARM EQU /0F SARM-FRAME
SARMP EQU /1F SARM-FRAME+ P-BIT
DISC EQU /43 DISC-FRAME
DISCP EQU /53 DISC-FRAME + P-BIT
UA EQU /63 UA-FRAME
UAF EQU /73 UA-FRAME + F-BIT
DM EQU /0F DM-FRAME
DMF EQU /1F DM-FRAME + F-BIT
FRMR EQU /87 FRMR/CMDR-FRAME
FRMRF EQU /97 FRMR/CMDR-FRAME + F-BIT
NVT EQU /FF ANY OTHER NOT SPECIFIED FRAME
*
*
EJECT
*
*
* PROTOCOL INITIATION PART
*
*********************************************
*
* INITIATED ARE - PARAMETER TABLE
* - PROTOCOL STATUS
* - ALL QUEUES
* - STATISTICAL COUNTERS
* - CONNECT BUFFER POINTER
*
* CALLING SEQUENCE:
* CF A15,DC25ON
*
DC25ON EQU *
LD A7,TABPAR NUMBER OF ENTRIES IN TABLE
ST A7,NUM .
INI2 EQU *
LD A6,TABPAR,A7 GET PARAMETER TABLE ADDRESS
LDR A2,A7 GET LINE INDEX
SRL A2,1
LD A7,TABPAR-2,A7 GET FILECODE FOR I/O-HANDLER
LD A5,STB,A6 STACK BASE
CF A5,INIT INITIATE PARAMETERS
LD A7,NUM
SUK A7,4
ST A7,NUM
RB(P) INI2 YES
RTN A15
NUM EQU *
DATA 0 WORK AREA
EJECT
*
*
* LKM REQUEST HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A6 = DWT-ADDRESS
* A7 = ORDER
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABI DRDC25
*
DATA -2
DRDC25 DATA PCALL ENTRYPOINT FOR APPLICATION
PCALL EQU *
INH USE OF THIS LEVEL IS PROHIBITTED
DURING THIS TIME
*
* A5 WILL BE SET TO STACKBASE PER FILE CODE
* IN THE PARAMETER TABLE
* A6 WILL BE SET TO THE PARAMETER TABLE ADDRESS
LD A2,DWTTAB,A6 GET TTAB FROM DWT
LD A4,DWTWAT,A6 GET WAIT ON ACTIVATION IND FROM DWT
LDKL A3,/8000 SET DWT STATUS INACTIVE
ST A3,DWTST,A6 .
LD A1,DWTPT,A6 GET ADDR PARAMETER TABLE PARTA1
ST A6,DWTAD,A1 SAVE DWT ADDR IN PARTA1
LDR A6,A1 A6 IS NOW ADDRESS PARTA1
LDK A3,1
ST A3,BUSY,A6 SET PROTOCOL HANDLER BUSY
LD A5,STB,A6 GET OWN STACK BASE ADDRESS
LDR A1,A8 SAVE ECB ADDRESS
CF A5,GLECB GET ADDR. LINE ECB IN A8
STR A2,A8 SAVE DWTTAB
ST A4,2,A8 SAVE DWTWAT
LD A2,ECBPR,A1 GET PRIORITY FROM ECB
ST A2,4,A8 SAVE PRIORITY
ST A8,ECBPR,A1 SAVE LINE ECB ADDRESS IN ECB
LDR A8,A1 RESET ORIGINAL ECB ADDRESS
ENB
LDK A4,0 RESET POINTER TO ORDER
PCALL1 EQU *
LD A1,ORDTAB,A4 GET ALLOWED ORDER
RF(N) INVAL LAST ORDER DETECTED
CWR A1,A7 EQUAL TO RECEIVED ORDER ?
ABI(E) ORDER,A4 GO TO ORDER PROCESS
ADK A4,2 UPDATE POINTER
RB PCALL1 TRY AGAIN
*
* TABLE WITH ENTRIES BELONGING TO ORDER
*
ORDER DATA CREAD IF CALL READ RECEIVED
DATA CREAD IF CALL WRITE RECEIVED
DATA CCONN IF CALL CONNECT RECEIVED
DATA CDISC IF CALL DISCONNECT RECEIVED
IFT STAT=1
DATA CSTAT IF CALL FOR STATISTICS RECEIVED
XIF
*
INVAL EQU *
LDKL A1,NTNA NOTIFICATION NO ACCEPTED
CF A5,Q.ERDY QUEUE EVENT READY
RF EXT
*
ORDTAB EQU * LIST OF ORDERS
* ISSUED BY A HIGHER LEVEL
DATA READ
DATA WRITE
DATA CONN
DATA DISCN
IFT STAT=1
DATA STATR
XIF
DATA -1
EJECT
*
*
* INPUT REQUEST HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A4 = INDEX IN ORDER TABLE
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL CREAD
*
* THE APPLICATION DRIVEN READ
* THIS PART WILL PERFORM THE REQUIRED ACTIONS FOR THE CALL READ
*
CREAD EQU *
LDK A1,NTNC PRESET ERROR CODE
LD A2,PROTST,A6 GET PROTOCOL STATUS
RF(NZ) CREADC READ NOT ALLOWED
LD A1,LECBRC,A6 PRESET RETURN CODE
LD A2,DRIVST,A6 LD DRIVER STATUS
RF(NZ) CREADC DRIVER NOT CONNECTED
LDK A1,NTTL PRESET ERR. CODE LENGTH ERROR
LD A2,ECBRL,A8 GET REQUESTED LENGHTH
LDR A4,A4 IS IT A WRITE REQUEST ?
RF(NZ) CWRITE YES
CW A2,SYLEN,A6 LENGTH CORRECT ?
RF(NE) CREADC INCORRECT LENGTH
LD A3,Q1IRAD,A6 INPUT REQUEST QUE ADDRESS
LDK A1,NTQF PRESET RETURN CODE
LD A4,NN,A3 ROOM FOR SAVING ?
RF(NP) CREADC INPUT QUEUE FULL
CF A5,PUTBUF YES ? SAVE !
LD A7,ECBBA,A8 GET BUFFER ADDRESS
CF A5,L1INPQ INPUT REQUEST WITH IMPL. GLECB(A7)
LD A1,SINS,A6 GET SINK STATE
CWK A1,1 SINK STATE BUSY ?
RF(NE) EXT NO !
IM SINS,A6 SET SINS =2
LD A1,PART1,A6
ANKL A1,/FBFF RESET IN.RNR IF SET
ORKL A1,/0200 SET IN.REJ
ST A1,PART1,A6
TRANST EQU *
CF A5,TRAN CALL TRANSMITTER
EXT EQU *
ABL EXIT
CREADC EQU *
RF CONFL1 ERROR RETURN
EJECT
*
*
* OUTPUT REQUEST HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL CWRITE
*
* THE APPLICATION DRIVEN WRITE
*
CWRITE EQU *
CW A2,SYLEN,A6 MAXIMUM LENGTH ?
RF(G) CONFL1 TOO LARGE
SUK A2,2
RF(NP) CONFL1 LENGTH ERROR
LDKL A1,NTQF PRESET ERROR CODE
LD A2,SC,A6
AD A2,AC,A6
ADR A2,A2
LD A3,Q1SCAD,A6 IS SEND QUEUE FULL ?
SU A2,NN,A3 .
RF(Z) CONFL1 YES, WRITE NOT ALLOWED
CF A5,PUTBUF SAVE ELEMENT IN QUE
IFT TRACE=1
CF A5,LOGTRC TRACE
XIF
IM SC,A6 INCREMENT SEND COUNT
RB TRANST START TRANSMITTER
EJECT
*
*
* CONNECT REQUEST HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL CCONN
*
CCONN EQU *
LDK A1,NTND PRESET RETURN CODE 'NOT DISCONNECTED'
LD A2,PROTST,A6
RF(NN) CONFL1 STATUS NOT DISCONNECT
* INITIATE PROTOCOL
LDK A1,DISCNT
ST A1,CSV,A6 SET CSV = DISCONNECTED
CM SINS,A6 SET RECEIVER NOT BUSY
LDKL A1,-1
ST A1,TST,A6 TIMER STATE
CM SC,A6 RESET SEND COUNTER
CM AC,A6 RESET ACKNOWLEDGE COUNT
CM OUTSTP,A6 NO P-BIT OUTSTANDING
CM PART1,A6 NO TRANSMITTER ACTIONS
CF A5,RESTR RESET TRANSMITTER VARIABLES
CF A5,RESREC RESET RECEIVER VARIABLES
LDKL A1,0-SYIORY
ST A1,INPRY,A6 INIT RETRY COUNT
LD A2,ECBBA,A8 USER BLOCK ADDRESS
LDK A1,NTPCI PRESET ERROR CODE
LDR* A2,A2 NUMBER OF CONNECT BUFFERS
CWK A2,SYUBNR
RF(NE) CONFL1 INCORRECT
LD A2,ECBRL,A8 GET REQUESTED LENGTH
ST A2,SYLEN,A6 SAVE IT AS INPUT LENGTH
LDK A1,1
ST A1,PROTST,A6 PROTOCOL STATUS 'CONNECT BUSY'
LD A1,INBUF,A6
ST A1,CONBUF,A6 INITIATE AREA FOR SAVING THE CONNECT BUFFERS
* AT DISCONNECT TIME
ST A8,CONECB,A6 SAVE USER ECB
CF A5,GLECB GET ELEMENT FROM LECB QUEUE
CF A5,L1CONN REQUEST LEVEL 1 CONNECT
LD A4,ECBRC,A8 CHECK RETURN CODE
RB(NP) EXT DEVICE IS KNOWN
CF A5,PLECB RETURN ELEMENT TO ECB QUEUE
LDKL A1,NTCU RC := DEVICE ADDRESS UNKNOWN
CCONFL EQU *
LDKL A2,-1
ST A2,PROTST,A6 PROTOCOL STATUS DISCONNECTED
LD A8,CONECB,A6 GET USER ECB
CONFL1 EQU *
CF A5,Q.ERDY PUT IN EVENT READY QUE
RB EXT
EJECT
*
*
* DISCONNECT REQUEST HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL CDISC
*
CDISC EQU *
LDK A1,NTPCI PRESET ERROR CODE
LD A2,ECBBA,A8 GET BUFFER ADDRESS
LDR* A2,A2 GET NUMBER OF BUFFERS
CWK A2,SYUBNR EQUAL TO SYSGEN DEFINED?
RF(NE) CDISC3 NO!
LDK A1,NTNC PRESET RETURN CODE
LD A2,PROTST,A6 GET PROTOCOL STATUS
LDKL A3,-1
ST A3,PROTST,A6 AND SET DISCONNECTED
LDR A2,A2 SET COND REG.
RF(N) CDISC3 WAS ALREADY DISCONNCTED
ST A8,DISECB,A6 SAVE ECB ADDRESS
LDK A1,NTLD SET LOCAL DISC DURING OPEN
ST A1,LECBRC,A6 SAVE RETURN CODE
LDR A2,A2 GET ORIGINAL PROTOCOL STATUS
RF(Z) CDISC4 OPEN READY
LD A8,CONECB,A6 GET CONNECT ECB
LD A2,DRIVST,A6 GET DRIVER STATUS
RF(NZ) CDISC1 DRIVER STOPPED OR NOT CONNECTED
CM* ECBBA,A8
CF A5,Q.ERDY RETURN CONN.REQ.WITHOU BUFFERS
CF A5,L1STPQ STOP DRIVER WITH IMPL. LECB REQUEST
RF CDISC2
CDISC1 EQU *
CF A5,Q.ERDY RETURN CONN.REQ.WITH BUFFERS
CDISC2 EQU *
ABL EXT FINISHED
*
CDISC3 EQU *
CM* ECBBA,A8 INDICATION: NO BUFFERS RETURNED!
RB CONFL1
*
CDISC4 EQU *
LD A2,DRIVST,A6 GET DRIVER STATUS
RB(P) CDISC2 STATUS STOPPED
ADK A2,1 TEST IF STATUS DISCONNECTED(-1)
ABL(Z) DISRD3 DRIVER ALREADY DISCONNECTED,RETURN
LD A1,OUTSTP,A6 CHECK OUTST.P IS SET
RF(NZ) CDISC6 YES ! FRAMES OUTSTANDING
LDKL A1,/0820 SET IN.DISC AND IN.P
ORS A1,PART1,A6 IN PARAMETER TABLE
LDK A1,DISCA CSV BECOMES DISCONNECTING
RF CDISC7
*
CDISC6 EQU *
LDK A1,DISCF CSV BECOMES DISCONNECTING, WAIT FOR F
CDISC7 EQU *
ST A1,CSV,A6
ABL TRANST START TRANSMITTER
IFT STAT=1
EJECT
*
*
* STATISTICS REQUEST HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL CSTAT
*
CSTAT EQU *
LDK A1,STALNG LENGTH OF COUNTER AREA
CW A1,ECBRL,A8 COMPARE WITH USER AREA
RF(L) CSTAT1
LD A1,ECBRL,A8 TAKE SMALLEST ONE
CSTAT1 EQU *
ANKL A1,/FFFE MAKE LENGTH EVEN
ST A1,ECBEL,A8 TO USER ECB
LD A2,STASTR,A6 START ADDRESS COUNTER AREA
LD A3,ECBBA,A8 START ADDRESS USER AREA
CSTAT2 EQU *
SUK A1,2 REDUCE LENGTH COUNTER
RF(N) CSTAT3 READY
LDR* A4,A2 COPY COUNTER
STR A4,A3 .
CMR A2 CLEAR COUNTER
ADK A2,2 UPDATE POINTERS
ADK A3,2 .
RB CSTAT2 NEXT ONE
*
CSTAT3 EQU *
LDK A1,NTAC SET RETURN CODE
RB CONFL1 EXIT
XIF
EJECT
*
*
* INTERRUPT DRIVEN SCHEDULER
*
*********************************************
*
* INPUT PARAMETERS:
* A1 OR A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ACTIVATION ON LABEL IDREQT BY TIME-OUT ROUTINE
* ABL IDREQ FOR REAL INTERRUPTS
*
***** ENTRY FOR ALL TIME OUT REQUESTS ACTIVATED BY TIMER
*
IDREQT EQU * INTERRUPT DRIVEN TIMER ENTRY
LDR A8,A1 ECB ADDRESS IN CORRECT REGISTER
***** ENTRY FOR ALL I/O-HANDLER INTERRUPT REQUESTS
*
*
IDREQ EQU *
INH
LDR* A1,A8 GET FILE CODE
LD A2,TABPAR GET TABLE LENGTH
IDR1 EQU *
CC A1,TABPAR-1,A2 DOES THE FILECODE MATCH
RF(E) IDR2 YES
SUK A2,4 TAKE NEXT ENTRY
RB IDR1
IDR2 EQU *
LD A6,TABPAR,A2 GET PARAMETER TABLE ADDRESS
LD A5,NEWSTB,A6 GET STACK BASE
LD A1,BUSY,A6 CHECK IF LEVEL BUSY
RF(Z) IDNOTB
LD A3,Q1COAD,A6 ADDRESS OF INTERRUPT REQUEST QUE
CF A5,PUTBUF
EXRAI EQU * RETURN AFTER INTERRUPT
ENB
ABL TDISP
*
*
IDNOTB EQU *
LD A5,STB,A6 MAKE CF STACK IN PARTA1
LDK A1,1
ST A1,BUSY,A6 SET LEVEL BUSY
EJECT
**** ENTRY FOR THE INTERRUPT REQUEST HANDLER
* AND THE EXIT REQUEST HANDLER WHEN THE INTERRUPT
* REQUEST QUEUE WAS NOT EMPTY.
*
IDCONT EQU *
ENB
LD A7,ECBPR,A8 GET ORDER
RF(P) IDCN2
IDCN1 EQU *
HLT ILLEGAL ORDER
IDCN2 EQU *
CWK A7,5
RB(G) IDCN1 ILLEGAL ORDER
LDKL A1,/302F
ANS A1,ECBRC,A8 RESET NOT RELEVANT BITS IN RETURNCODE
RF(Z) IDCN3 NO ERROR
LDKL A1,/8000
ORS A1,ECBRC,A8 BIT 0=1: DRIVER ERROR
IDCN3 EQU *
LDR A2,A8 SAVE ECB ADDRESS
ADR A7,A7 MAKE ORDER A POINTER IN ENTRY TABLE
ABI IDRY,A7 START SELECTED PART
*
IDRY EQU *-2
DATA CONRDY ORDER=1, CONNECT READY
DATA RECRDY ORDER=2, INPUT READY
DATA OUTRDY ORDER=3, OUTPUT READY
DATA DISRDY ORDER=4, DISCONNECT READY
DATA TIMRDY ORDER=5, TIMER OVERFLOW
EJECT
*
*
* CONNECT REQUEST READY INTERRUPT HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL CON.RDY
*
CON.RDY EQU * RETURN ADDRESS AFTER CON.READY
CF A5,PLECB STORE LECB IN QUEUE
LD A1,ECBRC,A8 GET CONDITION REGISTER
RF(NZ) CCONN6 CONNECTION FAILED
LDK A1,0
ST A1,DRIVST,A6 DRIVER STATUS CONNECTED
LD A1,PROTST,A6
RF(NN) CCONN5 NO DISCONNECT REQUEST BY PROTOCOL
CF A5,L1STPQ STOP DRIVER WITH IMPL. LECB REQUEST
CF A5,L1DISQ DISCONN DRIVER IMPL. LECB REQUEST
ABL EXIT READY
CCONN5 EQU *
LD A8,CONECB,A6 USER ECB ADDRESS
LD A2,ECBBA,A8 GET BLOCK ADDRESS
LDR* A1,A2 GET NUMBER OF BUFFERS
CCONN4 EQU *
LD A7,2,A2
CF A5,L1INPQ INPUT DRIVER WITH IMPL. ECB REQUEST
ADK A2,2
SUK A1,1 DECREMENT NUMB OF BUFFERS
RB(NZ) CCONN4
*
* NOW INITIALIZE PARAMETER TABLE
*
LDK A1,CNTA
ST A1,CSV,A6 SET CSV TO CONNECTING
LDKL A1,/1020 SET IN.SABM/IN.SARM , IN.P
ORS A1,PART1,A6 IN PARAMETER TABLE
ABL TRANST START TRANSMITTER
CCONN6 EQU *
LD A2,PROTST,A6
ABL(NN) CCONFL CONNECTION FAILED
ABL DISRD5 RETURN CONNECT BUFS IN DISC-REQ.
EJECT
*
*
* OUTPUT REQUEST READY INTERRUPT HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL OUT.RDY
*
*
*
OUT.RDY EQU *
LDK A1,0
ST A1,OUTPEN,A6 RESET OUTPUT PENDING
CF A5,PLECB STORE LINE ECB IN QUEUE
LD A1,DRIVST,A6 GET DRIVER STATUS
RF(P) OTSTP DRIVER STOPPED
RF(NN) OUTEX RESTART TRANSMITTER
* PROTOCOL HAS SET A REQUEST TO STOP THE DRIVER
* BECAUSE OF A REMOTE DISCONNECT
* MAYBE THE UA OR DM FRAME HAS TO BE SENT FIRST
***
LD A1,PART1,A6 THE PROTOCOL REQUESTED A STOP AFTER
* UA OR DM FRAME IS SENT
ANKL A1,/6000 CHECK IF THE FRAME IS ALREADY SENT
RF(NZ) OUTEX UA OR DM FRME MUST BE SENT
LDK A1,NTRD ALREADY SENT, R.C. IS REMOTE DISC
ST A1,LECBRC,A6 SAVE ERROR CODE
CF A5,L1STPQ STOP DRIVER IMPL. ECB REQ.
*
OTSTP EQU *
LD A1,INP.CNT,A6 INPUT PENDING ?
RF(NZ) OUTEX NOT READY
CF A5,L1DISQ DISC. DRIVER IMPL. ECB REQ.
OUTEX EQU *
ABL TRANST FINISHED
*
*
DQEV EQU *
LDR A7,A3 SAVE QUE ADDRESS
DQEV1 EQU *
LD A4,NF,A3 NUMBER OF ELEMENTS
RF(Z) DQEND QUE EMPTY
CF A5,GETBUF GET ELEMENT
LD A1,LECBRC,A6 GET RETURN CODE
CF A5,Q.ERDY PUT IN EVENT READY QURE
LDR A3,A7 RELOAD QUE ADDRESS
RB DQEV1 GET NEXT ELEMNT
DQEND EQU *
RTN A5 FINISHED
DQOUT EQU * DEQUEUE ALL OUTPUT REQUESTS
* AND STORE INT EVENT READY QUEUE
LD A3,Q1ACAD,A6 ACKNOWLEDGE QUEUE
CF A5,DQEV
LD A3,Q1SCAD,A6 SEND QUEUE
CF A5,DQEV
RTN A5
EJECT
*
*
* INPUT READY INTERRUPT HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABLREC.RDY
*
*
*
REC.RDY EQU *
LDR A2,A8 SAVE ECB ADDRESS
LDKL A1,-1
ADS A1,INP.CNT,A6 DECREMENT PENDING INPUT REQUEST
LD A1,DRIVST,A6 GET DRIVER STATUS
RF(P) INP.STP STATUS STOPPED
RF(N) INPST1 PROTOCOL REQUESTED A STOP LINE
* WHEN OUT PUT IS READY (UA OR DM)
LD A1,ECBRC,A8 GET RETURN CODE
RF(NZ) INPER INPUT ERROR HARDWARE
LDKL A1,0-SYIORY NEG NR OF RETRIS
ST A1,INPRY,A6 RESET RETRY COUNT
*
CF A5,REC CALL RECEIVER
RB OUTEX START TRAN AND EXIT
*
*
*
INPER EQU *
LD A3,ECBRL,A8 GET TIMER READY SIMULATION FLAG
RF(Z) INP100 INPUT SIMULATED BY TIMER
IM INPRY,A6 INCREMENT INPUT RETRY COUNT
RF(Z) INPIRR IRRECOVERABLE ERROR
ANKL A1,INPER1 INPUT ERROR MASK
RF(NZ) INPIRR IRRECOVERABLE
EJECT
*
*** SIMULATE INPUT REQUEST VIA TIMER REQUEST
*
IM INPCNT,A6 INCREASE INPUT COUNT
CM ECBRL,A8 SET INPUT SIMULATION FLAG
*** ECBRL IS NOT ZERO WHEN NORMAL INPUT IS READY
LDR A1,A8 A1=PARAMETER FOR TIMER(ECB ADDRESS)
CF A15,SETIME START TIMER
DATA IDREQT ENTRY AT TIMER OVERFLOW RETURN
DATA 1 TIMER VALUE = 1/10 SECONDS
ENB
RF EXIT READY
*** RESTART INPUT REQUEST AFTER TIMER READY
*
INP100 EQU *
CF A5,L1INP LEVEL 1 INPUT REQUEST
RF EXIT EXIT
*
EJECT
*
INPIRR EQU * IRRECOVERABLE ERROR
ST A1,LECBRC,A6 SAVE RETURN CODE
CF A5,L1STPQ STOP DRIVER IMPL. ECB REQ.
INPSTP EQU *
LD A1,OUTPEN,A6 NUMBER OF OUTP REQ PEND.
AD A1,INP.CNT,A6 AD INP REQ PENDING
RF(NZ) INPST1 NO DISCONNECT AT THIS MOMENT
CF A5,L1DISQ DISC DRIVER IMPL ECB REQ.
INPST1 EQU *
LDR A8,A2 RELOAD ORIGINAL LINE ECB ADDR.
CF A5,PLECB STORE LINE ECB IN QUEUE
CF A5,DQINEV RETURN INPUT EVENT TO CALLER
RF EXIT EXIT
DQINEV EQU *
LD A4,ECBBA,A8 GET GET BUFFER ADDRESS
LD A3,Q1IRAD,A6 GET INPUT REQUEST QUE ADDRESS
LD A1,NF,A3 REQUESTS PENDING ?
RF(Z) DQINEM QUE EMPTY
CF A5,GETBUF GET ELEMENT
ST A4,ECBBA,A8 SAVE BUFFER ADDRESS
LD A1,LECBRC,A6 GET RETURN CODE
CF A5,QERDY INPUT EVENT READY
RTN A5
*
*
DQINEM EQU *
ST* A4,CONBUF,A6 SAVE CONNECT BUFFER
LDK A4,2 INCREMENT POINTER ADDRESS
ADS A4,CONBUF,A6
RTN A5 FINISHED
*
*
EJECT
*
*
* DISCONNECT READY INTERRUPT HANDLER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL DIS.RDY
*
DIS.RDY EQU *
CF A5,PLECB STORE LECB IN QUEUE
CF A5,DQOUT RETURN ALL OUTPUT REQUESTS
LD A1,PROTST,A6 GET PROTOCOL STATUS
RF(Z) EXIT EXIT
RF(P) DISOP COMPLETE OPEN REQUEST
DISRD5 EQU *
LD A8,DISECB,A6 GET DISCONNECT ECB
DISRD3 EQU *
LDK A1,0 PRESET RETURNCODE
ST A1,LECBRC,A6 SAVE IN PARTA1
DISRD2 EQU *
LD A2,ECBBA,A8 GET ADDRESS OF USER BLOCK
LD A1,CONBUF,A6 EXTRACT POINTER
LDR A4,A1
SU A4,INBUF,A6
SRL A4,1
STR A4,A2
RF(Z) DISRD0
DISRD1 EQU *
ADK A2,2 STORE POINTER
SUK A1,2 SET POINTER TO CORRECT ADDRESS
LDR* A7,A1 GET BUFFER ADDRESS
STR A7,A2 SAVE IN USER BLOCK
SUK A4,1
RB(NZ) DISRD1
DISRD0 EQU *
LD A1,LECBRC,A6 GET RETURN CODE
CF A5,Q.ERDY QUE EVENT READY
RF EXIT EXIT
DISOP EQU *
LD A8,CONECB,A6 GET CONNECT ECB
LDKL A1,-1
ST A1,PROTST,A6 SET PROTOCOL STATUS DISCONNECT
RB DISRD2 COMPLETE
EJECT
*
*
* LEVEL 2 END I/O AND EXIT ROUTINE
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL EXIT
*
*
*
*
EXIT EQU *
*
ENB
LD A3,Q1ERAD,A6 EVENT READY QUE
LD A4,NF,A3 NUMB OF FREE ELEMENTS
RF(Z) EX150 SET NOT BUSY BEFORE RETURN A.I.
LD A4,DWTAD,A6 GET ADDRESS OF DWT
*** TEST IF DWT IS JUST UPDATED BY THE MONITOR (TIO)
LD A1,DWTST,A4
RF(NN) EX200 YES!
CF A5,GETBUF REQUEST ELEMENT
LDR A1,A8 SAVE ECB ADDRESS
LD A8,ECBPR,A1 GET ADDRESS SAVE AREA LIECB
LDR* A2,A8 GET TTAB ADDRESS
ST A2,DWTTAB,A4 SAVE IN DWTTAB OF DWT
LD A2,2,A8 GET WAIT OR ACTIVATION INDICATION
ST A2,DWTWAT,A4 SAVE IN DWTWAT OF DWT
LD A2,4,A8 GET PRIORITY FIELD
ST A2,ECBPR,A1 STORE IN ORIGINAL ECB
CF A5,PLECB RELEASE LINE ECB
LDR A8,A1 RELOAD ORIGINAL ECB IN A8
ST A8,DWTECB,A4 STORE ECB IN DWT
LD A1,ECBRC,A8 GET RETURN CODE
LDR A2,A6 SAVE A6
LDR A6,A4 A6=DWT-ADDRESS
CF A15,TENDIO COMPLETE EVENT
LDR A6,A2 RESTORE A6
LD A5,STB,A6 RELOAD STACK BASE
RB EXIT TRY NEXT
EX150 EQU *
LD A3,Q1COAD,A6 ADDRESS INTERRUPT REQUEST QUEUE
INH
LD A4,NF,A3 QUEUE EMPTY??
RF(Z) EX200 NO INTERRUPT REQUEST PENDING
CF A5,GETBUF GET REQUEST FROM QUEUE
ABL IDCONT ACTIVATE REQUEST
EX200 EQU *
CM BUSY,A6 SET PROTOCOL NOT BUSY
ABL TDISP RETURN AFTER INTERRUPT
*
*
Q.ERDY EQU *
*
* ENTRY PARAMETERS:
* A1=RETURN CODE
* A6=PARAMETER TABLE ADDRESS
* A8=ECB ADDRESS
*
ST A1,ECBRC,A8 SAVE RETURN CODE
LD A3,Q1ERAD,A6 EVENT READY QUE
CF A5,PUTBUF SAVE IN QUE
RTN A5 RETURN TO CALLER
EJECT
*
*
* TIMEOUT ROUTINE
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* ABL TIM.RDY
*
TIM.RDY EQU *
LD A1,TIMADR,A6 TIMER ALREADY STOPPED ?
RB(Z) EXIT YES
LDR* A1,A1 NO REAL TIMEOUT ?
RB(N) EXIT YES
IFT STAT=1
LDK A1,T.TOUT
CF A5,COUNT COUNT # OF TIMEOUT SITUATIONS
XIF
CM TIMADR,A6 SET TIMER BLOCK NOT PENDING
LD A1,CSV,A6 LOAD CSV FOR USE FURTHERON
LD A2,NRT,A6 GET NUMBER OF RETRIES
SUK A2,SYNRY COMPARE WITH ALLOWED MAXIMUM
RF(N) TOTC1 MAXIMUM NOT REACHED
LDK A2,DISCNT
ST A2,CSV,A6 CSV BECOMES DISCONNECTED
LDK A1,NTTO RETURN CODE FOR DEFINIT TIME OUT
ST A1,LECBRC,A6 SAVE IT
CF A5,L1STPQ STOP DRIVER IMPL. ECB REQ.
RF TOTC13 READY
* SELECT ON CSV
TOTC1 EQU *
CWK A1,DISCNT
RF(NE) TOTC2
* CSV IS DISCONNECTED
LDKL A2,-1
ST A2,TST,A6 TIMER STATE := -1
RF TOTC13 READY
*
TOTC2 EQU *
CWK A1,CNT CSV = CONNECTED ?
RF(NE) TOTC3 NO
* CSV IS CONNECTED
* SELECT ON TIMER STATE
LD A1,TST,A6
RF(Z) TOTC10 TST = 0
SUK A1,1
RF(Z) TOTC8 TST = 1
SUK A1,1
RF(Z) TOTC9 TST = 2
RF TOTC10 TST = 3
*
*
TOTC3 EQU *
CWK A1,CNTRES CSV = CONNECTED, WAIT FOR RESET ?
RF(NE) TOTC4 NO
* CSV IS CONNECTED, WAIT FOR RESETTING
LDKL A2,/8000
ORS A2,PART1,A6 SET IN.FRMR/IN.CMDR IN PART 1
IM NRT,A6 INCREMENT # OF RETRIES
RF TOTC13
*
TOTC4 EQU *
*** TEST IF WAIT FOR RESPONSE ON RESET
CWK A1,CNTRS1
RF(E) TOTC5A
*
* ALL OTHER CSV'S
LDK A2,1
CW A2,TST,A6
RF(E) TOTC5 TST .EQ. 1
ST A2,TST,A6 TST := 1
RF TOTC12
*
TOTC5 EQU *
CWK A1,CNT
RF(G) TOTC6 CSV IS DISCONNECTING
TOTC5A EQU *
LDKL A1,/1020 SET IN.SABM/IN.SARM AND IN.P
RF TOTC7
*
TOTC6 EQU *
*** TEST IF WAIT FOR F-BIT BEFORE DISCONNECT
SUK A1,DISCF
RF(NZ) TOTC6A
LDK A1,DISCA
ST A1,CSV,A6
TOTC6A EQU *
LDKL A1,/820 SET IN.DISC AND IN.P
TOTC7 EQU *
IM NRT,A6 INCREMENT # OF RETRIES
RF TOTC11
*
TOTC8 EQU *
IM NRT,A6 INCREMENT # OF RETRIES
TOTC9 EQU *
LD A2,LNR,A6 GET LAST RECEIVED NR
ST A2,VS,A6 SET NEW V(S)
CF A5,DACQSC DEQUEUE AC AND QUEUE SC
TOTC10 EQU *
LDK A1,/20
TOTC11 EQU *
ORS A1,PART1,A6 SET IN.P
CM TST,A6 TST := 0
TOTC12 EQU *
CF A5,STATIM START TIMER
TOTC13 EQU *
ABL TRANST
EJECT
*
*
* RECEIVER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* CF A5,REC
*
*
* THE PROTOCOL RECEIVER MODULE WILL PERFORM ALL NECESSARY
* ACTIONS TO PROCESS THE CONTENTS OF A RECEIVED FRAME.
*
* THIS PART IS MAINLY TABLE DRIVEN.
*
* THE FOLLOWING TABLES ARE USED:
* VALTAB: THIS TABLE CONTAINS ALL FRAME TYPES THAT
* ARE KNOWN (ALLOWED) IN THE PROTOCOL.
* ALL NON RELEVANT BITS ARE SET TO ZERO.
* EXCEPT THE P-BIT.
* THE TABLE KNOWS COMMANDS AND RESPONSES.
*
* ALTAB: THIS TABLE CONTAINS THE RELATION BETWEEN
* A FRAME TYPE AND, FOR THIS FRAME TYPE
* APPLICABLE ENTRY INTO THE RECEIVER TABLE.
*
* PROTAB: THIS TABLE IS THE MAIN TABLE OF THE
* PROTICOL RECEIVER MODULE.
* DEPENDING ON THE STATE(CVS) AND THE
* GIVEN ENTRYPOINT(BY ALTAB) THIS TABLE
* GIVES THE NEW STATE AND EVENTUALLY FURTHER
* REQUIRED ACTIONS(INDICATED BY ONE NUMBER)
*
* ACTAB: THIS TABLE CONVERTS THE NUMBER AS GIVEN
* BY PROTAB TO A LIST OF ACTIONS WHICH IS
* GIVEN TO EXACT (THE ACTIONS EXECUTER)
*
EJECT
*
*
* TABLE DEFINITION OF VALTAB
*
VALTLO FORM 8,8 DEFINE WORD LAY-OUT OF VALTAB
*
VALTAB EQU * FRAME VALIDITY TABLE
IVAL EQU *-VALTAB IVAL POINTER IN VALTAB
DATA SVAL-IVAL-2 NUMBER OF TYPES ALLOWED
VALTLO NVT,I ONLY I-COMMAND VALID
VALTLO NVT,IP WITH P-BIT SET
SVAL EQU *-VALTAB SVAL POINTER IN VALTAB
DATA UVAL-SVAL-2 NUMBER OF TYPES ALLOWED
IFT ABM=1
VALTLO RR,RR RR-COMMANDS AND RESPONSES
VALTLO RRF,RRP WITH P OR F-BIT
VALTLO RNR,RNR RNR-COMMANDS AND RESPONSES
VALTLO RNRF,RNRP WITH P OR F-BIT
VALTLO REJ,REJ REJ-COMMANDS AND RESPONSES
VALTLO REJF,REJP WITH P OR F-BIT
XIF
IFT ABM=0
VALTLO RR,NVT RR-RESPONSE
VALTLO RRF,NVT WITH F-BIT
VALTLO RNR,NVT RNR-RESPONSE
VALTLO RNRF,NVT WITH F-BIT
VALTLO REJ,NVT REJ-RESPONSE
VALTLO REJF,NVT WITH F-BIT
XIF
UVAL EQU *-VALTAB UVAL POINTER IN VALTAB
DATA ENUVAL-UVAL-2 NUMBER OR TYPES ALLOWED
IFT ABM=1
VALTLO NVT,SABM ONLY SABM-COMMANDS
VALTLO NVT,SABMP WITH P-BIT SET
XIF
IFT ABM=0
VALTLO NVT,SARM ONLY SARM-COMMANDS
VALTLO NVT,SARMP WITH P-BIT SET
XIF
VALTLO NVT,DISC ONLY DISC-COMMANDS
VALTLO NVT,DISCP WITH P-BIT SET
VALTLO UA,NVT ONLY UA-RESPONSES
VALTLO UAF,NVT WITH F-BIT SET
VALTLO DM,NVT ONLY DM-RESPONSES
VALTLO DMF,NVT WITH F-BIT SET
VALTLO FRMR,NVT ONLY FRMR/CMDR-RESPONSES
VALTLO FRMRF,NVT WITH F-BIT SET
ENUVAL EQU *-VALTAB END OF TABLE INDICATOR
EJECT
*
* LIST OF EQU'S FOR ALTAB
*
F0 EQU /0 NVT
F1 EQU /1 SABM/SARM
F2 EQU /2 DISC
F3 EQU /3 DM
F4 EQU /4 DM + F-BIT
F5 EQU /5 UA
F6 EQU /6 UA + F-BIT
F7 EQU /7 FRMR/CMDR
F8 EQU /8 FRMR/CMDR + F-BIT
F9 EQU /9 S - RESPONSE
FA EQU /A S - COMMAND
FB EQU /B S + P-BIT
FC EQU /C S + F-BIT
FD EQU /D I
FE EQU /E I + P-BIT
FF EQU /F ***SPARE***
*
*
* TABLE DEFINITION OF ALTAB
*
ALTLO FORM 8,8 WORD LAY-OUT OF ALTAB
*
ALTAB EQU * START OF TABLE
*
ALTLO /0,/0 NOT ALLOWED ENTRY
ALTLO F0,FD NVT / I
ALTLO F0,FE NVT / IP
ALTLO /0,/0 NOT ALLOWED ENTRY
ALTLO F9,FA S / S
ALTLO FC,FB SF / SP
ALTLO F9,FA S / S
ALTLO FC,FB SF / SP
ALTLO F9,FA S / S
ALTLO FC,FB SF / SP
ALTLO /0,/0 NOT ALLOWED ENTRY
ALTLO F0,F1 NVT / SABM (SARM)
ALTLO F0,F1 NVT / SABMP (SARMP)
ALTLO F0,F2 NVT / DISC
ALTLO F0,F2 NVT / DISCP
ALTLO F5,F0 UA / NVT
ALTLO F6,F0 UAF / NVT
ALTLO F3,F0 DM / NVT
ALTLO F4,F0 DMF / NVT
ALTLO F7,F0 FRMR / NVT (CMDR)
ALTLO F8,F0 FRMRF / NVT (CMDRF)
EJECT
*
* TABLE WITH ADDRESSES FOR PROTAB
* THE VALUE OF CSV IS USED AS INDEX
*
CSVTAB EQU *
DATA CSV:0
DATA CSV:1
IFT ABM=0
DATA CSV:2
DATA CSV:3
XIF
IFT ABM=1
DATA 0
DATA 0
XIF
DATA CSV:4
DATA CSV:5
DATA CSV:6
DATA CSV:7
DATA CSV:8
IFT ABM=0
DATA CSV:9
DATA CSV:A
DATA CSV:B
DATA CSV:C
XIF
IFT ABM=1
DATA 0
DATA 0
DATA 0
DATA 0
XIF
*
* TABLE DEFINITION OF PROTAB
*
* EACH BYTE OF PROTAB CONTAINS THE NEW CSV AND A POINTER IN
* ACTAB TO THE ACTIONLIST TO BE PERFORMED.
*
*
* LIST OF FRAME TYPES
*
* F0 = NVT
* F1 = SABM/SARM
* F2 = DISC
* F3 = DM
* F4 = DM + F-BIT
* F5 = UA
* F6 = UA + F-BIT
* F7 = FRMR/CMDR
* F8 = FRMR/CMDR + F-BIT
* F9 = S - RESPONSE
* FA = S - COMMAND
* FB = S + P-BIT
* FC = S + F-BIT
* FD = I
* FE = I + P-BIT
* FF = ***SPARE***
*
EJECT
IFT ABM=0
*
PROTAB EQU *
*
* F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
*
CSV:0 DATA /0027,/A516,/1600,/0000,/0000,/0000,/0000,/0000
CSV:1 DATA /1024,/1010,/0B10,/3F10,/1610,/1010,/1010,/1010
CSV:2 DATA /2020,/2020,/2620,/4F20,/2620,/2020,/2020,/2020
CSV:3 DATA /3044,/A530,/3030,/3030,/3030,/3030,/3030,/3030
CSV:4 DATA /4069,/9598,/9862,/6262,/624D,/4D4D,/4D4C,/4C40
CSV:5 DATA /5041,/9550,/5050,/5050,/5050,/5353,/5053,/5350
CSV:6 DATA /6061,/6060,/9860,/4F60,/6260,/6060,/6060,/6060
CSV:7 DATA /7074,/707F,/8F70,/7070,/707E,/7E7E,/8A7E,/7E70
CSV:8 DATA /8080,/B480,/CF80,/CF80,/8080,/8080,/8080,/8080
CSV:9 DATA /9090,/9490,/0B90,/0B90,/9090,/9090,/9090,/9090
CSV:A DATA /A0A0,/A4A0,/0BA0,/0BA0,/A0A0,/A0A0,/A0A0,/A0A0
CSV:B DATA /B0B0,/B4B0,/0BB0,/0BB0,/B0B0,/B0B0,/B0B0,/B0B0
CSV:C DATA /C0C0,/04C0,/C0C0,/C0C0,/C0C0,/C0C0,/C0C0,/C0C0
*
XIF
*
IFT ABM=1
*
PROTAB EQU *
*
* F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF
*
CSV:0 DATA /0046,/0619,/1900,/0000,/0000,/0000,/0000,/0000
CSV:1 DATA /1046,/0810,/0710,/4110,/1010,/1010,/1010,/1010
CSV:2 DATA /0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:3 DATA /0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:4 DATA /4042,/0663,/6340,/4063,/634E,/4E4E,/4E4D,/4D4D
CSV:5 DATA /5046,/0663,/6350,/5063,/6350,/5555,/5055,/5550
CSV:6 DATA /6062,/0A60,/0760,/4160,/6360,/6060,/6060,/6060
CSV:7 DATA /7070,/0670,/7070,/7070,/707F,/7F7F,/8B7F,/7F70
CSV:8 DATA /8080,/8680,/0780,/0780,/8080,/8080,/8080,/8080
CSV:9 DATA /0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:A DATA /0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:B DATA /0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
CSV:C DATA /0000,/0000,/0000,/0000,/0000,/0000,/0000,/0000
*
XIF
*
EJECT
*
* TABLE DEFINITION OF ACTAB
*
ACTLO FORM 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
*
* EACH BIT REPRESENTS AN ACTION AS FOLLOWS:
*
* 0 = RESET RECEIVER VARIABLES
* 1 = RESET TRANSMITTER VARIABLES
* 2 = SET IN.FRMR (IN.CMDR)
* 3 = SET IN.UA
* 4 = SET IN.DM
* 5 = SET IN.SABM (IN.SARM)
* 6 = SET IN.DISC
* 7 = SET IN.RNR
* 8 = SET IN.P
* 9 = SC := AC := 0
* A = REMOTE DISCONNECT
* B = PROCESS N(R)
* C = PROCESS P/F
* D = PROCESS I-FRAME
* E = PROCESS S-FRAME
* F = RECEIVER TIMER CONTROL
*
IFT ABM=0
*
ACTAB EQU * START OF TABLE
* FIELD 0 1 2 3 4 5 6 7 8 9 A B C D E F
*
ACT0 ACTLO 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ACT1 ACTLO 1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1
ACT2 ACTLO 0,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1
ACT3 ACTLO 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
ACT4 ACTLO 0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1
ACT5 ACTLO 0,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1
ACT6 ACTLO 0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1
ACT7 ACTLO 0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,1
ACT8 ACTLO 0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,1
ACT9 ACTLO 1,1,0,1,0,1,0,0,1,1,0,0,1,0,0,1
ACTA ACTLO 0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1
ACTB ACTLO 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
ACTC ACTLO 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1
ACTD ACTLO 0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1
ACTE ACTLO 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1
ACTF ACTLO 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1
*
XIF
*
IFT ABM=1
*
*
ACTAB EQU * START OF TABLE
* FIELD 0 1 2 3 4 5 6 7 8 9 A B C D E F
*
ACT0 ACTLO 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ACT1 ACTLO 1,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1
ACT2 ACTLO 1,1,0,1,0,0,0,0,0,1,0,0,1,0,0,1
ACT3 ACTLO 1,1,0,0,0,1,0,0,1,1,0,0,1,0,0,1
ACT4 ACTLO 1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,1
ACT5 ACTLO 0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1
ACT6 ACTLO 0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1
ACT7 ACTLO 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
ACT8 ACTLO 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1
ACT9 ACTLO 0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1
ACTA ACTLO 0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1
ACTB ACTLO 0,0,0,0,0,0,1,0,1,0,0,1,1,0,0,1
ACTC ACTLO 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ACTD ACTLO 0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1
ACTE ACTLO 0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1
ACTF ACTLO 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1
*
XIF
*
EJECT
*
* PROGRAM PART FOR CHECKING THE ADDRESS
* THIS PART WILL PERFORM THE CHECK BASED ON THE LAPB
* SPECIFICATION OF CCITT
*
REC EQU *
CM NEWNR,A6
CF A5,PLECB STORE LINE ECB IN QUEUE
IFT LOG=1
LDKL A4,/5200
CF A5,LOGFR LOG INCOMING FRAME
XIF
LD A7,ECBBA,A8 GET THE ACTUAL BUFFER ADDRESS
LD A1,ECBEL,A8 SAVE LENGTH
ST A7,BUFAD,A6 SAVE INPUTBUFFERADDRESS
ST A1,BUFLEN,A6 SAVE LENGTH
LD A1,RECCT,A7
ST A1,RECCF,A6 SAVE RECEIVED CONTROL FIELD
LC A1,RECAD,A7 GET ADDRESS
CC A1,RCMDAD,A6 COMPARE WITH COMMAND ADDRESS
RF(E) CMD IF EQUAL IT'S A COMMAND
CC A1,RRSPAD,A6 MAY BE A RESPONSE
RF(E) RSP SURE
IFT STAT=1
LDK A1,R.INV
CF A5,COUNT COUNT # OF INVALID FRAMES
XIF
REC2 EQU *
LD A7,BUFAD,A6 GET BUFFERADDRESS
CF A5,L1INPQ INPUT REQUEST IMPL ECB
RTN A5 READY
*
*
CMD EQU *
LDK A1,1 SET REC.CMD INDICATOR
RF DETFT GOTO : DETERMINE FRAME TYPE
RSP EQU *
SUR A1,A1 RESET REC.CMD INDICATOR
*
* NOW THE ADDRESS VALIDITY CHECK IF FINISHED
* IF CORRECT THE PROGRAMM WILL CONTINUE WITH DETFT WITH
* EXIT PARAMETER : A1=1 IF COMMAND RECEIVED
* A1=0 IF RESPONSE RECEIVED
* IF THE ADRRESS IS NOT RECOGNIZED THE BUFFER WILL BE RETURNED TO
* THE RECEIVE BUFFER QUEUE WITHOUT ANY FURTHER PROCESSING
* A DISTINCTION MUST BE MADE BETWEEN THE FOLLOWING FRAME TYPES
* I-FRAMES ,S-FRAMES ,U-FRAMES
* WITH THIS INFORMATION THE PROGRAM WILL CONTINUE WITH A CHECK
* OF THE VALIDITY.
*
DETFT EQU *
ST A1,REC.CMD,A6 SAVE CMD/RSP INDICATOR
IFT LOOP=1
LDK A1,1
SUS A1,REC.CMD,A6
LD A1,REC.CMD,A6
XIF
LD A4,ECBEL,A8 GET LENGTH OF RECEIVED FRAME
CM IIF,A6 CLEAR ILLEGAL I-FIELD INDICATION
LD A3,RECCF,A6 GET CONTROL FIELD
LDK A2,/1 GET MASK FOR I-FRAME
ANR A2,A3 MASK CONTROL FIELD
RF(NZ) CHKSU IF NOT ZERO THEN NOT I-FRAME
ANK A3,ITYP SCRATCH BITS NOT RELEVANT
LDK A2,IVAL GET POINTER IN VALIDITY TABLE
RF CHKVAL CHECK VALIDITY OF I-FRAME
EJECT
*
CHKSU EQU * CHECK IF S OR U-FRAME
LDK A2,/2 MASK FOR S-FRAME
ANR A2,A3 MASK CONTROL FIELD
RF(NZ) CHKU NOT S-FRAME BUT U-FRAME
CWK A4,2 CHECK RECEIVED LENGTH S-FRAME
RF(E) SLENOK OK
IM IIF,A6 SET ILLEGAL I-FIELD INDICATION
SLENOK EQU *
ANK A3,STYP SCRATCH BITS NOT RELEVANT
LDK A2,SVAL GET POINTER IN VALIDITY TABLE
RF CHKVAL CHECK VALIDITY OF S-FRAME
*
CHKU EQU * CHECK U-FRAME
CWK A4,2 CHECK RECEIVED LENGTH U-FRAME
RF(E) ULENOK OK
CWK A4,5 MAY BE IT IS A CMDR/FRMR
RF(NE) IULEN ILLEGAL I-FIELD
LDR A2,A3 CHECK FRAME TYPE
ANK A2,/EF REMOVE P/F-BIT
CWK A2,FRMR .
RF(E) ULENOK IT IS CMDR/FRMR
IULEN EQU * ILLEGAL I-FIELD
IM IIF,A6 SET INDICATION
ULENOK EQU *
ANK A3,UTYP SCRATCH BITS NOT RELEVANT
LDK A2,UVAL GET POINTER IN VALIDITY TABLE
* AND GO TO CHKVAL
EJECT
*
* THIS PART OF THE FRAME TYPE DETERMINATION IS COMMON USED FOR
* 0 .U AND S-FRAME VALIDITY CHECK
* THE CHECK IS PERFORMED WITH THE AID OF THE FRAME TYPE VALIDITY
* TABLE : VALTAB
* EXPECTED PARAMETERS : A2 = POINTER TO APPLICABLE PART OF TABLE
* A3 = CONTROL FIELD WITH NON-RELEVANT
* BITS SCRATCHED TO ZERO
*
* NOTE: NON-RELEVANT BITS ARE THE BITS THAT DO NOT GIVE ANY
* INFORMATION ABOUT THE FRAME TYPE SUCH AS : COUNTERS
*
CHKVAL EQU *
LD A4,VALTAB,A2 GET TABLE PART LENGHT
ADR A2,A1 POINT TO COMMAND OR RESPONSE
CHKV1 EQU *
ADK A2,2 POINT TO NEXT WORD
CC A3,VALTAB,A2 COMPARE WITH GIVEN TYPE
RF(E) FOUND FRAME TYPE FOUND VALID
SUK A4,2 NOT YET FOUND
RB(P) CHKV1 TRY AGAIN
SUR A2,A2 WILL NEVER BE FOUND = NVT !
CM IIF,A6 THIS FIELD CAN NOW BE RESET
FOUND EQU *
LD A3,IIF,A6
RF(Z) CHKV2 NO ILLEGAL I-FIELD
LDK A2,0 SET FRAME TYPE ON NVT
CHKV2 EQU *
ST A2,IDFT,A6 SAVE FT IDENTIFIER
IFT STAT=1
LDK A1,R.INV
LDR A4,A2
RF(Z) UPDCNT
* UPDATE STATISTICS FOR U-FRAMES
SUK A4,UVAL
RF(N) UPDEND NO U-FRAME
LDK A1,R.SABM PRESET INDEX FOR COUNTER-ID.
SUK A4,6
RF(N) UPDCNT SABM/SARM-FRAME RECEIVED
LDK A1,R.DISC
SUK A4,4
RF(N) UPDCNT DISC-FRAME RECEIVED
LDK A1,R.UA
SUK A4,4
RF(N) UPDCNT UA-FRAME RECEIVED
LDK A1,R.DM
SUK A4,4
RF(N) UPDCNT DM-FRAME RECEIVED
LDK A1,R.FRMR CMDR/FRMR-FRAME RECEIVED
UPDCNT EQU *
CF A5,COUNT UPDATE COUNTER
UPDEND EQU *
XIF
SUR A1,A1
LC A1,ALTAB,A2 GET CORRESPONDING TABLE ENTRY
EJECT
*
* PROCAL WILL PERFORM THE FOLLOWING ACTIONS:
* - THE POINTER IN A1 WILL BE UPDATED TO LET IT CORRESPOND TO
* THE ACTUAL CSV
* - WITH THE AID OF THAT POINTER THE APPROPRIATE STATE AND
* ACTION LIST WILL BE EXTRACTED OUTOF PROTAB
*
PROCAL EQU *
LD A2,CSV,A6 GET STATION CONNECTION STATE
*** TEST IF NVT
LDR A1,A1
RF(NZ) PROCA8 NO!
*** PREPARE NEW STATUS AND POINTER TO ACTION TABLE IF
*** STATUS IS CONNECTED OR RESETTING
***
*** TEST IF COMMAND
LD A3,REC.CMD,A6
RF(Z) PROCA6 NO!
*** TEST IF CONNECTED OR RESETTING
CWK A2,CNT
RF(E) PROCA4 YES!
CWK A2,CNTRES
RF(NE) PROCA8 NO!
PROCA4 EQU *
LDK A2,CNTRES NEW STATUS
SLL A2,4
IFT ABM=0
ADK A2,3 ADD POINTER TO ACTION TABLE
XIF
IFT ABM=1
ADK A2,4 ADD POINTER TO ACTION TABLE
XIF
RF ACTDEF
*** TEST IF CONNECTED
PROCA6 EQU *
CWK A2,CNT
RF(NE) PROCA8 NO!
LDK A2,CNTRS1 NEW STATUS
SLL A2,4
IFT ABM=0
ADK A2,2 ADD POINTER TO ACTION TABLE
XIF
IFT ABM=1
ADK A2,3 ADD POINTER TO ACTION TABLE
XIF
RF ACTDEF
PROCA8 EQU *
SLL A2,1 PREPARE FOR INDEXING
LD A2,CSVTAB,A2 GET ADDRESS CORRECT PROTAB
ADR A1,A2 AD FRAME TYPE INDICATOR
LCR A2,A1 NOW A1 CONTAINS:
* - NEW STATUS
* - POINTER TO ACTION TABLE
*
*
* ACTDEF WILL SEARCH IN THE ACTION TABLE TO WHAT LIST OF ACTIONS
* A1 POINTS AND WHAT VALUE CSV SHOULD GET NOW.
*
ACTDEF EQU *
LDR A3,A2 SAVE RECEIVED PARAMETER
ANK A2,/F0 EXTRACT CSV
SRL A2,4 PUT ON CORRECT POSITION
ST A2,CSV,A6 GIVE CSV THE NEW VALUE
ANK A3,/F EXTRACT ACTION LIST POINTER
SLL A3,1 MAKE INDEX
LD A2,ACTAB,A3 GET ACTION LIST
ABL(Z) REC2 NO PROCESSING
EJECT
* EXACT WILL EXECUTE THE ACTIONS AS GIVEN IN THE ACTION LIST
* AS RECEIVED FROM ACTDEF.
* THE INPUT PARAMETER (A2) CONTAINS A NUMBER OF BITS AND EACH BIT
* REPRESENTS ONE ACTION TO BE FULFILLED.
* THE LAY-OUT AS GIVEN IN TABLE ACTAB.
*
EXACT EQU * START OF EXECUTION
SUR A1,A1 CLEAR
LDR A3,A2
EXACT1 EQU *
ST A1,SAV1,A6 SAVE FIRST REGISTER
ST A2,SAV2,A6 SAVESECOND REGISTER
ST A3,SAV3,A6 SAVE THIRD REGISTER
*
*
*
ABI(N) EXTAB,A1 BRANCH TO INDICATAD ACTION
EXACR1 EQU * EXACT RETURN POINT AFTER
LD A1,SAV1,A6 RELOAD FIRST REGISTER
LD A3,SAV3,A6 RELOAD THIRD REGISTER
LD A2,SAV2,A6 RELOAD SECOND REGISTER
EXACR2 EQU *
EXECUTION OF THE ACTION
ADK A1,/2 UPDATE POINTER
SLL A2,1 GET NEXT BIT
RB EXACT1
* EXTAB IS THE TABLE THAT CONTAINS ALL ADDRESSES OF THE SEVERAL
* ROUTINES THAT EXECUTE AN ACTION
*
EXTAB EQU *
DATA RCON RESET RECEIVER VARIABLES
DATA RTVAR RESET TRANSMIT VARIABLES
DATA SIFRMR SET IN.FRMR/IN.CMDR
DATA SIUA SET IN.UA
DATA SIDM SET IN.DM
DATA SISABM SET IN.SABM/IN.SARM
DATA SIDISC SET IN.DISC
DATA SIRNR SET IN.RNR
DATA SIP SET IN.P
DATA SCAC0 SC = AC := 0
DATA RDISCR REMOTE DISCONNECT REQUEST
DATA PNR PROCESS N(R)
DATA PPF PROCESS P/F
DATA PIF PROCESS I-FRAME
DATA PSF PROCESS S-FRAME
DATA PRTC RECEIVER TIMER CONTROL
EJECT
* THIS PROGRAM PART WILL RESET ALL RECEIVE VARIABLES
*
RCON EQU * ENTRY
CF A5,RESREC RESET VARIABLES
LDK A1,NTRRST
ST A1,RRSETI,A6 SET RECEIVER RESET INDICATION
RB EXACR1
* THIS PROGRAM PART WILL RESET ALL TRANSMIT VARIABLES
*
RTVAR EQU * ENTRY
CF A5,RESTR RESET TRANSMIT VARIABLES
RB EXACR1 RETURN TO CALLER
* THIS PROGRAM PART WILL SET ONE OR MORE OF THE FOLLOWING
* VARIABLES : IN.FRMR/IN.CMDR , IN.UA , IN.DM ,
* IN.SABM/IN.SARM , IN.DISC , IN.RNR
*
SIDM EQU * SET IN.DM
SIUA EQU * SET IN.UA
LD A1,CSV,A6
RF(NZ) SICONT NOT DISCONNECTED, CONTINUE
SUK A1,2 REQUEST A DRIVER STOP(STATUS=-2)
ST A1,DRIVST,A6 AFTER OUTPUT READY
LD A1,LECBRC,A6
RF(NZ) SICONT RETURNCODE ALREADY SET
LDK A1,NTRD PRESET RETURN CODE
ST A1,LECBRC,A6 REMOTE DISCONNECT
SIFRMR EQU * IF IN.FRMR/IN.CMDR SHOULD BE SET
SISABM EQU * IN.SABM/IN.SARM
SIDISC EQU * IF IN.DISC
SIRNR EQU * IF IN.RNR
SICONT EQU *
SLL A3,2 PUT ON CORRECT POSITION.
LDR A2,A3 SAVE ACTION LIST
ANKL A3,/FC00 MASK NON RELEVANT BITS
ORS A3,PART1,A6 PARAMETER TABLE WORD 1
LDK A1,/E UPDATE POINTER
SLL A2,5 THESE ACTIONS ARE FINISHED NOW
RB EXACR2 RETURN TO CALLER
* WITHOUT RELOAD OF REGISTERS
EJECT
* THIS PROGRAM PART WILL SET THE BOOLEAN VARIABLE IN.P
*
SIP EQU *
LDK A3,/20 PREPARE IN.P SETTING
ORS A3,PART1,A6 SET IN.P
RB EXACR1 RETURN TO CALLER
*
RDISCR EQU *
LD A7,LECBRC,A6
RF(NZ) RDISC1 RETURNCODE ALREADY SET
LDK A7,NTRD PRESET RETURN CODE
ST A7,LECBRC,A6 REMOTE DISCONNECT
RDISC1 EQU *
LD A7,BUFAD,A6 BUFFERADDRESS
CF A5,L1INPQ INPUT REQUEST IMPL ECB REQ.
CF A5,L1STPQ STOP DRIVER IMPL ECB REQ.
RTN A5
EJECT
*
* THIS PART WILL EMPTY AC AND SC DUE TO A RESET.
*
SCAC0 EQU *
LDK A1,NTTRST PRESET RETURN CODE: TRANSM. RESET
LD A4,AC,A6
RF(Z) SCAC2 QUEUE EMPTY
CM AC,A6
SCAC1 EQU *
LD A3,Q1ACAD,A6 GET ACK QUEUE ADDRESS
CF A5,GETBUF GET ELEMENT FROM QUEUE
CF A5,Q.ERDY MOVE IT TO EVENT READY QUEUE
SUK A4,1
RB(NZ) SCAC1 QUEUE IS NOT YET EMPTY
*
SCAC2 EQU *
LD A4,SC,A6
RF(Z) SCAC4 QUEUE EMPTY
CM SC,A6
SCAC3 EQU *
LD A3,Q1SCAD,A6 GET SEND QUEUE ADDRESS
CF A5,GETBUF GET ELEMENT FROM QUEUE
CF A5,Q.ERDY MOVE IT TO EVENT READY QUEUE
SUK A4,1
RB(NZ) SCAC3 QUEUE IS NOT YET EMPTY
*
SCAC4 EQU *
RB EXACR1
EJECT
* THIS PROGRAM PART WILL PERFORM THE P/F PROCESSING.
*
PPF EQU *
LD A4,RECCF,A6 GET CONTROL FIELD
ANK A4,/10 SCRATCH NON RELEVANT BITS
RF(Z) PPFEX NO P/F BIT SET
*
LD A1,RECCMD,A6 GET REC.CMD INDICATOR
RF(NZ) SIF IF COMMAND WITH P-BIT RECEIVED
THEN SET IN.F
RF PPF1
*
SIF EQU *
LDKL A1,/100 PREPARE SETTING IN.F
ORS A1,PART1,A6 SET IN.F
RF PPFEX RETURN TO CALLER
PPF1 EQU *
CM OUTSTP,A6 CLEAR OUTSTP
PPFEX EQU * COMMON RETURNPOINT
LD A2,SAV2,A6 GET RECEIVED ACTIVITY PARAMETER
SLL A2,1 I FRAME TO BE PROCESSED?
ABL(N) EXACR1 YES,L1 INPUT WILL BE STARTED BY I PROCESSING
ABL PIFAC6 NO, CALL L1 AGAIN
EJECT
* THIS PROGRAM PART WILL PERFORM THE N(R) PROCESSING
*
PNR EQU *
LD A7,RECCF,A6 GET CONTROL FIELD
SRL A7,5 SHIFT TO CORRECT POSITION
ANK A7,/7 N(R) OUT OF IT
LDR A4,A7 SAVE RECEIVED N(R) TO STORE LATER IN LNR
SU A7,LNR,A6 SUBTRACT LAST RECEIVED N(R)
ANK A7,/7 MODULO 8 (NOW IT'S "STEP")
ABL(Z) OLDNR NO NEW N(R) RECEIVED !
LD A3,MAXVS,A6 GET N(S) OF HIGHEST TRANSM. FRAM
SU A3,LNR,A6 SUBTRACT LAST REC. CONFIRM.
ANK A3,/7 MODULO 8
CWR A7,A3 COMPARE WITH STEP
RF(G) NRERR TOO HIGH N(R) ERROR !!
IM NEWNR,A6 SET NEWNR ON
ST A4,LNR,A6 STORE RECEIVED N(R)
CW A7,AC,A6 STEP BIGGER THEN WAIT FOR ACK ?
RF(G) PNR2
EJECT
*
*
*
DEQAC EQU *
*
*
* THIS PART PERFORMS THE DEQUE OF THE ACKNOWLEDGE QUE
* THE NUMBER TO BE DEQUEUED IS EQUAL TO "STEP" AND
* GIVEN IN REGISTER A7
*
*
CF A5,DQACER AC=AC-STEP
RF PNREX READY
*
*
DQACER EQU *
LD A3,Q1ACAD,A6 GET ACK QUE ADDRESS
LD A4,NF,A3
RF(Z) DQACEN QUEUE EMPTY
CF A5,GETBUF ELEMENT TO BE DEQUEUED
LD A1,ECBRL,A8
ST A1,ECBEL,A8
LDK A1,0 SET RETURN CODE
CF A5,Q.ERDY MOVE TO EVENT READY QUE
LDKL A4,-1
ADS A4,AC,A6 DECREMENT AC WITH 1
SUK A7,1 MORE TO DEQUEUE?
RB(NZ) DQACER YES,DO NEXT
DQACEN EQU *
RTN A5 READY
EJECT
PNR2 EQU *
*
*
* THIS PART PERFORMS THE DEQUE OF AC AND IF MORE FRAMES
* ARE ACKNOWLEDGED ALSO FROM SC, BOTH TO BE PUT IN
* THE EVENT READY QUEUE.
*
* THE NUMBER TO BE DEQUEUED IS EXPECTED IN A7.
*
*
ST A4,VS,A6 UPDATE SEND STATE VARIABLE
CF A5,DQACER AC=AC-STEP
LDR A7,A7 STEP COMPLETED?
RF(Z) PNREX YES
PNR5 EQU * THE OTHER PART OF STEP MUST BE TAKEN FROM SC
LD A3,Q1SCAD,A6 SC QUEUE
LD A4,NF,A3
RF(Z) PNREX
CF A5,GETBUF GET ELEMENT FROM SC QUEUE
LDK A1,0 RETURN CODE
CF A5,QERDY EVENT READY
LDKL A4,-1
ADS A4,SC,A6 DECREMENT SC
SUK A7,1 STEP READY?
RB(NZ) PNR5 NO, DEQUEUE NEXT FROM SC
CF A5,DACQSC SC=SC+AC
RF PNREX READY
EJECT
*
*
* THIS PART PERFORMS THE DEQUE OF AC AND THE REQUE
* FROM THE ELEMENTS OF THE ACK QUEUE TO THE SEND
* QUEUE FOR REASON OF RETRANSMISSION.
*
*
DACQSC EQU *
LD A3,Q1SCAD,A6
LD A2,NF,A3 PRESET NR OF EL. SC-QUEUE IN A2
DAC100 EQU *
LD A3,Q1ACAD,A6 GET ACK QUE ADDRESS
LD A4,NF,A3 GET NUMB PENDING ELEMENTS
RF(Z) DACEND FINISHED
CF A5,GETBUF GET ELEMENT
LD A3,Q1SCAD,A6 SEND QUE ADDRESS
CF A5,PUTBUF SAVE IN QUE
IFT STAT=1
LDK A1,T.RETRY
CF A5,COUNT COUNT # OF RETRIES
XIF
RB DAC100 TRY AGAIN
*
* RESTORE NOW ALL ORIGINAL SC ELEMENTS
* BEHIND THE AC ELEMENTS IN THE SC-QUEUE
* TO GET CORRECT ORDER OF TRANSMISSION
*
DACEND EQU *
SUK A2,2 ANY ORIGINAL ELEMENT IN SC-QUEUE?
RF(N) DAC200 READY
LD A3,Q1SCAD,A6
CF A5,GETBUF GET EL. FROM SC-QUEUE
CF A5,PUTBUF STRE EL. IN SC-QUEUE
RB DACEND GET NEXT
DAC200 EQU *
LD A2,AC,A6 GET VALUE OF AC
ADS A2,SC,A6 AD AND STORE IN SC
CM AC,A6 RESET AC
RTN A5 RETURN TO CALLER
EJECT
*
*
*
NRERR EQU *
*
*
* PREPARATIONS FOR FRAME REJECT
*
*
LD A2,RECCF,A6 GET CONTROL FIELD
SC A2,FRSAV1,A6 SAVE TO BE TRANSMITTED
LD A2,VS,A6 GET ACTUAL VALUE OF V(S)
SLL A2,1 PUT ON CORRECT POSITION
LD A3,VR,A6 GET ACTUAL VALUE OF V(R)
SLL A3,5 SHIFT IN POSITIO
ORR A2,A3 INCLUDE IN A2
LD A3,RECCMD,A6 GET COMMAND/RESPONSE INDICATOR
SLL A3,4 PUT ON CORRECT POSITION
ORR A2,A3 INCLUDE IN A2
SC A2,FRSAV2,A6 SAVE TO TRANSFER
LDK A2,/08 SET ERROR CODE IN FRAME
SC A2,FRSAV3,A6 SAVE FOR TRANSFER
CF A5,RESTR RESET TRANSMITTER VARIABLES
IFT ABM=1
CF A5,RESREC RESET RECEIVER VARIABLES
XIF
LDK A2,CNTRES
ST A2,CSV,A6 SET NEW STATUS
LDKL A2,/8000
ORS A2,PART1,A6 SET IN.FRMR/IN.CMDR
OLDNR CM NEWNR,A6 SET NEWNR OFF
PNREX EQU * NO FURTHER ACTIONS NECESSARY
ABL EXACR1 RETURN TO CALLER
EJECT
*
*
*
* THIS PART OF THE PROGRAM WILL PROCESS THE TYPICAL I-FRAME
* CHARACTERISTICS.
*
PIF EQU * START OF PROGRAM
IFT STAT=1
LDK A1,R.I
CF A5,COUNT COUNT RECEIVED I-FRAME
XIF
*** TEST IF FRMR/CMDR HAS TO BE TRANSMITTED
LD A1,PART1,A6
RF(N) PIFAC6 YES! IGNORE I-FRAME
LD A3,RECCF,A6 GET CONTROL FIELD
ANK A3,/E EXTRACT N(S)
SRL A3,1 PRESET RECEIVED NS IN A3
LD A4,VR,A6 PRESET VR IN A4
LD A1,SINS,A6 GET SINK STATE
SUK A1,1
CM SINS,A6 RESET SINS
RF(Z) PIFAC2 SINS=1
* SINS = 0 OR 2
* IN CASE VR .NE. NS OR NS - 1
* SINS IS SET TO 2
CWR A3,A4 VR EQUAL NS?
RF(NE) PIFAC3 NO
LD A3,Q1IRAD,A6 INPUT REQUESTS PENDING ?
LD A4,NF,A3 .
RF(Z) PIFAC2 NO
LDK A1,/40 IN.ACK BIT SET
ORS A1,PART1,A6 DO
IM VR,A6 INCREASE VR
LDK A1,7
ANS A1,VR,A6 UPDATE VR MODULO 8
CF A5,GETBUF
LD A7,BUFAD,A6
ST A7,ECBBA,A8 STORE BUFFERADDRESS IN ECB
LD A7,BUFLEN,A6
ST A7,ECBEL,A8 STORE INPUTBUFFER LENGTH IN ECB
LD A1,RRSETI,A6 GET RETURN CODE
CM RRSETI,A6 CLEAR POSSIBLE SET INDICATION
CF A5,Q.ERDY QUE EVENT READY
IFT TRACE=1
CF A5,LOGTRC
XIF
RF PIFEX RETURN TO CALLER
*
PIFAC1 EQU *
LDK A1,/40 SET ACK
RF PIFAC7 IGNORE I-FRAME
*
PIFAC2 EQU *
IM SINS,A6 SINS := 1
LDKL A1,/400 SET IN.RNR
RF PIFAC7
*
PIFAC3 EQU *
LDR A1,A1
RF(P) PIFAC4 SINS WAS 2
SUK A4,1
ANK A4,7 MAKE VR - 1
CWR A3,A4 SINS=0, TEST VR EQUAL NS?
RB(E) PIFAC1 YES
*
*
PIFAC4 EQU *
LDK A3,2
ST A3,SINS,A6 MODIFY SINS
IFT ABM=1
LDR A1,A1 SINS = 2 ?
RF(P) PIFAC6 YES, IGNORE FRAME
XIF
LDKL A1,/0200 IN.REJ BIT SET
PIFAC7 EQU *
ORS A1,PART1,A6 DO
PIFAC6 EQU *
LD A7,BUFAD,A6
CF A5,L1INPQ INPUT DRIVER IMPL ECB
PIFEX EQU * COMMON EXIT
ABL EXACR1
EJECT
* THIS PART OF THE PROGRAM WILL PROCESS THE TYPICAL S-FRAME
* CHARACTERISTICS.
*
PSF EQU *
LD A1,IDFT,A6 GET FRAME TYPE IDENTIFIER
CM REMFR,A6 PRE-RESET REMOTE FREE INDICATOR
SUK A1,SVAL+2
SRL A1,1 MAKE INDEX
IFT STAT=1
ADK A1,2 A1 = INDEX FOR S-FRAMES
CF A5,COUNT COUNT RECEIVED S-FRAME
SUK A1,2
XIF
ABI PSFTAB,A1 EXECUTE NECESSARY ACTIONS
*
*
*
PSFTAB EQU *
DATA PSF1 RR FRAME RECEIVED
DATA PSF2 RNR FRAME RECEIVED
DATA PSF3 REJ FRAME RECEIVED
*
*
PSF1 EQU *
IM REMFR,A6 SET REMOTE IS FREE
RF PSFEX RETURN TO CALLER
*
PSF3 EQU *
IM REMFR,A6 SET REMOTE IS FREE
PSF2 EQU *
LD A1,LNR,A6 GET LAST RECEIVED N(R)
ST A1,VS,A6 STORE IN V(S)
CF A5,DACQSC DEQUE AC AND QUE SC
PSFEX EQU *
ABL EXACR1
EJECT
*
*
* THIS PART WILL TAKE CARE FOR THE
* PROCESSING OF THE RECEIVER TIMER CONTROL
*
*
PRTC EQU *
LD A1,CSV,A6 GET ACTUAL CONNECTION STATE
RF(Z) RTI1 CSV IS DISCONNECTED
CWK A1,CNT
RF(E) RTI2 CSV IS CONNECTED
CWK A1,CNTRES
RF(E) RTIMEX CSV IS WAIT FOR RESET
RF RTI3 PROCESS ALL OTHER CSV'S
*
RTI1 EQU *
LDKL A1,-1
ST A1,TST,A6 SET TST
CM* TIMADR,A6 STOP RUNNING TUMER
CM TIMADR,A6 .
RF RTIMEX RETURN TO CALLER
*
RTI2 EQU *
LD A1,TST,A6 GET TIMER STATE
RF(Z) RTF2 TST=0
SUK A1,2
RF(N) RTF3 TST=1
RF(Z) RTF4 TST=2
SUK A1,2
RF(N) RTF2 TST=3
RF RTF1 TST=4
*
RTI3 EQU *
LD A1,OUTSTP,A6 GET OUTSTTANDING P INDICATOR
RF(NZ) RTIMEX RETURN TO CALLER
*
RTF1 EQU *
LDK A1,0 SET TST TO 0
RF RTIMSV SAVE TST
*
RTF2 EQU *
LD A1,REM.FR,A6 CHECK REMOTE STATION FREE
RF(NZ) RTF3
RTF2A EQU *
LDK A1,3 SET TIMER STATE TO 3
RF RTIMSV SAVE TST
RTF3 EQU *
LD A1,OUTST.P,A6 CHECK OUTSTANDING P INDICATOR
RF(NZ) RTIMEX RETURN TO CALLER
ST A1,NRT,A6 ZERO TO NUMBER OF RETRANSMISSIONS
LD A1,REM.FR,A6 GET REMOTE FREE INDICATOR
RB(Z) RTF2A
LD A1,AC,A6 GET NUMB OF BUFFERS TO BE ACKNOWLEDGED
RF(NZ) RTSET2 SET TST TO 2
RB RTF1
RTF4 EQU *
LD A1,REM.FR,A6 GET REMOTE FREE INDICATOR
RB(Z) RTF2A
LD A1,AC,A6 GET NUMBER OF BUFFERS TO BE ACKNOWLEDGED
RB(Z) RTF1
LD A1,NEWNR,A6 CHECK IF NEW N(R) IS RECEIVED
RF(Z) RTIMEX RETURN TO CALLER
RTSET2 EQU *
LDK A1,2 SET TIMER STATE TO 2
RTIMSV EQU *
ST A1,TST,A6 SAVE TIMER STATE
CF A5,STATIM START TIMER
*
RTIMEX EQU *
LD A2,CSV,A6 GET STATUS FOR USE FURTHER ON
LD A1,PROTST,A6 GET PROTOCOL STATUS
RF(NP) PRTCEX EXIT
*
CONREQ EQU * CONNECT REQUESTED
SUK A2,CNT HAS STATUS BECOME CONNECTED?
RF(NZ) PRTCEX NO
CM PROTST,A6 PROTOCOL STATUS CONNECTED
CM RRSETI,A6 RETURNCODE: RECEIVER RESET
LD A8,CONECB,A6 GET CONNECT ECB
CM* ECBBA,A8
LDK A1,NTAC RETURNCODE ACCEPTED
CF A5,Q.ERDY QUE EVENT READY
PRTCEX EQU *
RTN A5 RETURN TO CALLER
EJECT
*
*
* TRANSMITTER
*
*********************************************
*
* INPUT PARAMETERS:
* A5 = STACK POINTER
* A6 = PARAMETER TABLE ADDRESS
* A8 = ECB-ADDRESS
*
* CALLING SEQUENCE:
* CF A5,TRAN
*
EJECT
*
* THE TRANSMITTER PART OF THE HDLC WILL PERFORM THE ACTIVITIES
* THAT ARE NECESSARY TO TRANSMIT A FRAME TO THE OTHER SIDE
* AT FIRST IT WILL BE CHECKED IF THERE IS ANY REASON TO TRANSMIT
* A FRAME
*
* THE NECESSITY TO TRANSMIT A FRAME IS REGISTRED IN WORD 1 OF THE
* PARAMETER TABLE
*
* THIS WORD IS INDICATED AS "PART1
*
TRAN EQU *
LD A1,OUTPEN,A6 OUTPUT PENDING INDICATOR
*
RF(Z) TRAN1
TRANEX RTN A5
TRAN1 EQU *
LD A1,DRIVST,A6
RB(P) TRANEX NO OUTPUT ALLOWED WHEN DRIVER STOPPED
ADK A1,1
RB(Z) TRANEX STATUS =-1, DRIVER DISCONNECTED
LDK A1,/80
ORS A1,PART1,A6 PRESET INTRI
LD A1,Q1ACAD,A6 ACKNOWLEDGE QUEUE FULL ?
LD A1,NN,A1 .
RF(Z) TRAN10 YES, RESET IN TRI
LD A1,SC,A6
RF(Z) TRAN10 NO I-FRAMES AVAILABLE
LD A1,REMFR,A6
RF(Z) TRAN10 REMOTE NOT FREE TO RECEIVE
LD A1,CSV,A6
SUK A1,CNT
RF(Z) TRAN20 I-FRAME TO BE SENT
TRAN10 EQU *
LDKL A1,/FF7F
ANS A1,PART1,A6 RESET IN.TRI
TRAN20 EQU *
LDK A2,0 PRESET TABLE ENTRY TO FIRST WORD
LD A1,PART1,A6 GET TRANSMITTER CONDITIONS
RB(Z) TRANEX NOTHING TO DO
LDR A4,A1 SAVE PART1 IN REG A4
RF(N) TRAN2 CONDITION FOUND, START PROCESS
TRAN3 EQU *
ADK A2,2 INCREASE TABLE ENTRY
CWK A2,TRANTL LAST ?
RB(E) TRANEX YES, NOTHING TO DO
SLL A1,1 GET NEXT CONDITION
RB(NN) TRAN3 NOT SET, TRY NEXT
TRAN2 EQU *
LD A1,RESPAR,A2 RESET CONDITION PARAMETER
ANS A1,PART1,A6 RESET THE CONDITIONS
LDR A3,A2
SRL A3,1 A3 POINTS IN TABLE FRTYPE
LC A1,FRTYP,A3
SC A1,TRCTL,A6 PRESET FRAME TYPE TO BE SENT
ABI TRANTB,A2 START TRANSMITTER PROCESS
EJECT
TRANTB EQU * TRANSMITTER PROCESS ENTRY TABLE
DATA TRFRMR TRANSMIT FRMR/CMDR
DATA TRUA TRANSMIT UA
DATA TRDM TRANSMIT DM
DATA TRSABM TRANSMIT SABM/SARM
DATA TRDISC TRANSMIT DISC
DATA TRRNR TRANSMIT RNR
DATA TRREJ TRANSMIT REJ
DATA TRF TRANSMIT ANY FRAME WITH F-BIT SET
DATA TRI TRANSMIT I-FRAME
DATA TRACK TRANSMIT ACKNOWLEDGE (RR)
DATA TRP TRANSMIT ANY FRAME WITH P-BIT SET
TRANTL EQU *-TRANTB TABLE LENGTH
*
*
RESPAR EQU * RESET PARAMETER FOR PART1
DATA /0180 FRMR/CMDR
DATA /99A0 UA
DATA /D9A0 DM
DATA /E1A0 SABM/SARM
DATA /F1A0 DISC
DATA /F9A0 RNR
DATA /FDA0 REJ
DATA /FFA0 F
DATA /FFA0 I
DATA /FFA0 ACK
DATA /FFA0 P
*
*
FRTYP EQU * TABLE OF TO BE TRANSMITTED FRAMETYPES
FRTYPE FORM 8,8
FRTYPE FRMR,UA
IFT ABM=1
FRTYPE DM,SABM
XIF
IFT ABM=0
FRTYPE DM,SARM
XIF
FRTYPE DISC,RNR
FRTYPE REJ,RR
FRTYPE I,RR
EJECT
TRUA EQU *
TRDM EQU *
TRFRMR EQU *
* A4 CONTAIN ORIGINAL PART1 CONDITION
* A3 IS USED FOR ADDING CONDITIONS IN CONTROL FIELD
* A4 WILL BE USSED TO RESET CONDITION IN PART1
* A1 IS USED FOR SETTING THE ADDRESS FIELD IN THE FRAME
*
IFT STAT=1
LDK A1,T.FRMR END OF U-FRAME COUNTERS
SUR A1,A2
CF A5,COUNT COUNT # OF U-FRAMES
XIF
LD A1,TRSPAD,A6 PRESET RESPONSE ADDRESS
ANKL A4,/100 F-BIT SET?
RF(Z) CUFR32 NO
CUFR20 LDK A3,/10 YES, PRESET SETTING P/F-BIT
CUFR30 XRS A4,PART1,A6 RESET CONDITIONS IN PART1
ORS A3,TRCTL,A6 SET CONDITION IN CONTROL FIELD
CUFR32 SC A1,TRAD,A6 SET ADDRESS FIELD
* A2 IS INDEX TO TYPE OF U-FRAME
RF WRITEC GO ON WITH TRANSMITTING THE CONSTRUCTED FRAME
*
TRSABM EQU *
TRDISC EQU *
IFT STAT=1
LDK A1,T.FRMR END OF U-FRAME COUNTERS
SUR A1,A2
CF A5,COUNT COUNT # OF U-FRAMES
XIF
CM OUTSTP,A6 PRE-RESET OUTSTP
LD A1,TCMDAD,A6 GET COMMAND ADDRESS
ANK A4,/20 PBIT SET IN PART1?
RB(Z) CUFR32 NO,SET COMMAND ADDR. AND WRITE CONTROL FRAME
IM OUTSTP,A6 YES , SET OUTSTP
RB CUFR20 RESET PART1, PREPARE CONTROL FRAME
EJECT
TRREJ EQU *
IFT STAT=1
LDK A1,T.REJ
RF T.COUNT
XIF
***
TR.RNR EQU *
IFT STAT=1
LDK A1,T.RNR
TCOUNT EQU *
CF A5,COUNT
XIF
***
*
CSFR EQU * CONSTRUCT S-FRAME
LD A1,TRSPAD,A6 PRESET RESPONSE ADDRESS
LDR A7,A4 SAVE PART1 IN A7
ANKL A4,/100 F-BIT SET IN PART1?
IFT ABM=1
RF(Z) CSFR1 NO,CHECK IF P-BIT SET
CUFR36 LDK A3,/10 PRESET F OR P TO BE SET IN CONTROL FIELD
XIF
IFT ABM=0
RF(Z) CSFR1 NO
LDK A3,/10 PRESET F TO BE SET IN CNTRL-FIELD
XIF
CUFR35 EQU *
LD A2,VR,A6 GET VR
SLL A2,5 SHIFT IN POSITION
ORR A3,A2 NOW A3 CONTAINS ALSO VR
RB CUFR30 RESET F IN PART1 AND PREPARE CONTROL AND ADDRESS
IFT ABM=1
CSFR1 LDR A4,A7 GET SAVED PART1
LDK A3,0 AVOID SETTING OF P OR F IN FRAME
ANK A4,/20 IS P-BIT SET IN PART1?
RB(Z) CUFR35 NO,PREPARE CONTROL FRAME
LDK A1,1
ST A1,OUTSTP,A6 SET OUTSTANDING P INDICATION
LD A1,TCMDAD,A6 PRESET COMMAND ADDRESS
RB CUFR36
XIF
IFT ABM=0
CSFR1 EQU *
LDK A3,0 AVOID SETTING OF F IN FRAME
RB CUFR35
XIF
EJECT
TRP EQU *
TRF EQU *
TRACK EQU * TRANSMIT ACKNOWLEDGE
*
* THIS PART OF THE TRANSMITTER TAKES CARE FOR THE CONSTRUCTION OF
* ANY P/F CARRYING FRAME
*
CPFFR EQU * CONSTRUCT P/F-FRAME
LD A1,SINS,A6 GET SINK STATE
LC A2,TCPE,A1 GET S-FRAME TYPE
SC A2,TRCTL,A6 STORE IN FRAME CONTROL FIELD
IFT ABM=0
LDR A7,A4 TEST IF P-BIT HAS TO BE TRANSMITTED
ANK A7,/20 .
RF(Z) CPFFR1 NO
XRS A7,PART1,A6 WE CANNOT DO IT
*** TEST IF TIMER MUST BE ADJUSTED
LD A7,REM.FR,A6
RF(NZ) CPFFR0 REMOTE FREE
LDK A7,3 SET REMOTE BUSY TIMER
ST A7,TST,A6
CF A5,STATIM
CPFFR0 EQU *
RTN A5
*
CPFFR1 EQU *
XIF
IFT STAT=1
* A1 IS USED AS INDEX
SLL A1,1
ADK A1,T.RR COUNTER OF FIRST S-FRAME
CF A5,COUNT COUNT # OF S-FRAMES
XIF
RB CSFR CONSTRUCT S-FRAME
*
TCPE EQU *
TCP FORM 8,8
TCP RR,RNR EACH EIGHT BITS CONTAIN THE
TCP REJ,/0 LAY-OUT BELONGING TO THE TYPE
TO BE TRANSMITTED
EJECT
TRI EQU *
*
* THIS PROGRAM PART IS THE GENERAL PART FOR I-FRAME CONSTRUCTION.
*
SEF10 EQU *
IFT STAT=1
LDK A1,T.I
CF A5,COUNT COUNT # OF I-FRAMES
XIF
LD A1,MAXVS,A6 GET MAXIMUM VALUE REACHED
* BY V(S)
CW A1,VS,A6 COMPARE WITH ACTUAL V(S)
RF(NE) SEF11
IM MAXVS,A6 INCREASE MAXV(S)
LDK A1,/7
ANS A1,MAXVS,A6 MODULO 8
*
SEF20 EQU *
SEF11 EQU * FURTHER ACTIONS ARE EQUAL
LD A1,VS,A6 V(S)
SLL A1,1
LD A2,VR,A6 V(R)
SLL A2,5
ORR A1,A2
ST A1,TRCTL,A6 INCLUDE COUNTERS IN CTL FIELD
IM VS,A6 INCREASE V(S)
LDK A1,/7
ANS A1,VS,A6 MODULO 8
LD A1,TCMDAD,A6 GET ADDRESS FOR COMMAND FRAME
SC A1,TRAD,A6 STORE IN FRAME
EJECT
* THIS PART OF THE TRANSMITTER TAKES CARE FOR :
* - P/F-BIT CONSTRUCTION
*
PFCP EQU *
ANK A4,/20 GET P-BIT
RF(Z) PFCP1
XRS A4,PART1,A6 RESET P-BIT IN PART1
IM OUTSTP,A6 SET OUTSTP
LDK A1,/10 SET P-BIT
ORS A1,TRCTL,A6
PFCP1 EQU *
RF WRITEI I-FRAME OUTPUT
WRITEC EQU * OUTPUT OF CONTROL FRAMES
CF A5,GLECB GET ELEMENT FROM LECB QUEUE
LDK A1,TRANSF BUFFER ADDRESS
ADR A1,A6 NOW REAL ADDRESS
ST A1,ECBBA,A8 PUT IN ECB
LDK A1,5 PRESET LENGTH CASE FRMR/CMDR
LC A2,TRCTL,A6 GET CONTROL FIELD
ANK A2,FRMR STRIP NON RELEVANT BITS
CWK A2,FRMR IS IT FRMR/CMDR ?
RF(E) WRITC1 YES ?
LDK A1,2 LENGTH OF CONTROL FRAME
WRITC1 EQU *
ST A1,ECBRL,A8 IN ECB
*
*
WRITCI EQU * FOR DATA AS WELL AS CONTROL
IFT LOG=1
LDKL A4,/53FF
CF A5,LOGFR LOGGING OF OUTGOING FRAMES
XIF
CF A5,L1OUT EXECUTE WRITE LEVEL 1
RF PTTC PROCESS TRANSMITTER TIMER CONTROL
*
WRITEI EQU *
LDK A1,Q1SCAD ENTRY POINT OUTPUT QUEUE ADDRESSES
ADR A1,A6 IN CORRECT PARAMETER TABLE
PRI7 LDR* A3,A1 GET QUEUE ADDRESS
PRI6 CF A5,GETBUF GET ELEMENT FROM QUEUE
LD A3,Q1ACAD,A6
CF A5,PUTBUF SET IN ACK QUE
LD A1,TRANSF,A6 GET ADDRESS AND CONTROL
LD A2,ECBBA,A8 GET BUFFER ADDRESS
STR A1,A2 STORE CONTROL AND ADDRESS
LD A1,ECBRL,A8 SAVE REQUESTED LENGTH
CM ECBEL,A8
CF A5,GLECB GET ELEMENT FROM LECB QUEUE(A3)
ST A1,ECBRL,A8 REQ. LENGTH IN ECB
ST A2,ECBBA,A8 STORE BUFFER ADDRESS IN ECB
IM AC,A6 INCREMENT ACKNOWLEDGE COUNT
LDKL A1,-1
ADS A1,SC,A6 DECREMENT SEND COUNT
RB WRITCI
EJECT
*
* THIS PART PERFORMS THE PROCESSING OF THE
* TRANSMITTER TIMER CONTROL.
*
*
PTTC EQU *
LD A1,CSV,A6 GET ACTUAL PROTOCOL STATUS
RF(Z) TIMAC1 CSV IS DISCONNECTED
CWK A1,CNT
RF(E) TIMAC2 CSV IS CONNECTED
CWK A1,CNTRES
RF(E) TIMAC4 CSV IS WAIT FOR RESET
* ALL OTHER CSV'S
RF TIMAC3 PROCESS OTHER CSV'S
TIMAC1 EQU *
SUK A1,1 TST = -1
ST A1,TST,A6 SET STATE
RF TIMEX
*
TIMAC2 EQU *
LD A1,OUTSTP,A6 CHECK OUTSTANDING P-BIT
RF(Z) TIMC2A
LD A1,TST,A6 GET TIMER STATE
SUK A1,1
RF(Z) TIMEX TST=1
RF TIMST1
TIMC2A EQU *
LD A1,TST,A6 GET TIMER STATE
*** TEST IF TST HAS TO BE ADJUSTED
CWK A1,2
RF(NL) TIMEX NO!
*** TEST IF ACK-TIMER HAS TO BE SET
LD A2,AC,A6
RF(Z) TIMC2C NO!
LDK A1,2 SET ACK-TIMER
RF TIMSAV
TIMC2C EQU *
SUK A1,1
RF(Z) TIMST0 SET TIMER STATE TO 0
RF TIMEX RETURN TO CALLER
*
TIMAC3 EQU *
LDK A1,1
CW A1,TST,A6 TST IS 1 ?
RF(E) TIMEX YES EXIT
RF TIMSAV
*
TIMAC4 EQU *
LDK A1,4 TIMER STATE BECOMES 4
RF TIMSAV
*
TIMST1 EQU *
LDK A1,1 SET TIMER STATE TO 1
RF TIMSAV
TIMST0 EQU *
LDK A1,0 SET TIMER STATE TO 0
TIMSAV EQU *
ST A1,TST,A6 SAVE TIMER STATE
CF A5,STATIM START TIMER
TIMEX EQU *
RTN A5 RETURN TO CALLER
IFT STAT=1
EJECT
*
*
**** STATISTICAL COUNTING ROUTINE
*
* AT ENTRY:
* A1 = INDEX FOR FRAME TYPE TO BE COUNTED
* A6 = ADDRESS PARAMETER TABLE
*
COUNT EQU *
STR A1,A5 SAVE A1
LD A1,STASTR,A6
RF(Z) COUNTR
ADR* A1,A5
IMR A1 INCREMENT STATISTICAL COUNTER
COUNTR EQU *
LDR* A1,A5 RESTORE A1
RTN A5 RETURN
XIF
EJECT
RESTR EQU * RESET TRANSMITTER VARIABLES
CM NRT,A6
LDK A1,1
ST A1,REMFR,A6
CM VS,A6
CM MAXVS,A6
CM LNR,A6
CM OUTSTP,A6
CM PART1,A6
RTN A5
*
RESREC EQU * RESET RECEIVER VARIABLES
CM VR,A6
RTN A5
EJECT
*
* THIS PART WILL PERFORM THE INITIALISATION
* OF THIS LEVEL
*
*
INIT EQU *
CF A5,INIT.IO
CM TIMADR,A6 RESET ADDRESS TIMER BLOCK AS FLAG
CM LECBRC,A6 RESET ERRORRETURNCODE
IFT STAT=1
LD A1,STASTR,A6 START OF COUNTER AREA
INIT10 EQU *
CMR A1 CLEAR COUNTERS
ADK A1,2
CW A1,STAEND,A6 END REACHED ?
RB(NE) INIT10 NO
XIF
LDR A4,A6 SET POINTER
LDK A2,12 MINIMUM NR OF QUEUES*2
INITR EQU * RETURN POINT
LD A3,QUEAD,A4 GET FIRST QUE ADDRESS
CM NF,A3 MAKE QUEUE EMPTY
LD A7,MI,A3
ST A7,IN,A3 SET INSERT POINTER
ST A7,EX,A3 SET EXTRACT POINTER
LD A1,MA,A3
SUR A1,A7 NOW WE HAVE NUMB OF ELEMENTS
ST A1,NN,A3 SET NUMBER OF ELEMENTS
ADK A4,2 INCRENMENT QUE POINTER
SUK A2,2 DECREMENT NUMBR TO BE INITIALIZED
RB(NZ) INITR DO AGAIN
LD A1,Q1LEAD,A6 LENGTH OF LECB QUEUE
LD A2,NN,A3 .
LDR A7,A8 SAVE A8
LD A8,Q1LECA,A6 ADDRESS FIRST ELEMENT
INITQ CF A5,PUTBUF STORE IN QUEUE (A3=ADDR)
ADKL A8,12 UPDATE ELEMENT ADDRESS
SUK A2,2 DECREASE NR OF QUEUES
RB(NZ) INITQ STORE ELEMENT
LDR A8,A7 RELOAD A8
LDKL A1,-1
ST A1,PROTST,A6 PROTOCOL STATUS DISCONNECT
ST A1,DRIVST,A6 DRIVER STATUS DISCONNECT
IN SAVE AREA
RTN A5 RETURN TO CALLER
EJECT
*
*** TIMER ROUTINES
*
STATIM EQU * START TIMER
LD A2,TST,A6 GET TIMER STATE
ADR A2,A2 MAKE INDEX IN TIMER VALUE TABLE
LD A3,TIMVAL,A2 GET TIMER STATE DEPENDENT TIMER VALUE
INH
ST A3,TIMER SET IN LOCATION FOR TIMER
C1R A3,A3
LD A2,TIMADR,A6 CURRENT TIMER RUNNING?
RF(Z) STATI1 NO
LDR* A2,A2 GET TIMER VALUE
RF(P) STATI1 TIMER ALREADY EXHAUSTED
ST* A3,TIMADR,A6 SAVE NEW TIMER VALUE
ENB
RTN A5
*
STATI1 EQU *
LD A1,TMECBA,A6 ADDRESS TIMER ECB AS PARAMETER
LC A4,FCL1+1,A6 SET FILECODE IN TIMER ECB
SC A4,1,A1
CF A15,SETIME START TIMER
DATA IDREQT TIMER ENTRY AFTER TIME OUT
TIMER DATA 0 TIMER VALUE
ENB SETIME RETURNS INHIBIT!!
ST A4,TIMADR,A6 SAVE TIMER VALUE ADDRESS
RTN A5 RETURN TO CALLER
*
TIMVAL EQU *
DATA SYTIM0 VALUE IF TST 0
DATA SYTIM1 VALUE IF TST 1
DATA SYTIM2 VALUE IF TST 2
DATA SYTIM3 VALUE IF TST 3
DATA SYTIM4 VALUE IF TST 4
*
*
EJECT
*
MSRL EQU * MULTIPLE STORE FOR REGISTERSA1 A8
ST A1,SAV,A6 IN SAVE AREA
ST A2,SAV+2,A6
ST A3,SAV+4,A6
ST A4,SAV+6,A6
ST A7,SAV+8,A6
LD A1,FCL1,A6 FILE CODE FOR CURRENT DRIVER
STR A1,A8 STORE INTO LINE ECB
RTN A5 RETURN TO CALLER
*
*
*
MLRL EQU * RELOAD LOW REGISTERS A1-A8
LD A1,SAV,A6
LD A2,SAV+2,A6
LD A3,SAV+4,A6
LD A4,SAV+6,A6
LD A7,SAV+8,A6
RTN A5 RETURN TO CALLER
EJECT
**** DRIVER REQUEST ROUTINES
*
L1CONN EQU *
CF A5,MSRL
CM OUTPEN,A6 RESET OUTPUT PENDING
CM INPCNT,A6 RESET INPUT PENDING COUNTER
CF A5,DR.CONN LEVEL 1 CALL
L1RET EQU *
LDR* A1,A8 GET FILE CODE CURRENT DRIVER
LD A2,TABPAR GET TABLE LENGTH
L1RET2 EQU *
CC A1,TABPAR-1,A2 DOES THE FILECODES MATCH
RF(E) L1RET3 YES
SUK A2,4 TAKE NEXT ENTRY
RB L1RET2
L1RET3 EQU *
LD A6,TABPAR,A2 GET PARAMETER TABLE ADDRESS
CF A5,MLRL MULTIPLE LOAD OF LOW REGISTERS
LD A4,ECBRC,A8 GET RETURN CODE
RF(NP) L1RET1 COMMON RETURN POINT
LD A4,ECBPR,A8
CWK A4,ORCNL1
RF(E) L1RET1 CONNECT REQUEST FAILED
HLT
L1RET1 EQU *
RTN A5 RETURN TO CALLER
*
*
* DRIVER INPUT REQUEST WITH IMPLICIT
* LINE ECB REQUEST AND STORE BUFFERADDRESS
* AT ENTRY A7=BUFFERADDRESS
*
L1INPQ EQU *
CF A5,GLECB GET LINE ECB FROM QUEUE
ST A7,ECBBA,A8 STORE BUFFERADDRESS IN ECB
L1INP EQU * PERFORM LEVEL 1 CALL
CF A5,MSRL
IM INPCNT,A6 INCREASE NR OF PENDING INPUT REQUESTS
LD A1,SYLEN,A6
ST A1,ECBRL,A8 STORE FIXED LENGTH
CF A5,DR.INP LEVEL 1 CALL
RB L1RET COMMON RETURN POINT
*
L1OUT EQU * PERFORM LEVEL 1 CALL
CF A5,MSRL
IM OUTPEN,A6 SET OUTPUT PENDING INDICATION
CF A5,DR.OUT LEVEL 1 CALL
RB L1RET COMMON RETURN POINT
*
* DRIVER STOP REQUEST WITH IMPLICIT REQUEST
* OF A LINE ECB AND RESTORE LINE ECB
*
L1STPQ EQU *
CF A5,GLECB GET LINE ECB
CF A5,L1STOP STOP DRIVER
CF A5,PLECB RESTORE LINE ECB IN QUEUE
RTN A5
L1STOP EQU * PERFORM LEVEL 1 CALL
CM TIMADR,A6 SET CURRENT TIMER STOP
CF A5,MSRL
LDK A1,1
ST A1,DRIVST,A6 SET DRIVER STATUS STOP
CF A5,DR.STOP LEVEL 1 CALL
RB L1RET COMMON RETURN POINT
*
* DRIVER DISCONNECT REQUEST WITH IMPLICIT
* REQUEST OF A LINE ECB
*
L1DISQ EQU *
CF A5,GLECB GET LINE ECB FROM QUEUE
L1DISC EQU * PERFORM LEVEL 1 CALL
CF A5,MSRL
LDKL A1,-1
ST A1,DRIVST,A6 SET DRIVER STATUS DISCONNEC
CF A5,DR.DISC LEVEL 1 CALL
RB L1RET COMMON RETURN POINT
EJECT
MI EQU /0
MA EQU /2
NF EQU /4
NN EQU /6
IN EQU /8
EX EQU /A
*
*
*
*
* THIS PROGRAM PART WILL TAKE CARE FOR THE DEQUEUEING
* OF ECB'S.
*
* THE EXPECTED INPUT PARAMETERS ARE:
* A3 = QUEUE ADDRESS
* A5 = STACKBASE
*
*
* A8 WILL CONTAIN THE FOUND ECB ADDRESS
*
* NO REGISTERS BELOW A9 ARE AFFECTED.
*
GLECB LD A3,Q1LEAD,A6 ADDRESS LECB QUEUE
*
GETBUF EQU *
STR A7,A5 SAVE TEMPORARILY ON STACK
LD A7,NF,A3 ARE THERE FREE BUFFERS?
RF(NP) GETBEX NO
LD A7,EX,A3 GET EXTRACTION POINTER
LDR* A8,A7 GET BUFFER ADDRESS
ADKL A7,2 INCREMENT EXTRACT POINTER
CW A7,MA,A3 MAXIMUM REACHED?
RF(NE) GETB1 CONTINUE
LD A7,MI,A3 SET POINTER TO BEGIN
GETB1 EQU *
ST A7,EX,A3 SAVE POINTER
LDK A7,2
ADS A7,NN,A3 INCREMENT NOT FREE COUNTER
LDKL A7,-2
ADS A7,NF,A3 DECREMENT FREE COUNTER
RF RETRN RELOAD A7 AND RETURN
GETBEX EQU *
HLT
*
*
*
* THIS PROGRAM PART TAKES CARE FOR THE QUEUEING
* OF ECB.
*
* THE EXPECTED INPUT PARAMETERS ARE:
* A3 = QUEUE ADDRESS
* A5 = STACKBASE
* A8= ECB ADDRESS TO BE QUEUED
*
*
* NO REGISTERS BELOW A8 ARE AFFECTED.
*
PLECB LD A3,Q1LEAD,A6 ENTRY POINT TO PUT LECB IN QUEUE
*
PUTBUF EQU *
STR A7,A5 SAVE A7 ON STACK
LD A7,NN,A3 GET NUMBER NOT FREE
RF(NP) PUTBEX NOTHING
LD A7,IN,A3 GET INSERT POINTER
STR A8,A7 SAVE BUFFER ADDRESS
ADK A7,2 INCREASE INSERT POINTER
CW A7,MA,A3 MAXIMUM REACHED ?
RF(NE) PUTB1 NO
LD A7,MI,A3 SET POINTER TO BEGIN
PUTB1 EQU *
ST A7,IN,A3 SAVE POINTER
LDK A7,2
ADS A7,NF,A3 INCREMENT FILLED
LDKL A7,-2
ADS A7,NN,A3 DECREMENT NOT FILLED
RETRN EQU *
LDR* A7,A5 RELOAD A7 FROM STACK
RTN A5
PUTBEX EQU *
HLT
IFT TRACE=1
EJECT
*
*
**** LOGING ROUTINE FOR RECEIVED AND TRANSMITTED I-FRAMES
*
* AT ENTRY:
* A8 = ECB-ADDRESS
*
* AT RETURN:
* A1, A3, A4 AND A7 ARE CHANGED
*
LOGTRC EQU *
LD A3,ECBBA,A8 GET LOAD BUFFER
LDK A4,5 GET # OF WORDS TO MOVE
LD A7,CURTRP,A6 GET STORE POINTER IN TRACE BUFFER
RF(Z) LOGT30 NO AREA SPECIFIED
LOGT10 EQU *
LDR* A1,A3 GET WORD
STR A1,A7 STORE
ADK A3,2 INCREASE LOAD POINTER
ADK A7,2 INCREASE STORE POINTER
CW A7,TRAEND,A6 END OF TRACE BUFFER REACHED ?
RF(NE) LOGT20 NO
LD A7,TRASTR,A6 SET POINTER ON START OF TRACE BUFFER
LOGT20 EQU *
SUK A4,1 DECREASE # OF WORDS
RB(NZ) LOGT10 GET NEXT
ST A7,CURTRP,A6 SAVE NEW STORE POINTER
LOGT30 EQU *
RTN A5 RETURN
XIF
IFT LOG=1
EJECT
*
*
**** LOGING ROUTINE FOR RECEIVED AND TRANSMITTED HDLC-FRAMES
*
* AT ENTRY:
* A4 = SEND/RECEIVE INDICATION
* A8 = ECB-ADDRESS
*
* AT RETURN:
* A7 IS CHANGED
*
LOGFR EQU *
LD A7,CURLGP,A6 GET STORE POINTER IN LOG BUFFER
RF(Z) LOG20 NO AREA SPECIFIED
STR A4,A7 STORE SEND/RECEIVE INDICATION
LD* A4,ECBBA,A8
ST A4,2,A7 STORE FIRST BUFFER WORD
ADK A7,4 ADJUST STORE POINTER
CW A7,LOGEND,A6 END OF AREA REACHED ?
RF(NE) LOG10 NO
LD A7,LOGSTR,A6 YES, SET STORE POINTER ON START
LOG10 EQU *
ST A7,CURLGP,A6 SAVE NEW STORE POINTER
LOG20 EQU *
RTN A5 RETURN
XIF
EJECT
*
* TABLE THAT CONTAINS THE FILECODE USED AT THE I/O-HANDLER
* INTERFACE FOR A CERTAIN LINE AND THE ADDRESS OF THE RELATED
* PARAMETER TABLE.
*
TABPAR EQU *
DATA TABEND-* TABLE LENGTH
*
DATA FC:LN1
DATA PARTA1
IFF SYNRLN=1
DATA FC:LN2
DATA PARTA2
IFF SYNRLN=2
DATA FC:LN3
DATA PARTA3
IFF SYNRLN=3
DATA FC:LN4
DATA PARTA4
XIF
TABEND EQU *-2
EJECT
*
* THE PARAMETER TABLE CONTAINS ALL PARAMETERS THAT CONTROL
* THE FUNCTIONING OF DVDCLC
* FOR EACH "LIFE" OF THE HDLC PROTOCOL PROGRAM , ONE TABLE MUST
* BE DEFINED
*
* THE TABLE CONSISTS OF TWO PARTS I.E.
* * ONE PART THAT CONTAINS ALL VARIABLES THAT ARE RELATED
* TO THE PROTOCOL.
* * ONE PART THAT CONTAINS ALL VARIABLES THAT CONTAIN
* OTHER INFORMATION SUCH AS QUEUEING PARAMETERS FOR
* BUFFERS , ECB'S , FRAME CONTENTS.
*
*
***** FIRST PART *****
*
DATA 'PARTA1'
PARTA1 EQU * START OF TABLE
*
* DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE
*
DW2501 EQU *
DATA 'DC' CHANNEL PARAMETER
DATA /8000 STATUS
DATA 0 ECB-ADDRESS
DATA 0 ORDER
DATA DRDC25 POINTER TO ADDRESS BLOCK
DATA 0 TTAB-ADDRESS
DATA 0 WAIT/ACTIVATION INDICATOR
DATA 0 TERMINAL QUEUE
DATA 0
DATA 0
DATA 0
DATA 0 ECHO DEVICE
DATA PARTA1 PARAMETER TABLE ADDRESS
*
PART1 EQU *-PARTA1
DATA 0
* THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
* BIT 0 = IN.FRMR/IN.CMDR
* 1 = IN.UA
* 2 = IN.DM
* 3 = IN.SABM/IN.SARM
* 4 = IN.DISC
* 5 = IN.RNR
* 6 = IN.REJ
* 7 = IN.F
* 8 = IN.TRI
* 9 = IN.ACK
* 10 = IN.P
* 11 = ** SPARE **
* 12 = ** SPARE **
* 13 = ** SPARE **
* 14 = ** SPARE **
* 15 = ** SPARE **
*
RECCMD EQU *-PARTA1 COMMAND/RESPONSE INDICATOR
DATA 0
*
OUTSTP EQU *-PARTA1 OUTSTANDING P-BIT INDICATOR
DATA 0
*
CSV EQU *-PARTA1 CONNECTION STATE VARIABLE
DATA 0
*
TST EQU *-PARTA1 TIMER STATE
DATA 0
*
SINS EQU *-PARTA1 SINK STATE
DATA 0
RRSETI EQU *-PARTA1 RECEIVER RESET INDICATION
DATA 0
*
REMFR EQU *-PARTA1 REMOTE FREE INDICATOR
DATA 0
*
NEWNR EQU *-PARTA1 NEW N(R) RECEIVED INDICATOR
DATA 0
*
VS EQU *-PARTA1 SEND STATE VARIABLE V(S)
DATA 0
*
VR EQU *-PARTA1 RECEIVE STATE VARIABLE V(R)
DATA 0
*
MAXVS EQU *-PARTA1 MAXIMUM VALUE V(S) HAS REACHED
DATA 0 UPDATED TOGETHER WITH V(S)
*
LNR EQU *-PARTA1 LAST VALUE OF N(R) RECEIVED
DATA 0 FROM OPPOSITE SIDE
*
SC EQU *-PARTA1 NUMBER OF FRAMES TO BE SEND
DATA 0
*
AC EQU *-PARTA1 NUMBER OF ACKNOWLEDGES TO BE
DATA 0 RECEIVED
*
NRT EQU *-PARTA1 NUMBER OF RETRIES
DATA 0
TRSPAD EQU *+1-PARTA1
RCMDAD EQU *+1-PARTA1
DATA SYADRS RESPONSE ADDRESS
TCMDAD EQU *+1-PARTA1
RRSPAD EQU *+1-PARTA1
DATA SYADCM COMMAND ADDRESS
IDFT EQU *-PARTA1 FRAME TYPE IDENTIFIER
DATA 0
IIF EQU *-PARTA1 ILLEGAL I-FIELD INDICATION
DATA 0
STB EQU *-PARTA1
DATA STCK1A+PARTA1-2
SAV EQU *-PARTA1 SAVE AREA FOR REGISTERS
RES 5 SAVE AREA FOR REGISTERS
NEWSTB EQU *-PARTA1 STACBASE FOR INTERRUPTS DURING BUSY
DATA STCK1B+PARTA1-2 STACKBASE ENTRY
BUFAD EQU *-PARTA1
DATA 0
BUFLEN EQU *-PARTA1
DATA 0
RECCF EQU *-PARTA1
DATA 0
SAV1 EQU *-PARTA1
DATA 0
SAV2 EQU *-PARTA1 SAVE AREA FOR REGISTERS IN RECEIVER
DATA 0
SAV3 EQU *-PARTA1
DATA 0
TRANSF EQU *-PARTA1
TRAD EQU *-PARTA1
TRCTL EQU *+1-PARTA1
DATA 0 ADDRESS AND CONTROL FIELD FOR TRANSMITTER
FRSAV1 EQU *-PARTA1
FRSAV2 EQU *+1-PARTA1
FRSAV3 EQU *+2-PARTA1
DATA 0 ADDITIONAL INFO FOR CMDR FRAME
DATA 0
*
EJECT
*
* QUE ADDRESSES BELONGING TO ONE LINE OF HDLC
*
*
QUEAD EQU *-PARTA1
Q1ERAD EQU *-PARTA1
DATA Q1ER
Q1IRAD EQU *-PARTA1
DATA Q1IR
Q1ACAD EQU *-PARTA1
DATA Q1AC
Q1COAD EQU *-PARTA1
DATA Q1CO
Q1SCAD EQU *-PARTA1 ENTRY IN TABLE FOR OUTPUT QUEUES
DATA Q1SC ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
Q1LEAD EQU *-PARTA1
DATA Q1LE
*
Q1LECA EQU *-PARTA1 ADDRESS FIRST LINE ECB
DATA Q1LEC1 *****TEM******
*
EJECT
***** SECOND PART *****
*
*
RECNR EQU *-PARTA1 WILL CONTAIN THE N(R) OF THE
DATA 0 RECEIVED FRAME
*
DWTAD EQU *-PARTA1
DATA DW2501
SYLEN EQU *-PARTA1
DATA 0 INPUT LENGTH
OUTPEN EQU *-PARTA1
DATA 0
BUSY EQU *-PARTA1
DATA 0
PROTST EQU *-PARTA1
DATA -1
DRIVST EQU *-PARTA1
DATA -1
FCL1 EQU *-PARTA1
DATA FC:LN1
TMECBA EQU *-PARTA1 ADDRESS TIMER ECB
DATA TIMECB+PARTA1 THIS ECB MUST BE DEFINED FOR ANY LINE
TIMADR EQU *-PARTA1
DATA 0
CON.ECB EQU *-PARTA1
DATA 0
DIS.ECB EQU *-PARTA1
DATA 0
INP.CNT EQU *-PARTA1
DATA 0
LECBRC EQU *-PARTA1
DATA 0
CONBUF EQU *-PARTA1
DATA 0
INBUF EQU *-PARTA1 INIT POINTER
DATA SAVBUF+PARTA1
IFT TRACE=1
CURTRP EQU *-PARTA1
DATA TRABUF+PARTA1 CURRENT TRACE BUFFER POINTER
TRASTR EQU *-PARTA1
DATA TRABUF+PARTA1
TRAEND EQU *-PARTA1
DATA TREND+PARTA1
XIF
IFT LOG=1
CURLGP EQU *-PARTA1
DATA LOGBUF+PARTA1 CURRENT LOG BUFFER POINTER
LOGSTR EQU *-PARTA1
DATA LOGBUF+PARTA1
LOGEND EQU *-PARTA1
DATA LGEND+PARTA1
XIF
IFT STAT=1
STASTR EQU *-PARTA1
DATA STABUF+PARTA1
STAEND EQU *-PARTA1
DATA STEND+PARTA1
XIF
INP.RY EQU *-PARTA1
DATA -100
PARLEN EQU *-PARTA1 LENGTH OF PARAMETER TABLE
EJECT
*
RES 10 CALL FUNCTION STACK
STCK1A EQU *-PARTA1
*
RES 3 CALL FUNC STACK FOR INTERR. REQ.
STCK1B EQU *-PARTA1
*
TIMECB EQU *-PARTA1
DATA FC:LN1 TIMER ECB
DATA 0,0,0,0,ORTIL1 ORDER = ORTIL1
*
SAVBUF EQU *-PARTA1
RES SYUBNR SAVE AREA FOR CONNECT BUFFERS
*
IFT TRACE=1
TRABUF EQU *-PARTA1
RES 100 TRACE AREA
TREND EQU *-PARTA1
XIF
*
IFT LOG=1
LOGBUF EQU *-PARTA1
RES 50 LOG AREA
LGEND EQU *-PARTA1
XIF
*
IFT STAT=1
STABUF EQU *-PARTA1
RORG *+STALNG STATISTICAL AREA
STEND EQU *-PARTA1
XIF
EJECT
*
*
* THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
* EVENTS ARE READY
*
*
Q1ER EQU * START OF QUEUE
Q1ERMI DATA Q1ERSA MINIMUM VALUE OF POINTER
Q1ERMA DATA Q1ERFI MAXIMUM VALUE OF POINTER
Q1ERNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q1ERNN DATA Q1ERFI-Q1ERSA NUMBER OF FREE POSITIONS
Q1ERIP DATA Q1ERSA INSERTION POINTER
Q1EREP DATA Q1ERSA EXTRACTION POINTER
Q1ERSA RES SYNRRC+SYNRTR+1 RESERVE ALLOWED NUMBER
Q1ERFI EQU * END OF BLOCK
*
*
* THE INPUT REQUEST QUEUE
*
*
Q1IR EQU * START OF QUEUE
Q1IRMI DATA Q1IRSA MINIMUM VALUE OF POINTER
Q1IRMA DATA Q1IRFI MAXIMUM VALUE OF POINTER
Q1IRNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q1IRNN DATA Q1IRFI-Q1IRSA NUMBER OF FREE POSITIONS
Q1IRIP DATA Q1IRSA INSERTION POINTER
Q1IREP DATA Q1IRSA EXTRACTION POINTER
Q1IRSA RES SYNRRC RESERVE ALLOWED NUMBER
Q1IRFI EQU * END OF BLOCK
*
*
* THE ACKNOWLEDGE QUEUE
*
*
Q1AC EQU * START OF QUEUE
Q1ACMI DATA Q1ACSA MINIMUM VALUE OF POINTER
Q1ACMA DATA Q1ACFI MAXIMUM VALUE OF POINTER
Q1ACNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q1ACNN DATA Q1ACFI-Q1ACSA NUMBER OF FREE POSITIONS
Q1ACIP DATA Q1ACSA INSERTION POINTER
Q1ACEP DATA Q1ACSA EXTRACTION POINTER
Q1ACSA RES SYTRWN RESERVE ALLOWED NUMBER
Q1ACFI EQU * END OF BLOCK
*
*
* THE SEND QUEUE
*
*
Q1SC EQU * START OF QUEUE
Q1SCMI DATA Q1SCSA MINIMUM VALUE OF POINTER
Q1SCMA DATA Q1SCFI MAXIMUM VALUE OF POINTER
Q1SCNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q1SCNN DATA Q1SCFI-Q1SCSA NUMBER OF FREE POSITIONS
Q1SCIP DATA Q1SCSA INSERTION POINTER
Q1SCEP DATA Q1SCSA EXTRACTION POINTER
Q1SCSA RES SYNRTR RESERVE ALLOWED NUMBER
Q1SCFI EQU * END OF BLOCK
*
*
* THE INTERRUPT COMPLETION QUEUE
*
*
Q1CO EQU * START OF QUEUE
Q1COMI DATA Q1COSA MINIMUM VALUE OF POINTER
Q1COMA DATA Q1COFI MAXIMUM VALUE OF POINTER
Q1CONF DATA 0 NUMBER OF QUEUED ELEMENTS
Q1CONN DATA Q1COFI-Q1COSA NUMBER OF FREE POSITIONS
Q1COIP DATA Q1COSA INSERTION POINTER
Q1COEP DATA Q1COSA EXTRACTION POINTER
Q1COSA RES SYNRRC+SYUBNR+4 RESERVE ALLOWED NUMBER
Q1COFI EQU * END OF BLOCK
*
*
* THE QUEUE OF LINE ECBS
*
*
Q1LE EQU * START OF QUEUE
Q1LEMI DATA Q1LESA MINIMUM VALUE OF POINTER
Q1LEMA DATA Q1LEFI MAXIMUM VALUE OF POINTER
Q1LENF DATA Q1LEFI-Q1LESA NUMBER OF QUEUED ELEMENTS
Q1LENN DATA 0 NUMBER OF FREE POSITIONS
Q1LEIP DATA Q1LESA INSERTION POINTER
Q1LEEP DATA Q1LESA EXTRACTION POINTER
Q1LESA EQU *
***** MAXIMUM 12 LINE ECB'S RESERVED
*
DATA Q1LEC1
DATA Q1LEC1+12
DATA Q1LEC1+24
IFF NRLECB=3
DATA Q1LEC1+36
IFF NRLECB=4
DATA Q1LEC1+48
IFF NRLECB=5
DATA Q1LEC1+60
IFF NRLECB=6
DATA Q1LEC1+72
IFF NRLECB=7
DATA Q1LEC1+84
IFF NRLECB=8
DATA Q1LEC1+96
IFF NRLECB=9
DATA Q1LEC1+108
IFF NRLECB=10
DATA Q1LEC1+120
IFF NRLECB=11
DATA Q1LEC1+132
IFF NRLECB=12
DATA Q1LEC1+144
IFF NRLECB=13
DATA Q1LEC1+156
IFF NRLECB=14
DATA Q1LEC1+168
IFF NRLECB=15
XIF
Q1LEFI EQU * END OF BLOCK
*
* IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED
*
Q1LEC1 EQU *
RES NRLECB WORD 0
RES NRLECB WORD 1
RES NRLECB WORD 2
RES NRLECB WORD 3
RES NRLECB WORD 4
RES NRLECB WORD 5
IFT LINE2=1
EJECT
***** FIRST PART *****
*
DATA 'PARTA2'
PARTA2 EQU * START OF TABLE
*
* DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE
*
DW2502 EQU *
DATA 'DC' CHANNEL PARAMETER
DATA /8000 STATUS
DATA 0 ECB-ADDRESS
DATA 0 ORDER
DATA DRDC25 POINTER TO ADDRESS BLOCK
DATA 0 TTAB-ADDRESS
DATA 0 WAIT/ACTIVATION INDICATOR
DATA 0 TERMINAL QUEUE
DATA 0
DATA 0
DATA 0
DATA 0 ECHO DEVICE
DATA PARTA2 PARAMETER TABLE ADDRESS
*
DATA 0
* THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
* BIT 0 = IN.FRMR/IN.CMDR
* 1 = IN.UA
* 2 = IN.DM
* 3 = IN.SABM/IN.SARM
* 4 = IN.DISC
* 5 = IN.RNR
* 6 = IN.REJ
* 7 = IN.F
* 8 = IN.TRI
* 9 = IN.ACK
* 10 = IN.P
* 11 = ** SPARE **
* 12 = ** SPARE **
* 13 = ** SPARE **
* 14 = ** SPARE **
* 15 = ** SPARE **
*
DATA 0
*
* OUTSTANDING P-BIT INDICATOR
DATA 0
*
* CONNECTION STATE VARIABLE
DATA 0
*
* TIMER STATE
DATA 0
*
* SINK STATE
DATA 0
* RECEIVER RESET INDICATION
DATA 0
*
* REMOTE FREE INDICATION
DATA 0
*
* NEW N(R) RECEIVED INDICATOR
DATA 0
*
* SEND STATE VARIABLE V(S)
DATA 0
*
* RECEIVE STATE VARIABLE V(R)
DATA 0
*
* MAXIMUM VALUE OF V(S) HAS REACHED
DATA 0 UPDATED TOGETHER WITH V(S)
*
* LAST VALUE OF N(R) RECEIVED
DATA 0 FROM OPPOSITE SIDE
*
* NUMBER OF FRAMES TO BE SEND
DATA 0
*
* NUMBER OF ACKNOWLEDGES TO BE RECEIVED
DATA 0 RECEIVED
*
* NUMBER OF RETRIES
DATA 0
DATA SYADRS RESPONSE ADDRESS
DATA SYADCM COMMAND ADDRESS
* FRAME TYPE IDENTIFIER
DATA 0
* ILLEGAL I-FIELD INDICATION
DATA 0
* CF-STACK AREA
DATA STCK2A
* SAVE AREA FOR REGISTERS
RES 5 SAVE AREA FOR REGISTERS
* STACK BASE FOR INTERRUPTS DURING BUSY
DATA STCK2B STACKBASE ENTRY
DATA 0
DATA 0
DATA 0
DATA 0
* SAVE AREA FOR REGISTERS IN RECEIVER
DATA 0
DATA 0
DATA 0 ADDRESS AND CONTROL FIELD FOR TRANSMITTER
DATA 0 ADDITIONAL INFO FOR CMDR FRAME
DATA 0
*
EJECT
*
* QUE ADDRESSES BELONGING TO ONE LIFE OF HDLC
*
*
DATA Q2ER
DATA Q2IR
DATA Q2AC
DATA Q2CO
Q2SCAD EQU *-PARTA2 ENTRY IN TABLE FOR OUTPUT QUEUES
DATA Q2SC ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
DATA Q2LE
*
* ADDRESS FIRST LINE ECB
DATA Q2LEC1 *****TEM******
*
EJECT
***** SECOND PART *****
*
*
* WILL CONTAIN THE N(R) OF THE RECEIVED FRAME
DATA 0 RECEIVED FRAME
DATA DW2502 DWT ADDRESS
DATA 0
DATA 0
DATA 0
DATA -1
DATA -1
DATA FC:LN2
* ADDRESS TIMER ECB
DATA TIMEC2 THIS ECB MUST BE DEFINED FOR ANY LINE
DATA 0
DATA 0
DATA 0
DATA 0
DATA 0
DATA 0
* INIT POINTER
DATA SAVBF2
IFT TRACE=1
DATA CURTR2 CURRENT TRACE BUFFER POINTER
DATA TRAST2
DATA TREND2
XIF
IFT LINE2+LOG=2
DATA CURLG2 CURRENT LOG BUFFER POINTER
DATA LOGST2
DATA LGEND2
XIF
IFT LINE2+STAT=2
DATA STAST2 START STATISTICAL AREA
DATA STEND2
XIF
IFT LINE2=1
DATA -100
EJECT
*
RES 10 CALL FUNCTION STACK
STCK2A EQU *-2
*
RES 3 CALL FUNC STACK FOR INTERR. REQ.
STCK2B EQU *-2
*
TIMEC2 EQU *
DATA FC:LN2 TIMER ECB
DATA 0,0,0,0,ORTIL1
*
SAVBF2 EQU *
RES SYUBNR
*
IFT LINE2+TRACE=2
CURTR2 EQU *
TRAST2 EQU *
RES 100 TRACE AREA
TREND2 EQU *
XIF
*
IFT LINE2+LOG=2
CURLG2 EQU *
LOGST2 EQU *
RES 50 LOG AREA
LGEND2 EQU *
XIF
*
IFT LINE2+STAT=2
STAST2 EQU *
RORG *+STALNG STATISTICAL AREA
STEND2 EQU *
XIF
IFT LINE2=1
EJECT
*
*
* THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
* EVENTS ARE READY
*
*
Q2ER EQU * START OF QUEUE
Q2ERMI DATA Q2ERSA MINIMUM VALUE OF POINTER
Q2ERMA DATA Q2ERFI MAXIMUM VALUE OF POINTER
Q2ERNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q2ERNN DATA Q2ERFI-Q2ERSA NUMBER OF FREE POSITIONS
Q2ERIP DATA Q2ERSA INSERTION POINTER
Q2EREP DATA Q2ERSA EXTRACTION POINTER
Q2ERSA RES SYNRRC+SYNRTR+1 RESERVE ALLOWED NUMBER
Q2ERFI EQU * END OF BLOCK
*
*
* THE INPUT REQUEST QUEUE
*
*
Q2IR EQU * START OF QUEUE
Q2IRMI DATA Q2IRSA MINIMUM VALUE OF POINTER
Q2IRMA DATA Q2IRFI MAXIMUM VALUE OF POINTER
Q2IRNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q2IRNN DATA Q2IRFI-Q2IRSA NUMBER OF FREE POSITIONS
Q2IRIP DATA Q2IRSA INSERTION POINTER
Q2IREP DATA Q2IRSA EXTRACTION POINTER
Q2IRSA RES SYNRRC RESERVE ALLOWED NUMBER
Q2IRFI EQU * END OF BLOCK
*
*
* THE ACKNOWLEDGE QUEUE
*
*
Q2AC EQU * START OF QUEUE
Q2ACMI DATA Q2ACSA MINIMUM VALUE OF POINTER
Q2ACMA DATA Q2ACFI MAXIMUM VALUE OF POINTER
Q2ACNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q2ACNN DATA Q2ACFI-Q2ACSA NUMBER OF FREE POSITIONS
Q2ACIP DATA Q2ACSA INSERTION POINTER
Q2ACEP DATA Q2ACSA EXTRACTION POINTER
Q2ACSA RES SYTRWN RESERVE ALLOWED NUMBER
Q2ACFI EQU * END OF BLOCK
*
*
* THE SEND QUEUE
*
*
Q2SC EQU * START OF QUEUE
Q2SCMI DATA Q2SCSA MINIMUM VALUE OF POINTER
Q2SCMA DATA Q2SCFI MAXIMUM VALUE OF POINTER
Q2SCNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q2SCNN DATA Q2SCFI-Q2SCSA NUMBER OF FREE POSITIONS
Q2SCIP DATA Q2SCSA INSERTION POINTER
Q2SCEP DATA Q2SCSA EXTRACTION POINTER
Q2SCSA RES SYNRTR RESERVE ALLOWED NUMBER
Q2SCFI EQU * END OF BLOCK
*
*
* THE INTERRUPT COMPLETION QUEUE
*
*
Q2CO EQU * START OF QUEUE
Q2COMI DATA Q2COSA MINIMUM VALUE OF POINTER
Q2COMA DATA Q2COFI MAXIMUM VALUE OF POINTER
Q2CONF DATA 0 NUMBER OF QUEUED ELEMENTS
Q2CONN DATA Q2COFI-Q2COSA NUMBER OF FREE POSITIONS
Q2COIP DATA Q2COSA INSERTION POINTER
Q2COEP DATA Q2COSA EXTRACTION POINTER
Q2COSA RES SYNRRC+SYUBNR+4 RESERVE ALLOWED NUMBER
Q2COFI EQU * END OF BLOCK
*
*
* THE QUEUE OF LINE ECBS
*
*
Q2LE EQU * START OF QUEUE
Q2LEMI DATA Q2LESA MINIMUM VALUE OF POINTER
Q2LEMA DATA Q2LEFI MAXIMUM VALUE OF POINTER
Q2LENF DATA Q2LEFI-Q2LESA NUMBER OF QUEUED ELEMENTS
Q2LENN DATA 0 NUMBER OF FREE POSITIONS
Q2LEIP DATA Q2LESA INSERTION POINTER
Q2LEEP DATA Q2LESA EXTRACTION POINTER
Q2LESA EQU *
***** MAXIMUM 12 LINE ECB'S RESERVED
*
DATA Q2LEC1
DATA Q2LEC1+12
DATA Q2LEC1+24
IFF NRLECB=3
DATA Q2LEC1+36
IFF NRLECB=4
DATA Q2LEC1+48
IFF NRLECB=5
DATA Q2LEC1+60
IFF NRLECB=6
DATA Q2LEC1+72
IFF NRLECB=7
DATA Q2LEC1+84
IFF NRLECB=8
DATA Q2LEC1+96
IFF NRLECB=9
DATA Q2LEC1+108
IFF NRLECB=10
DATA Q2LEC1+120
IFF NRLECB=11
DATA Q2LEC1+132
IFF NRLECB=12
DATA Q2LEC1+144
IFF NRLECB=13
DATA Q2LEC1+156
IFF NRLECB=14
DATA Q2LEC1+168
IFF NRLECB=15
XIF
IFT LINE2=1
Q2LEFI EQU * END OF BLOCK
*
* IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED
*
Q2LEC1 EQU *
RES NRLECB WORD 0
RES NRLECB WORD 1
RES NRLECB WORD 2
RES NRLECB WORD 3
RES NRLECB WORD 4
RES NRLECB WORD 5
*
XIF
IFT LINE3=1
EJECT
***** FIRST PART *****
*
DATA 'PARTA3'
PARTA3 EQU * START OF TABLE
*
* DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE
*
DW2503 EQU *
DATA 'DC' CHANNEL PARAMETER
DATA /8000 STATUS
DATA 0 ECB-ADDRESS
DATA 0 ORDER
DATA DRDC25 POINTER TO ADDRESS BLOCK
DATA 0 TTAB-ADDRESS
DATA 0 WAIT/ACTIVATION INDICATOR
DATA 0 TERMINAL QUEUE
DATA 0
DATA 0
DATA 0
DATA 0 ECHO DEVICE
DATA PARTA3 PARAMETER TABLE ADDRESS
*
DATA 0
* THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
* BIT 0 = IN.FRMR/IN.CMDR
* 1 = IN.UA
* 2 = IN.DM
* 3 = IN.SABM/IN.SARM
* 4 = IN.DISC
* 5 = IN.RNR
* 6 = IN.REJ
* 7 = IN.F
* 8 = IN.TRI
* 9 = IN.ACK
* 10 = IN.P
* 11 = ** SPARE **
* 12 = ** SPARE **
* 13 = ** SPARE **
* 14 = ** SPARE **
* 15 = ** SPARE **
*
DATA 0
*
* OUTSTANDING P-BIT INDICATOR
DATA 0
*
* CONNECTION STATE VARIABLE
DATA 0
*
* TIMER STATE
DATA 0
*
* SINK STATE
DATA 0
* RECEIVER RESET INDICATION
DATA 0
*
* REMOTE FREE INDICATION
DATA 0
*
* NEW N(R) RECEIVED INDICATOR
DATA 0
*
* SEND STATE VARIABLE V(S)
DATA 0
*
* RECEIVE STATE VARIABLE V(R)
DATA 0
*
* MAXIMUM VALUE OF V(S) HAS REACHED
DATA 0 UPDATED TOGETHER WITH V(S)
*
* LAST VALUE OF N(R) RECEIVED
DATA 0 FROM OPPOSITE SIDE
*
* NUMBER OF FRAMES TO BE SEND
DATA 0
*
* NUMBER OF ACKNOWLEDGES TO BE RECEIVED
DATA 0 RECEIVED
*
* NUMBER OF RETRIES
DATA 0
DATA SYADRS RESPONSE ADDRESS
DATA SYADCM COMMAND ADDRESS
* FRAME TYPE IDENTIFIER
DATA 0
* ILLEGAL I-FIELD INDICATION
DATA 0
* CF-STACK AREA
DATA STCK3A
* SAVE AREA FOR REGISTERS
RES 5 SAVE AREA FOR REGISTERS
* STACK BASE FOR INTERRUPTS DURING BUSY
DATA STCK3B STACKBASE ENTRY
DATA 0
DATA 0
DATA 0
DATA 0
* SAVE AREA FOR REGISTERS IN RECEIVER
DATA 0
DATA 0
DATA 0 ADDRESS AND CONTROL FIELD FOR TRANSMITTER
DATA 0 ADDITIONAL INFO FOR CMDR FRAME
DATA 0
*
EJECT
*
* QUE ADDRESSES BELONGING TO ONE LIFE OF HDLC
*
*
DATA Q3ER
DATA Q3IR
DATA Q3AC
DATA Q3CO
Q3SCAD EQU *-PARTA3 ENTRY IN TABLE FOR OUTPUT QUEUES
DATA Q3SC ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
DATA Q3LE
*
* ADDRESS FIRST LINE ECB
DATA Q3LEC1 *****TEM******
*
EJECT
***** SECOND PART *****
*
*
* WILL CONTAIN THE N(R) OF THE RECEIVED FRAME
DATA 0 RECEIVED FRAME
DATA DW2503 DWT ADDRESS
DATA 0
DATA 0
DATA 0
DATA -1
DATA -1
DATA FC:LN3
* ADDRESS TIMER ECB
DATA TIMEC3 THIS ECB MUST BE DEFINED FOR ANY LINE
DATA 0
DATA 0
DATA 0
DATA 0
DATA 0
DATA 0
* INIT POINTER
DATA SAVBF3
IFT TRACE=1
DATA CURTR3 CURRENT TRACE BUFFER POINTER
DATA TRAST3
DATA TREND3
XIF
IFT LINE3+LOG=2
DATA CURLG3 CURRENT LOG BUFFER POINTER
DATA LOGST3
DATA LGEND3
XIF
IFT LINE3+STAT=2
DATA STAST3 START STATISTICAL AREA
DATA STEND3
XIF
IFT LINE3=1
DATA -100
EJECT
*
RES 10 CALL FUNCTION STACK
STCK3A EQU *-2
*
RES 3 CALL FUNC STACK FOR INTERR. REQ.
STCK3B EQU *-2
*
TIMEC3 EQU *
DATA FC:LN3 TIMER ECB
DATA 0,0,0,0,ORTIL1
*
SAVBF3 EQU *
RES SYUBNR
*
IFT LINE3+TRACE=2
CURTR3 EQU *
TRAST3 EQU *
RES 100 TRACE AREA
TREND3 EQU *
XIF
*
IFT LINE3+LOG=2
CURLG3 EQU *
LOGST3 EQU *
RES 50
LGEND3 EQU *
XIF
*
IFT LINE3+STAT=2
STAST3 EQU *
RORG *+STALNG STATISTICAL AREA
STEND3 EQU *
XIF
IFT LINE3=1
EJECT
*
*
* THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
* EVENTS ARE READY
*
*
Q3ER EQU * START OF QUEUE
Q3ERMI DATA Q3ERSA MINIMUM VALUE OF POINTER
Q3ERMA DATA Q3ERFI MAXIMUM VALUE OF POINTER
Q3ERNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q3ERNN DATA Q3ERFI-Q3ERSA NUMBER OF FREE POSITIONS
Q3ERIP DATA Q3ERSA INSERTION POINTER
Q3EREP DATA Q3ERSA EXTRACTION POINTER
Q3ERSA RES SYNRRC+SYNRTR+1 RESERVE ALLOWED NUMBER
Q3ERFI EQU * END OF BLOCK
*
*
* THE INPUT REQUEST QUEUE
*
*
Q3IR EQU * START OF QUEUE
Q3IRMI DATA Q3IRSA MINIMUM VALUE OF POINTER
Q3IRMA DATA Q3IRFI MAXIMUM VALUE OF POINTER
Q3IRNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q3IRNN DATA Q3IRFI-Q3IRSA NUMBER OF FREE POSITIONS
Q3IRIP DATA Q3IRSA INSERTION POINTER
Q3IREP DATA Q3IRSA EXTRACTION POINTER
Q3IRSA RES SYNRRC RESERVE ALLOWED NUMBER
Q3IRFI EQU * END OF BLOCK
*
*
* THE ACKNOWLEDGE QUEUE
*
*
Q3AC EQU * START OF QUEUE
Q3ACMI DATA Q3ACSA MINIMUM VALUE OF POINTER
Q3ACMA DATA Q3ACFI MAXIMUM VALUE OF POINTER
Q3ACNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q3ACNN DATA Q3ACFI-Q3ACSA NUMBER OF FREE POSITIONS
Q3ACIP DATA Q3ACSA INSERTION POINTER
Q3ACEP DATA Q3ACSA EXTRACTION POINTER
Q3ACSA RES SYTRWN RESERVE ALLOWED NUMBER
Q3ACFI EQU * END OF BLOCK
*
*
* THE SEND QUEUE
*
*
Q3SC EQU * START OF QUEUE
Q3SCMI DATA Q3SCSA MINIMUM VALUE OF POINTER
Q3SCMA DATA Q3SCFI MAXIMUM VALUE OF POINTER
Q3SCNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q3SCNN DATA Q3SCFI-Q3SCSA NUMBER OF FREE POSITIONS
Q3SCIP DATA Q3SCSA INSERTION POINTER
Q3SCEP DATA Q3SCSA EXTRACTION POINTER
Q3SCSA RES SYNRTR RESERVE ALLOWED NUMBER
Q3SCFI EQU * END OF BLOCK
*
*
* THE INTERRUPT COMPLETION QUEUE
*
*
Q3CO EQU * START OF QUEUE
Q3COMI DATA Q3COSA MINIMUM VALUE OF POINTER
Q3COMA DATA Q3COFI MAXIMUM VALUE OF POINTER
Q3CONF DATA 0 NUMBER OF QUEUED ELEMENTS
Q3CONN DATA Q3COFI-Q3COSA NUMBER OF FREE POSITIONS
Q3COIP DATA Q3COSA INSERTION POINTER
Q3COEP DATA Q3COSA EXTRACTION POINTER
Q3COSA RES SYNRRC+SYUBNR+4 RESERVE ALLOWED NUMBER
Q3COFI EQU * END OF BLOCK
*
*
* THE QUEUE OF LINE ECBS
*
*
Q3LE EQU * START OF QUEUE
Q3LEMI DATA Q3LESA MINIMUM VALUE OF POINTER
Q3LEMA DATA Q3LEFI MAXIMUM VALUE OF POINTER
Q3LENF DATA Q3LEFI-Q3LESA NUMBER OF QUEUED ELEMENTS
Q3LENN DATA 0 NUMBER OF FREE POSITIONS
Q3LEIP DATA Q3LESA INSERTION POINTER
Q3LEEP DATA Q3LESA EXTRACTION POINTER
Q3LESA EQU *
***** MAXIMUM 12 LINE ECB'S RESERVED
*
DATA Q3LEC1
DATA Q3LEC1+12
DATA Q3LEC1+24
IFF NRLECB=3
DATA Q3LEC1+36
IFF NRLECB=4
DATA Q3LEC1+48
IFF NRLECB=5
DATA Q3LEC1+60
IFF NRLECB=6
DATA Q3LEC1+72
IFF NRLECB=7
DATA Q3LEC1+84
IFF NRLECB=8
DATA Q3LEC1+96
IFF NRLECB=9
DATA Q3LEC1+108
IFF NRLECB=10
DATA Q3LEC1+120
IFF NRLECB=11
DATA Q3LEC1+132
IFF NRLECB=12
DATA Q3LEC1+144
IFF NRLECB=13
DATA Q3LEC1+156
IFF NRLECB=14
DATA Q3LEC1+168
IFF NRLECB=15
XIF
IFT LINE3=1
Q3LEFI EQU * END OF BLOCK
*
* IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED
*
Q3LEC1 EQU *
RES NRLECB WORD 0
RES NRLECB WORD 1
RES NRLECB WORD 2
RES NRLECB WORD 3
RES NRLECB WORD 4
RES NRLECB WORD 5
*
XIF
IFT LINE4=1
EJECT
***** FIRST PART *****
*
DATA 'PARTA4'
PARTA4 EQU * START OF TABLE
*
* DEVICE WORK TABLE FOR DATA-COMMUNICATION DEVICE
*
DW2504 EQU *
DATA 'DC' CHANNEL PARAMETER
DATA /8000 STATUS
DATA 0 ECB-ADDRESS
DATA 0 ORDER
DATA DRDC25 POINTER TO ADDRESS BLOCK
DATA 0 TTAB-ADDRESS
DATA 0 WAIT/ACTIVATION INDICATOR
DATA 0 TERMINAL QUEUE
DATA 0
DATA 0
DATA 0
DATA 0 ECHO DEVICE
DATA PARTA4 PARAMETER TABLE ADDRESS
*
DATA 0
* THIS WORD WILL CONTAIN THE FOLLOWING VARIABLES
* BIT 0 = IN.FRMR/IN.CMDR
* 1 = IN.UA
* 2 = IN.DM
* 3 = IN.SABM/IN.SARM
* 4 = IN.DISC
* 5 = IN.RNR
* 6 = IN.REJ
* 7 = IN.F
* 8 = IN.TRI
* 9 = IN.ACK
* 10 = IN.P
* 11 = ** SPARE **
* 12 = ** SPARE **
* 13 = ** SPARE **
* 14 = ** SPARE **
* 15 = ** SPARE **
*
DATA 0
*
* OUTSTANDING P-BIT INDICATOR
DATA 0
*
* CONNECTION STATE VARIABLE
DATA 0
*
* TIMER STATE
DATA 0
*
* SINK STATE
DATA 0
* RECEIVER RESET INDICATION
DATA 0
*
* REMOTE FREE INDICATION
DATA 0
*
* NEW N(R) RECEIVED INDICATOR
DATA 0
*
* SEND STATE VARIABLE V(S)
DATA 0
*
* RECEIVE STATE VARIABLE V(R)
DATA 0
*
* MAXIMUM VALUE OF V(S) HAS REACHED
DATA 0 UPDATED TOGETHER WITH V(S)
*
* LAST VALUE OF N(R) RECEIVED
DATA 0 FROM OPPOSITE SIDE
*
* NUMBER OF FRAMES TO BE SEND
DATA 0
*
* NUMBER OF ACKNOWLEDGES TO BE RECEIVED
DATA 0 RECEIVED
*
* NUMBER OF RETRIES
DATA 0
DATA SYADRS RESPONSE ADDRESS
DATA SYADCM COMMAND ADDRESS
* FRAME TYPE IDENTIFIER
DATA 0
* ILLEGAL I-FIELD INDICATION
DATA 0
* CF-STACK AREA
DATA STCK4A
* SAVE AREA FOR REGISTERS
RES 5 SAVE AREA FOR REGISTERS
* STACK BASE FOR INTERRUPTS DURING BUSY
DATA STCK4B STACKBASE ENTRY
DATA 0
DATA 0
DATA 0
DATA 0
* SAVE AREA FOR REGISTERS IN RECEIVER
DATA 0
DATA 0
DATA 0 ADDRESS AND CONTROL FIELD FOR TRANSMITTER
DATA 0 ADDITIONAL INFO FOR CMDR FRAME
DATA 0
*
EJECT
*
* QUE ADDRESSES BELONGING TO ONE LIFE OF HDLC
*
*
DATA Q4ER
DATA Q4IR
DATA Q4AC
DATA Q4CO
Q4SCAD EQU *-PARTA4 ENTRY IN TABLE FOR OUTPUT QUEUES
DATA Q4SC ADDRESS OF TEMPORARY RETRANSMISSION QUEUE
DATA Q4LE
*
* ADDRESS FIRST LINE ECB
DATA Q4LEC1 *****TEM******
*
EJECT
***** SECOND PART *****
*
*
* WILL CONTAIN THE N(R) OF THE RECEIVED FRAME
DATA 0 RECEIVED FRAME
DATA DW2504 DWT ADDRESS
DATA 0
DATA 0
DATA 0
DATA -1
DATA -1
DATA FC:LN4
* ADDRESS TIMER ECB
DATA TIMEC4 THIS ECB MUST BE DEFINED FOR ANY LINE
DATA 0
DATA 0
DATA 0
DATA 0
DATA 0
DATA 0
* INIT POINTER
DATA SAVBF4
IFT TRACE=1
DATA CURTR4 CURRENT TRACE BUFFER POINTER
DATA TRAST4
DATA TREND4
XIF
IFT LINE4+LOG=2
DATA CURLG4 CURRENT LOG BUFFER POINTER
DATA LOGST4
DATA LGEND4
XIF
IFT LINE4+STAT=2
DATA STAST4 START STATISTICAL AREA
DATA STEND4
XIF
IFT LINE4=1
DATA -100
EJECT
*
RES 10 CALL FUNCTION STACK
STCK4A EQU *-2
*
RES 3 CALL FUNC STACK FOR INTERR. REQ.
STCK4B EQU *-2
*
TIMEC4 EQU *
DATA FC:LN4 TIMER ECB
DATA 0,0,0,0,ORTIL1
*
SAVBF4 EQU *
RES SYUBNR
*
IFT LINE4+TRACE=2
CURTR4 EQU *
TRAST4 EQU *
RES 100 TRACE AREA
TREND4 EQU *
XIF
*
IFT LINE4+LOG=2
CURLG4 EQU *
LOGST4 EQU *
RES 50 LOG AREA
LGEND4 EQU *
XIF
*
IFT LINE4+STAT=2
STAST4 EQU *
RORG *+STALNG
STEND4 EQU *
XIF
IFT LINE4=1
EJECT
*
*
* THIS QUE KEEPS THE ELEMENTS FROM WHICH THE
* EVENTS ARE READY
*
*
Q4ER EQU * START OF QUEUE
Q4ERMI DATA Q4ERSA MINIMUM VALUE OF POINTER
Q4ERMA DATA Q4ERFI MAXIMUM VALUE OF POINTER
Q4ERNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q4ERNN DATA Q4ERFI-Q4ERSA NUMBER OF FREE POSITIONS
Q4ERIP DATA Q4ERSA INSERTION POINTER
Q4EREP DATA Q4ERSA EXTRACTION POINTER
Q4ERSA RES SYNRRC+SYNRTR+1 RESERVE ALLOWED NUMBER
Q4ERFI EQU * END OF BLOCK
*
*
* THE INPUT REQUEST QUEUE
*
*
Q4IR EQU * START OF QUEUE
Q4IRMI DATA Q4IRSA MINIMUM VALUE OF POINTER
Q4IRMA DATA Q4IRFI MAXIMUM VALUE OF POINTER
Q4IRNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q4IRNN DATA Q4IRFI-Q4IRSA NUMBER OF FREE POSITIONS
Q4IRIP DATA Q4IRSA INSERTION POINTER
Q4IREP DATA Q4IRSA EXTRACTION POINTER
Q4IRSA RES SYNRRC RESERVE ALLOWED NUMBER
Q4IRFI EQU * END OF BLOCK
*
*
* THE ACKNOWLEDGE QUEUE
*
*
Q4AC EQU * START OF QUEUE
Q4ACMI DATA Q4ACSA MINIMUM VALUE OF POINTER
Q4ACMA DATA Q4ACFI MAXIMUM VALUE OF POINTER
Q4ACNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q4ACNN DATA Q4ACFI-Q4ACSA NUMBER OF FREE POSITIONS
Q4ACIP DATA Q4ACSA INSERTION POINTER
Q4ACEP DATA Q4ACSA EXTRACTION POINTER
Q4ACSA RES SYTRWN RESERVE ALLOWED NUMBER
Q4ACFI EQU * END OF BLOCK
*
*
* THE SEND QUEUE
*
*
Q4SC EQU * START OF QUEUE
Q4SCMI DATA Q4SCSA MINIMUM VALUE OF POINTER
Q4SCMA DATA Q4SCFI MAXIMUM VALUE OF POINTER
Q4SCNF DATA 0 NUMBER OF QUEUED ELEMENTS
Q4SCNN DATA Q4SCFI-Q4SCSA NUMBER OF FREE POSITIONS
Q4SCIP DATA Q4SCSA INSERTION POINTER
Q4SCEP DATA Q4SCSA EXTRACTION POINTER
Q4SCSA RES SYNRTR RESERVE ALLOWED NUMBER
Q4SCFI EQU * END OF BLOCK
*
*
* THE INTERRUPT COMPLETION QUEUE
*
*
Q4CO EQU * START OF QUEUE
Q4COMI DATA Q4COSA MINIMUM VALUE OF POINTER
Q4COMA DATA Q4COFI MAXIMUM VALUE OF POINTER
Q4CONF DATA 0 NUMBER OF QUEUED ELEMENTS
Q4CONN DATA Q4COFI-Q4COSA NUMBER OF FREE POSITIONS
Q4COIP DATA Q4COSA INSERTION POINTER
Q4COEP DATA Q4COSA EXTRACTION POINTER
Q4COSA RES SYNRRC+SYUBNR+4 RESERVE ALLOWED NUMBER
Q4COFI EQU * END OF BLOCK
*
*
* THE QUEUE OF LINE ECBS
*
*
Q4LE EQU * START OF QUEUE
Q4LEMI DATA Q4LESA MINIMUM VALUE OF POINTER
Q4LEMA DATA Q4LEFI MAXIMUM VALUE OF POINTER
Q4LENF DATA Q4LEFI-Q4LESA NUMBER OF QUEUED ELEMENTS
Q4LENN DATA 0 NUMBER OF FREE POSITIONS
Q4LEIP DATA Q4LESA INSERTION POINTER
Q4LEEP DATA Q4LESA EXTRACTION POINTER
Q4LESA EQU *
***** MAXIMUM 12 LINE ECB'S RESERVED
*
DATA Q4LEC1
DATA Q4LEC1+12
DATA Q4LEC1+24
IFF NRLECB=3
DATA Q4LEC1+36
IFF NRLECB=4
DATA Q4LEC1+48
IFF NRLECB=5
DATA Q4LEC1+60
IFF NRLECB=6
DATA Q4LEC1+72
IFF NRLECB=7
DATA Q4LEC1+84
IFF NRLECB=8
DATA Q4LEC1+96
IFF NRLECB=9
DATA Q4LEC1+108
IFF NRLECB=10
DATA Q4LEC1+120
IFF NRLECB=11
DATA Q4LEC1+132
IFF NRLECB=12
DATA Q4LEC1+144
IFF NRLECB=13
DATA Q4LEC1+156
IFF NRLECB=14
DATA Q4LEC1+168
IFF NRLECB=15
XIF
IFT LINE4=1
Q4LEFI EQU * END OF BLOCK
*
* IN THIS AREA ALL THE LINE ECB'S EXCEPT FOR THE TIMER ARE RESERVED
*
Q4LEC1 EQU *
RES NRLECB WORD 0
RES NRLECB WORD 1
RES NRLECB WORD 2
RES NRLECB WORD 3
RES NRLECB WORD 4
RES NRLECB WORD 5
*
*
XIF
IFT LINE4=0
* DUMMY DWT FOR LINE 4
DW2504 EQU *
XIF
IFT LINE3=0
* DUMMY DWT FOR LINE 3
DW2503 EQU *
XIF
IFT LINE2=0
* DUMMY DWT FOR LINE 2
DW2502 EQU *
XIF
EJECT
IFT IOPPC=0
***
** EQUIVALENCES FOR ALARM RECEIVE DATA
***
IFT IOPCON=1
ALARM EQU /C
XIF
IFT IOPPC=0
IFT IOPCON=0
ALARM EQU 4
XIF
IFT IOPPC=1
ALARM EQU /C RECEIVE ALARM DATA FOR IOP
XIF
EJECT
***
*** EQUIVALENCES FOR LINE 1
***
NRSBUF EQU SYUBNR-1
***
*** MAX.NUMBER OF ELEMENTS IN INPUT-REQUEST-QUEUE
NREQ01 EQU SYNRRC+NRSBUF
EJECT
***
*** INTERRUPT HANDLERS FOR LINE 1
***
*** RECEIVER INTERRUPT HANDLER
IHLCI1 EQU *
IH2501 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8 SAVE A1-A8 ON CF-STACK
LDKL A1,LCT1
ABL DRHLRC BRANCH TO GENERAL PART OF INTERRUPT
*** HANDLER
***
*** TRANSMITTER INTERRUPT HANDLER
IHLCU1 EQU *
IH2502 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8 SAVE A1-A8 ON CF-STACK
LDKL A1,LCT1B
ABL DRHLTR BRANCH TO GEN.PART OF INT.HANDLER
IFF SYNRLN=1
***
*** INTERRUPT HANDLERS FOR LINE 2
***
*** RECEIVER INTERRUPT HANDLER
IH2503 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8
LDKL A1,LCT2
ABL DRHLRC
***
*** TRANSMITTER INTERRUPT HANDLER
IH2504 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8
LDKL A1,LCT2B
ABL DRHLTR
***
IFF SYNRLN=2
***
*** INTERRUPT HANDLERS FOR LINE 3
**
*** RECEIVER INTERRUPT HANDLER
IH2505 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8
LDKL A1,LCT3
ABL DRHLRC
***
*** TRANSMITTER INTERRUPT HANDLER
IH2506 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8
LDKL A1,LCT3B
ABL DRHLTR
***
IFF SYNRLN=3
***
*** INTERRUPT HANDLERS FOR LINE 4
***
*** RECEIVER INTERRUPT HANDLER
IH2507 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8
LDKL A1,LCT4
ABL DRHLRC
***
*** TRANSMITTER INTERRUPT HANDLER
IH2508 EQU *
ST P,INTSAV SAVE INTERRUPT ADDRESS
CF A15,SAVE8
LDKL A1,LCT4B
ABL DRHLTR
***
XIF
*** DUMMY INTERRUPT ADDRESSES FOR NOT USED LINES
IFF SYNRLN=4
* DUMMY INTERRUPT ADDRESSES FOR LINE 4
IH2507 EQU *
IH2508 EQU *
IFF SYNRLN=3
* DUMMY INTERRUPT ADDRESSES FOR LINE 3
IH2505 EQU *
IH2506 EQU *
IFF SYNRLN=2
* DUMMY INTERRUPT ADDRESSES FOR LINE 2
IH2503 EQU *
IH2504 EQU *
XIF
HLT UNEXPECTED INTERRUPT
EJECT
***
** EQUIVALENCES FOR DRIVER STATUS
**
DRHALT EQU 0 HALT BEFORE DISCONNECT BEFORE CONNECT
DRWFDC EQU 1 WAIT FOR DISCONNECT BEFORE CONNECT
DRWFCR EQU 2 WAIT FOR CONNECT READY
DRCONE EQU 3 CONNECT
DRWFDR EQU 4 WAIT FOR NORMAL DISCONNECT READY
DRSTWA EQU 5 WAIT FOR STOP
DRSTEX EQU 6 STOP
DRDICO EQU 7 DISCONNECT
***
*** EQUIVALENCES FOR SENDER/RECEIVER STATUS
***
DRACT EQU 1 ACTIVE
DRINAC EQU 2 INACTIVE
IFT IOPPC=1
***
*** EQUIVALENCES FOR IOP-INDICATION
***
MIOP EQU /40 MASK FOR IOP IN I/O-INSTRUCTION
MSKIOP EQU /08 MASK FOR IOP IN ALARM
XIF
***
*** EQUIVALENCES FOR I/O-COMMANDS
***
CONNEC EQU 2 CONNECT-COMMAND
DISCON EQU 1 DISCONNECT COMMAND
WRITIO EQU /A TRANSMIT ON I/O-PROCESSOR
WRITPC EQU 2 TRANSMIT ON PROGRAMMED-CHANNEL
***
*** EQUIVALENCES FOR I/O-INSTRUCTION WITH A2
***
CIOINS EQU /42C0 CIO-INSTRUCTION
CIOHLT EQU /4280 CIO-HALT INSTRUCTION
WER EQU /7200 WER-INSTRUCTION
RER EQU /7A00 RER-INSTRUCTION
SSTINS EQU /4AC0 SST-INSTRUCTION
OTRINS EQU /4200 OTR-INSTRUCTION
OTR1 EQU /4240 OTR1-INSTRUCTION
ABORT EQU 1 ABORT-FLAG FOR OTR1
INRINS EQU /4A00 INR-INSTRUCTION
***
*** DISPLACEMENTS ON INPUT REQUEST-QUEUE
QMAX EQU 0 MAX.NR.OF ELEMENTS IN QUEUE
QINS EQU QMAX+2 INSERT-POINTER
QEXT EQU QINS+2 EXTRACT-POINTER
QUELE1 EQU QEXT+2 1ST ELEMENT IN QUEUE
***
*** EQUIVALENCES FOR RETURN-CODES
***
UNKNFC EQU 1 UNKNOWN FILE CODE
CIONAC EQU 2 REQUEST NOT ACCEPTED
UNKNDV EQU 3 UNKNOWN DEVICE ADDRESS
WRODST EQU 4 WRONG DRIVER STATUS
NOTALL EQU 8 INPUT/OUTPUT NOT ALLOWED AT THIS MOMENT
***
*** EQUIVALENCES FOR TYPE ON RETURN TO IDREQ
***
TYPECO EQU 1 TYPE=CONNECT
TYPEIN EQU 2 TYPE=INPUT FROM LINE
TYPEOU EQU 3 TYPE=OUTPUT TO LINE
TYPEDI EQU 4 TYPE=DISCONNECT
TYPEST EQU 5 TYPE = STOP
***
*** EQUIVALENCES FOR LCT
***
CAROFF EQU /20 CARRIER OFF BIT(10) IN STATUS WORD
INCLEN EQU 8 INCORRECT-LENGTH-BIT(12) IN STATUS WORD
NOTOPE EQU 1 MODEM NOT OPERABLE
IDLABO EQU /3000 IDLE AND ABORT ONE'S BIT
***
*** DISPLACEMENTS FOR LCT
***
DRSTAT EQU 0 DRIVER STATUS
DRRSTA EQU DRSTAT+2 RECEIVER-STATUS IN RECEIVER LCT
DRSSTA EQU DRRSTA SENDER STATUS IN SENDER-LCT
IFT IOPPC=1
DEVADD EQU DRRSTA+2 IOP-INDICATION+DEV.ADDR FOR ASSIGNED FC
XIF
IFT IOPPC=0
DEVADD EQU DRRSTA+2 DEVICEADDR.OF UNIT ASSIGNED TO FC
XIF
LIECB EQU DEVADD+2 ADDRESS OF LIECB OF REQUEST
BUFADD EQU LIECB+2 ADDRESS OF BUFFER
REQLEN EQU BUFADD+2 REQUESTED LENGTH IN WORDS(VARIABLE)
LENGTH EQU REQLEN+2 REQUESTED LENGTH IN WORDS(FIXED)
*** FOR RECEIVER LCT ONLY!
QUEUE EQU LENGTH+2 ADDRESS OF INPUT-REQUEST-QUEUE
RECDAT EQU QUEUE+2 CIO START (ALARM) RECEIVE DATA
RETRY EQU RECDAT+2 RETRY COUNTER FOR CIO-START RECEIVER
FILCOD EQU RETRY+2 FC ASSIGNED TO RECEIVER/TRANSM.UNIT
APROT EQU FILCOD+2 RETURN ADDRESS TO PROTOCOL
LCTEND EQU APROT+2 LENGTH OF RECEIVER-LCT IN CHARACTERS
EJECT
*** RECEIVER LCT
LCT1 EQU *
RES 1 DRIVER STATUS OF RECEIVER
RES 1 RECEIVER STATUS
DATA REDV01 STANDARD DEVICEADDRESS OF RECEIVER
RES 1 ADDRESS OF ECB
RES 1 ADDRESS OF I/O-BUFFER
RES 1 REQUESTED LENGTH IN WORDS(VARIABLE)
RES 1 REQUESTED LENGTH IN WORDS (FIXED)
DATA QUEU01 ADDRESS OF INPUT-REQUEST-QUEUE
DATA ALARM ALARM RECEIVE DATA PC
RES 1 RETRY COUNTER
RES 1 FILECODE ASSIGNED TO LINE
DATA IDREQ RETURN ADDRESS TO PROTOCOL
*** TRANSMITTER LCT
LCT1B EQU *
RES 1 DRIVER STATUS OF TRANSMITTER
RES 1 TRANSMITTER STATUS
DATA SEDV01 STANDARD DEVICE ADDRESS FOR TRANSM.
RES 1 ADDRESS OF ECB
RES 1 ADDRESS OD I/O-BUFFER
RES 1 REQUESTED LENGTH IN WORDS(VARIABLE)
RES 1 REQUESTED LENGTH IN WORDS (FIXED)
***
IFF SYNRLN=1
***
*** LCT'S FOR LINE 2
***
*** RECEIVER LCT
LCT2 EQU *
RES 2
DATA REDV02
RES 4
DATA QUEU02
DATA ALARM
RES 2
DATA IDREQ
***
*** TRANSMITTER LCT
LCT2B EQU *
RES 2
DATA SEDV02
RES 4
***
IFF SYNRLN=2
***
*** LCT'S FOR LINE 3
***
*** RECEIVER LCT
LCT3 EQU *
RES 2
DATA REDV03
RES 4
DATA QUEU03
DATA ALARM
RES 2
DATA IDREQ
***
*** TRANSMITTER LCT
LCT3B EQU *
RES 2
DATA SEDV03
RES 4
***
IFF SYNRLN=3
***
*** LCT'S FOR LINE 4
***
*** RECEIVER LCT
LCT4 EQU *
RES 2
DATA REDV04
RES 4
DATA QUEU04
DATA ALARM
RES 2
DATA IDREQ
***
*** TRANSMITTER LCT
LCT4B EQU *
RES 2
DATA SEDV04
RES 4
XIF
EJECT
LCTTAB EQU *
*** TABLE CONTAINING NR OF RECEIVER LCT'S AND THE ADDRESSES
DATA SYNRLN MAX.NUMBER OF RECEIVER LCT'S
DATA LCT1
IFF SYNRLN=1
DATA LCT2
IFF SYNRLN=2
DATA LCT3
IFF SYNRLN=3
DATA LCT4
XIF
***
QUEU01 EQU *
DATA NREQ01+NREQ01 2*NUMBER OF ELEMENTS IN QUEUE
RES 1 INSERT-POINTER
RES 1 EXTRACT-POINTER
RES NREQ01 ELEMENT-SAVE AREA
IFF SYNRLN=1
QUEU02 EQU *
DATA NREQ01+NREQ01
RES 2
RES NREQ01
IFF SYNRLN=2
QUEU03 EQU *
DATA NREQ01+NREQ01
RES 2
RES NREQ01
IFF SYNRLN=3
QUEU04 EQU *
DATA NREQ01+NREQ01
RES 2
RES NREQ01
XIF
EJECT
***
*** SUBROUTINE TO INITIATE THE LINE-CONTROL TABLES (LCT) AND THE
*** INPUT-REQUEST-QUEUE
*** ON ENTRY: A2 = LINE INDEX (2,4,6,....)
*** A7 = LOGICAL FILECODE OF LINE
*** ON EXIT : A1, A2 AND A3 ARE DESTROYED
***
INITIO EQU *
LD A2,LCTTAB,A2 A2:=ADDRESS OF RECEIVER LCT
*** SET LOGICAL FILECODE IN RECEIVER LCT
ST A7,FILCOD,A2
IFT IOLOG=1
CF A15,IN:LOG INITIATE LOG-I/O-AREA
XIF
RTN A5
EJECT
***
***************************************************************************
*** CONNECT MODEM FUNCTION
***************************************************************************
*** ON ENTRY:A8:=ADDRESS OF LIECB
*** ON EXIT :A1-A4 AND A6-A7 ARE DESTROYED
***
DRCONN EQU *
*** SCAN LINE CONTROL-TABLE ON FILECODE GIVEN IN LIECB
LDK A2,TYPECO
LDKL A6,CON100 A6:=RETURNADDR.IF LCT FOUND
RF INP050
CON100 EQU *
*** LCT FOUND WITH THE SAME FILECODE AS IN LIECB
IFT IOPPC=1
*** SET CHANNEL INDICATION IN LCT
LDK A3,MSKIOP MASK FOR IOP
AN A3,RECDAT,A1
RF(Z) CON120 NO IOP
*** SET IOP-INDICATION
LDK A3,MIOP A3 := IOP-INDICATION
SC A3,DEVADD,A1
SC A3,DEVADD+LCTEND,A1
CON120 EQU *
XIF
*** GENERATE CIO HALT TO BE SURE OF RECEIVER-HARDWARE-STATUS
INH
LDK A2,DRHALT
ST A2,DRSTAT,A1 SET DRIVERSTATUS OF RECEIVER
*** GENERATE CIO HALT TO BE SURE OF HARDWARE-STATUS OF SENDER/RECEIVER
LDK A4,LCTEND
ADR A4,A1 A4:=ADDRESS OF CORRESPONDING TRANSMITTER-LCT
ST A2,DRSTAT,A4 SET DRIVERSTATUS OF SENDER
LD A7,DEVADD,A1
LDR A3,A7
ORKL A3,CIOHLT
EXR A3
IFT IOLOG=1
CF A15,LGA3A2
XIF
RF(NA) RTNE21
LD A3,DEVADD,A4
ORKL A3,CIOHLT
EXR A3
IFT IOLOG=1
CF A15,LGA3A2
XIF
RF(NA) RTNE21
LDR A3,A7
ORKL A3,SSTINS
EXR A3
IFT IOLOG=1
CF A15,LGA3A2 LOGG IO-INSTR.
XIF
RF(NA) RTNE21
LDK A2,DRINAC
ST A2,DRRSTA,A1 SET RECEIVER STATUS INACTIVE
CM RETRY,A1 RESET RETRY COUNTER
ST A2,DRSSTA,A4 SET SENDER-STATUS INACTIVE
*** INITIATE INPUT-REQUEST-QUEUE
LD A2,QUEUE,A1 A2:=ADDRESS OF QUEUE-BUFFER
LDR A3,A2
ADK A3,QUELE1 A3:=ADDRESS OF 1ST ELEMENT IN QUEUE
ST A3,2,A2 SET INSERT-POINTER TO FIRST ELEMENT
ST A3,4,A2 SET EXTRACT POINTER TO FIRST ELEMENT IN QUEUE
*** CLEAR ELEMENTS IN REQUEST-QUEUE
LDR* A6,A2 A6:=2*NUMBER OF ELEMENTS IN QUEUE
CON150 EQU *
CMR A3
ADK A3,2
SUK A6,2
RB(P) CON150
*** GENERATE CIO DISCONNECT
LDK A2,DISCON
LDR A3,A7 A3:=DEVICEADDRESS OF RECEIVER-UNIT
ORKL A3,CIOINS
EXR A3 CIO DISCONNECT WITH A2
IFT IOLOG=1
CF A15,LGA3A2
XIF
RF(NA) RTNE21 DISCONNECT NOT ACCEPTED
LDK A3,DRWFDC
ST A3,DRSTAT,A1 SET DRIVER STATUS:WAIT FOR DISCONNECT
*** READY BEFORE CONNECT
ST A8,LIECB,A1
RF RTNOK2
EJECT
***************************************************************************
*** INPUT FROM LINE
***************************************************************************
*** ON ENTRY:A8:=ADDRESS OF LIECB
*** LIECB:WORD0=FILECODE
*** WORD1=BUFFERADDRESS
*** WORD2=REQUESTED LENGTH IN CHARACTERS
***
*** ON EXIT :A8:=ADDRESS OF LIECB
*** LIECB:WORD4=RETURN-CODE
***
DRINP EQU *
**
*** SEARCH RECEIVER LCT WITH SAME FILECODE AS IN LIECB
LDK A2,TYPEIN
LDKL A6,INP060 A6:=RETURNADDR.IF LCT FOUND
INP050 EQU *
RF OUT050
*** RECEIVER LCT FOUND;A1=ADDRESS OF LCT
INP060 EQU *
INH
*** TEST IF DRIVER STATUS IS CONNECT
LDK A3,DRCONE
CW A3,DRSTAT,A1
RF(NE) RTNE31 DRIVER STATUS NOT CONNECT
*** TEST IF RECEIVER STATUS IS ACTIVE
LDK A7,DRACT
CW A7,DRRSTA,A1
RF(NE) INP400
*** RECEIVER IS ACTIVE ; QUEUE REQUEST IN INPUT-REQUEST-QUEUE
*** TEST IF INPUT-QUEUE IS FULL
LD A3,QUEUE,A1 A3:=ADDRESS OF QUEUE
LD A2,QINS,A3 A2:=INSERT-POINTER
CW A2,QEXT,A3 COMPARE INSERT-POINTER WITH EXTRACT POINTER
RF(NE) INP200 INPUT-QUEUE NOT FULL
*** INSERT-POINTER =EXTRACT-POINTER
LDR* A7,A2
ABL(NZ) ERR040 INPUT-REQUEST-QUEUE FULL
*** INPUT QUEUE EMPTY OR NOT FULL
INP200 EQU *
LDR* A7,A2
*** SET ADDRESS OF LIECB IN INPUT-QUEUE
LDKL A6,RTNOK
ABL UPQUPO
*** RECEIVER NOT ACTIVE
INP400 EQU *
*** SAVE REQUESTED LENGTH IN WORDS IN LCT
LD A2,ECBRL,A8 A2:=LENGTH IN CHARACTERS
LD A6,ECBBA,A8 A6:=BUFFER-ADDRESS
LDR A3,A2
ADR A3,A6
*** TEST ON EVEN LENGTH
SRC A2,1
RF(NN) INP450 A2:=LENGTH IN WORDS
*** LENGTH IS ODD
*** SAVE FIRST NOT SIGN.CHARACTER AND SAVE-INDICATION
LDR A4,A2
LCR A4,A3
ST A4,ECBPR,A8
ANKL A2,/FFF
ADK A2,1 A2:=NUMBER OF WORDS+1
INP450 EQU *
IFT IOPPC=1
LC A3,DEVADD,A1
ANK A3,MIOP MASK FOR IOP
RF(Z) INP452 NO IOP
ADK A2,1
INP452 EQU *
XIF
IFT IOPPC=0
IFT IOPCON=1
ADK A2,1 FOR READ LENGTH=WRITE LENGTH
XIF
ST A2,LENGTH,A1 SAVE NR OF WORDS IN LCT
ST A2,REQLEN,A1 SAVE NR OF WORDS IN LCT
IFT IOPPC=1
LDR A3,A3
RF(Z) INP454 NO IOP
CF A15,WERREA
INP454 EQU *
XIF
IFT IOPPC=0
IFT IOPCON=1
**************************************************
*** FOR IOPROCESSOR ONLY!
*** PREPARE WER1 AND WER2 INSTRUCTION
CF A15,WERREA
******************************************
XIF
*** PREPARE CIO START INPUT INSTRUCTION
LD A2,RECDAT,A1 A2:=CIO START INPUT FLAG
LD A3,DEVADD,A1
ORKL A3,CIOINS
EXR A3 EXECUTE CIO START INPUT
IFT IOLOG=1
CF A15,LGA3A2
XIF
RTNE21 EQU *
RF(NA) RTNE22 CIO NOT ACCEPTED
ST A8,LIECB,A1 SET ADDRESS OF LIECB IN LCT
ST A6,BUFADD,A1 SET BUFFER ADDRESS IN LCT
*** SET RECEIVER STATUS ACTIVE
ST A7,DRRSTA,A1
RTNOK2 EQU *
*** RETURN TO CALLER WITH RETURNCODE OK AND IN ENABLE-MODE
RF RTNOK1
EJECT
***************************************************************************
*** OUTPUT TO LINE
***************************************************************************
*** ON ENTRY:A8=ADDRESS OF LIECB
*** LIECB:WORD0=FILECODE
*** WORD1=BUFFERADDRESS
*** WORD2=REQUESTED LENGTH
***
*** ON EXIT :A8:=ADDRESS OF LIECB
*** LIECB:WORD4=RETURNCODE
***
DROUT EQU *
*** SEARCH SENDER LCT WITH SAME FILECODE AS IN LIECB GIVEN
LDK A2,TYPEOU
LDKL A6,OUT100-1 A6:=RETURNADDR.-1 IF LCT FOUND
OUT050 EQU *
RF STP050
*** SENDER LCT FOUND;A1:=ADDRESS OF LCT
OUT100 EQU *
INH
*** TEST IF DRIVER STATUS IS CONNECT
LDK A3,DRCONE
CW A3,DRSTAT,A1
RTNE31 EQU *
RF(NE) RTNE32 DRIVER STATUS IS NOT CONNECT
*** TEST IF SENDER IS ACTIVE
LDK A4,DRACT
CW A4,DRSSTA,A1
ABL(E) ERR040 NO MORE OUTPUT-REQUESTS ALLOWED
*** AT THIS MOMENT
***************************************************************************
*** DRIVER STATUS IS CONNECT;SENDER STATUS INACTIVE
***************************************************************************
LD A6,ECBBA,A8 A6:=BUFFER-ADDRESS
*** SAVE REQUESTED LENGTH IN WORDS IN LCT
LD A2,ECBRL,A8
SRC A2,1 A2:=NUMBER OF WORDS TO OUTPUT
LDR A7,A2
RF(NN) OUT200 EVEN NUMBER OF CHARACTERS
*** ODD NUMBER OF CHARACTERS
ANKL A2,/FFF
ADK A2,1 A2:=NUMBER OF WORDS + 1
OUT200 EQU *
ST A2,REQLEN,A1 SAVE NUMBER OF WORDS IN LCT
ST A2,LENGTH,A1
IFT IOPPC=0
IFT IOPCON=0
LDK A2,WRITPC A2:=WRITE FLAG ON PROGRAM-CHANNEL
XIF
IFT IOPPC=0
IFT IOPCON=1
******************************************
*** FOR IOPROCESSOR ONLY!
*** PREPARE WER1 AND WER2 INSTRUCTION
CF A15,WERWRI
LDK A2,WRITIO A2:=WRITE-FLAG ON IO-PROCESSOR
******************************************
XIF
IFT IOPPC=1
LC A3,DEVADD,A1
ANK A3,MIOP
RF(NZ) OUT002 IOP
LDK A2,WRITPC
RF OUT004
OUT002 EQU *
CF A15,WERWRI
LDK A2,WRITIO
OUT004 EQU *
XIF
*** TEST IF ODD NUMBER OF CHARACTERS HAS TO BE TRANSMITTED
LDR A7,A7
RF(NN) OUT350
*** ODD NUMBER OF CHARACTERS
*** SET NUMBER OF TRUE DATA-BITS FOR LAST TRANSFER IN COMMAND
ORKL A2,/800 ONLY ONE CHARACTER SIGNIFICANT IN
*** LAST WORD
OUT350 EQU *
*** PREPARE CIO START OUTPUT
LD A3,DEVADD,A1
ORKL A3,CIOINS
EXR A3 EXECUTE CIO START OUTPUT
IFT IOLOG=1
CF A15,LGA3A2
XIF
RTNE22 EQU *
RF(NA) ERR020 CIO NOT ACCEPTED
*** SET SENDER STATUS ACTIVE
ST A4,DRSSTA,A1
ST A8,LIECB,A1 SET ADDRESS OF LIECB IN LCT
ST A6,BUFADD,A1 SET BUFFER ADDRESS IN LCT
RTNOK1 EQU *
*** RETURN TO CALLER WITH RETURNCODE OK AND IN ENABLE-MODE
RF RTNOK
EJECT
***************************************************************************
*** STOP EXCHANGE
***************************************************************************
*** ON ENTRY:A8=ADDRESS OF LIECB
*** LIECB:WORD0=FILECODE
***
*** ON EXIT :A8:=ADDRESS OF LIECB
*** LIECB:WORD4=RETURNCODE
***
DRSTOP EQU *
*** SEARCH RECEIVER LCT WITH SAME FILECODE AS IN LIECB
LDK A2,TYPEST
LDKL A6,STP100 A6:=RETURNADDR.IF LCT FOUND
STP050 EQU *
RF SCALCT
*** RECEIVER LCT FOUND;ADDRESS OF LCT IN A1
STP100 EQU *
LDR A7,A1
ADK A7,DRSTAT A7:=ADDRESS OF DRIVER-STATUS OF RECEIVER
*** TEST IF DRIVER STATUS IS CONNECT
INH
LDK A4,DRCONE
CWR* A4,A7
RTNE32 EQU *
RF(NE) ERR030 DRIVER STATUS IS NOT CONNECT
LDK A4,DRSTWA
*** TEST IF RECEIVER STATUS IS ACTIVE
LDK A6,DRACT
CW A6,DRRSTA,A1
RF(E) STP150
*** SET DRIVER-STATUS OF RECEIVER STOP
LDK A3,DRSTEX
STR A3,A7
RF STP300
STP150 EQU *
*** RECEIVER IS ACTIVE
LD A3,DEVADD,A1
ORKL A3,CIOHLT
EXR A3
IFT IOLOG=1
CF A15,LGA3A2
XIF
STR A4,A7 SET DRIVER-STATUS OF RECEIVER WAIT
*** FOR STOP
STP300 EQU *
*** TEST IF SENDER IS ACTIVE
LDK A7,LCTEND
ADR A7,A1 A7:=ADDRESS OF CORRESPONDING TRANSMITTER-LCT
CW A6,DRSSTA,A7
RF(E) STP350
*** SET DRIVER-STATUS OF SENDER STOP
LDK A4,DRSTEX
ST A4,DRSTAT,A7
RF RTNOK
STP350 EQU *
*** SENDER IS ACTIVE
LD A3,DEVADD,A7
ORKL A3,OTR1
LDK A2,ABORT A2:=ABORT-FLAG FOR OTR1
EXR A3 EXECUTE OTR1 INSTRUCTION
IFT IOLOG=1
CF A15,LGA3A2
XIF
ST A4,DRSTAT,A7 SET DRIVER STATUS STOP WAIT
RF RTNOK
EJECT
***************************************************************************
*** DISCONNECT MODEM
***************************************************************************
*** ON ENTRY:A8:=ADDRESS OF LIECB
*** LIECB:WORD0=FILECODE
***
*** ON EXIT :A8:=ADDRESS OF LIECB
*** LIECB:WORD4=RETURNCODE
***
DRDISC EQU *
*** SEARCH RECEIVER LCT WITH SAME FILE CODE AS IN LIECB
LDK A2,TYPEDI
LDKL A6,DIS100
RF SCALCT
*** RECEIVER LCT FOUND;IN A1:=ADDRESS OF LCT
DIS100 EQU *
INH
*** TEST IF DRIVER STATUS IS STOP
LDK A3,DRSTEX
CW A3,DRSTAT,A1
RF(NE) ERR030 WRONG DRIVER STATUS OF RECEIVER
*** TEST IF DRIVER STATUS OF SENDER IS STOP
CW A3,DRSTAT+LCTEND,A1
RF(NE) ERR030 WRONG DRIVER STATUS OF SENDER
*** PREPARE DISCONNECT INSTRUCTION
LDK A2,DISCON
LD A3,DEVADD,A1
ORKL A3,CIOINS
EXR A3 EXECUTE CIO DISCONNECT
IFT IOLOG=1
CF A15,LGA3A2
XIF
RF(NA) ERR020 CIO NOT ACCEPTED
*** SET DRIVERSTATUS WAIT FOR NORMAL DISCONNECT READY
ST A8,LIECB,A1
LDK A3,DRWFDR
ST A3,DRSTAT,A1 SET DRIVER STATUS FOR RECEIVER
ST A3,DRSTAT+LCTEND,A1 SET DRIVER STATUS OF SENDER
RTNOK EQU *
*** RETURN TO CALLER WITH RETURN CODE OK AND ENABLE-MODE
*** SET RETURN-CODE OK; SET ENABLE-MODE
LDK A3,0
RF RETURN
EJECT
***
***
*** RETURN TO CALLER WITH ERROR!
***
*** FILECODE UNKNOWN
ERR010 EQU *
*** SET IN LIECB-RETURN-CODE: FC-UNKNOWN
LDK A3,UNKNFC
RF RETURN
***
*** CIO NOT ACCEPTED
***
ERR020 EQU *
*** TEST IF DEVICE ADDRESS UNKNOWN
RF(O) ERR050
*** SET IN LIECB-RETURN-CODE:CIO NOT ACCEPTED!
LDK A3,CIONAC
RF RETURN
***
*** DRIVER-STAUS NOT CORRECT
***
ERR030 EQU *
*** SET IN LIECB-RETURN-CODE: WRONG DRIVER STATUS
LDK A3,WRODST
RF RETURN
***
*** INPUT-QUEUE IS FULL OR SENDER ACTIVE
***
ERR040 EQU *
*** SET IN LIECB-RETURN-CODE: NO MORE INPUT OR OUTPUT ALLOWED AT
*** THIS MOMENT
LDK A3,NOTALL
RF RETURN
***
***
ERR050 EQU *
*** SET IN LIECB-RETURNCODE : DEVICE ADDRESS UNKNOWN
LDK A3,UNKNDV
***
***
RETURN EQU *
*** SET ERROR-RETURN-CODE INLIECB;SET ENB-MODE BEFORE RTN TO CALLER
ST A3,ECBRC,A8
ENB
RTN A5
EJECT
***
***
*** SEARCH LCT ACCORDING FILECODE GIVEN IN LIECB
*** ON ENTRY:A6:=RETURN-ADDRESS
*** EVEN ADDRESS: RECEIVER-LCT WANTED
*** ODD ADDRESS : SENDER-LCT WANTED
*** A8:=LIECB-ADDRESS
*** A2:=TYPE OF REQUEST
***
*** ON EXIT :A1:=ADDRESS OF LCT CONTAINING SAME FC AS IN LIECB
***
SCALCT EQU *
ST A2,ECBPR,A8
LDKL A2,LCTTAB
LDR* A4,A2 A4:=NUMBER OF TOTAL LCT'S
SCA100 EQU *
SUK A4,1
RB(N) ERR010 FILECODE UNKNOWN
ADK A2,2
LDR* A1,A2 A1:=ADDRESS OF LCT
LD A3,FILCOD,A1 A3:=FILECODE FROM LCT
CC A3,1,A8
RB(NE) SCA100 TRY NEXT LCT
*** LCT FOUND WITH SAME FILECODE AS IN LIECB
*** TEST ON REQUIRED LCT
LDK A7,1
ANR A7,A6 A7:=1 IF SENDER-LCT WANTED
*** 0 IF RECEIVER-LCT WANTED
RF(Z) SCA200 RECEIVER LCT FOUND
*** RECEIVER LCT FOUND BUT SENDER LCT WANTED
ADK A6,1 ADJUST RETURN ADDRESS
ADK A1,LCTEND A1:=ADDRESS OF TRANSMITTER-LCT
SCA200 EQU *
ABR A6
***
EJECT
***************************************************************************
*** COMMON SENDER INTERRUPT HANDLER
***************************************************************************
*** ON ENTRY:A1:=ADDRESS OFSPECIFIED SENDER-LCT
*** OLD A1 ALREADY SAVED ON A15-STACK
***
*** ON EXIT :A7:=TYPE=OUTPUT
*** RETURNED TO IDREQ IN ENABLE-MODE ON LEVEL 48
*** IF INTERRUPT IS EXPECTED
*** OTHERWISE RETURN AFTER INTERRUPT
***
DRHLTR EQU *
***
LDR A7,A1
ADK A7,DRSTAT A7:=ADDR.OF DRIVER-STATUS OF SENDER
LD A6,DEVADD,A1
LDK A4,DRINAC
*** SELECT DRIVER STATUS
LDK A3,DRCONE
CWR* A3,A7
RF(NE) SIN300
EJECT
***************************************************************************
*** DRIVER STATUS IS CONNECT
***************************************************************************
*** TEST IF SENDER STATUS IS INACTIVE
CW A4,DRSSTA,A1
RF(NE) SIN200
SIN100 EQU *
*** UNEXPECTED INTERRUPT;RESET INTERRUPT
LDR A3,A6
ORKL A3,SSTINS
EXR A3
IFT IOLOG=1
CF A15,LGA3A2
XIF
SIN150 EQU *
*** RETURN AFTER INTERRUPT
ABL RTNA15
SIN200 EQU *
*** SENDER STATUS IS ACTIVE
IFT IOPPC=1
*** TEST IF IOP OR PC
LC A2,DEVADD,A1
ANK A2,MIOP
RF(NZ) SIN260
*** PROGRAMMED-CHANNEL
LD* A2,BUFADD,A1 A2:=NEXT WORD TO OUTPUT
LDR A3,A6
ORKL A3,OTRINS
EXR A3 EXECUTE OTR-INSTRUCTION WITH A2
IFT IOLOG=1
CF A15,LGA3A2
XIF
IFT IOPPC=1
RF(NA) SIN260
*** CALCULATE BUFFERADDRESS FOR NEXT WORD TO TRANSMIT
LDK A3,2
ADS A3,BUFADD,A1
*** TEST IF LAST WORD
LD A3,REQLEN,A1
SUK A3,1
ST A3,REQLEN,A1 STORE NEW LENGTH
RB(NZ) SIN150 NOT THE LAST WORD
*** LAST WORD; PREPARE CIO HALT
LDR A3,A6
ORKL A3,CIOHLT
EXR A3 EXECUTE CIO HALT INSTRUCTION
IFT IOLOG=1
CF A15,LGA3A2
XIF
IFT IOPPC=1
*** RETURN AFTER INTERRUPT
RB SIN150
XIF
IFT IOPPC=0
IFT IOPCON=0
*** PROGRAMMED-CHANNEL
LD* A2,BUFADD,A1 A2:=NEXT WORD TO OUTPUT
LDR A3,A6
ORKL A3,OTRINS
EXR A3 EXECUTE OTR-INSTRUCTION WITH A2
IFT IOLOG=1
CF A15,LGA3A2
XIF
IFT IOPPC=0
IFT IOPCON=0
RF(NA) SIN260
*** CALCULATE BUFFERADDRESS FOR NEXT WORD TO TRANSMIT
LDK A3,2
ADS A3,BUFADD,A1
*** TEST IF LAST WORD
LD A3,REQLEN,A1
SUK A3,1
ST A3,REQLEN,A1 STORE NEW LENGTH
RB(NZ) SIN150 NOT THE LAST WORD
*** LAST WORD; PREPARE CIO HALT
LDR A3,A6
ORKL A3,CIOHLT
EXR A3 EXECUTE CIO HALT INSTRUCTION
IFT IOLOG=1
CF A15,LGA3A2
XIF
IFT IOPPC=0
IFT IOPCON=0
*** RETURN AFTER INTERRUPT
RB SIN150
XIF
SIN260 EQU *
*** INTERRUPT OF CIO HALT OR OTR1
LDKL A5,SIN268 A5:=RETURNADDRESS
RF SIN400
SIN268 EQU *
LD A2,ECBRL,A8
ST A2,ECBEL,A8 COPY REQUESTED LENGTH IN EFFECTIVE
*** LENGTH FIELD IN LIECB
*** SWITCH TO SOFTWARE LEVEL 48 AND RETURN TO IDREQ
SIN280 EQU *
SUK A1,LCTEND A1:=ADDRESS OF RECEIVER LCT
ABL SWLRID
EJECT
SIN300 EQU *
*** TEST IF DRIVER STATUS STOP WAIT
LDK A3,DRSTWA
CWR* A3,A7
RB(NE) SIN100 RESET INTERRUPT;RETURN AFTER INTERRUPT
**************************************************************************
*** DRIVER STATUS IS STOP WAIT
**************************************************************************
CW A4,DRSSTA,A1 TEST IF SENDER STATUS IS INACTIVE
RB(E) SIN100 RESET INTERRUPT;RETURN AFTER INTERRUPT
*** SENDER STATUS IS ACTIVE
LDKL A5,SIN500 A5:=RETURNADDRESS
SIN400 EQU *
LDR A3,A6
ORKL A3,SSTINS
EXR A3 EXECUTE SST-INSTRUCTION WITH A2
IFT IOLOG=1
CF A15,LGA3A2
XIF
RB(NA) SIN150 SST-NOT ACCEPTED
ANK A2,3 DISTROY NOT SIGNIFICANT BITS
ORKL A2,/8000
LD A8,LIECB,A1 A8:=ADDRESS OF LIECB
ST A2,ECBRC,A8 STORE STATUS WORD
ST A4,DRSSTA,A1 SET SENDER-STATUS INACTIVE
ABR A5 RETURN TO SPECIFIED ADDRES
SIN500 EQU *
LDK A3,DRSTEX
STR A3,A7 SET DRIVER-STATUS OF SENDER STOP
RB SIN280 RETURN TO IDREQ
***
EJECT
***************************************************************************
*** COMMON RECEIVER-INTERRUPT HANDLER
***************************************************************************
*** ON ENTRY:A1:=ADDRESS OF SPECIFIED RECEIVER-LCT
*** OLD A1 ALREADY SAVED ON A15-STACK
***
*** ON EXIT :A7:=TYPE
*** RETURN TO IDREQ IN ENABLE-MODE ON LEVEL 48 IF
*** INTERRUPT IS EXPECTED
*** OTHERWISE RETURN AFTER INTERRUPT
***
DRHLRC EQU *
***
LD A5,DEVADD,A1
ANK A5,/FF
LDR A3,A5
ORKL A3,INRINS
EXR A3 EXECUTE INR-INSTRUCTION
IFT IOLOG=1
CF A15,LGA3A2
XIF
RF(NA) INT250
*** TEST IF RECEIVER IS ACTIVE
LDK A3,DRACT
CW A3,DRRSTA,A1
RF(E) INT200
*** RECEIVER NOT ACTIVE ;STOP RECEIVER
LDR A3,A5
ORKL A3,CIOHLT
EXR A3
IFT IOLOG=1
CF A15,LGA3A2
XIF
INT090 EQU *
*** RETURN AFTER INTERRUPT
ABL RTNA15
INT200 EQU *
IFT IOPPC=1
*** TEST IF IOP OR PC
LC A3,DEVADD,A1
ANK A3,MIOP
RF(NZ) INT250 IOP
*** RECEIVER STATUS IS ACTIVE
LD A3,BUFADD,A1 A3:=BUFFERADDRESS WHERE TO STORE
STR A2,A3 INPUT-WORD
*** DECREMENT NR OF INPUT WORDS
LD A6,REQLEN,A1
SUK A6,1
ST A6,REQLEN,A1
*** TEST IF LAST WORD
RF(P) INT220 NOT LAST
LD A2,LIECB,A1 GET ECB ADDRESS
LD A2,ECBPR,A2 GET SAVED CHAR AND CONDITION
RB(NN) INT090 CHAR MUST NOT BE RESTORED
**
** THE SAVED CHAR MUST BE RESTORED IN THE BUFFER
** BECAUSE THE REQUESTED LENGTH IS ODD AND THE
** CONTROLLER ONLY STORES AN UPROUNDED EVEN NUMBER
** OF CHARACTERS IN THE BUFFER.
SC A2,1,A3 RESTORE CHARACTER
RB INT090
*** NOT LAST WORD
INT220 EQU *
LDK A3,2
ADS A3,BUFADD,A1 INCREMENT BUFFERADDRESS FOR NEXT WORD
RB INT090 RETURN AFTER INTERRUPT
XIF
IFT IOPPC=0
IFT IOPCON=0
*** RECEIVER STATUS IS ACTIVE
LD A3,BUFADD,A1 A3:=BUFFERADDRESS WHERE TO STORE
STR A2,A3 INPUT-WORD
*** DECREMENT NR OF INPUT WORDS
LD A6,REQLEN,A1
SUK A6,1
ST A6,REQLEN,A1
*** TEST IF LAST WORD
RF(P) INT220 NOT LAST
LD A2,LIECB,A1 GET ECB ADDRESS
LD A2,ECBPR,A2 GET SAVED CHAR AND CONDITION
RB(NN) INT090 CHAR MUST NOT BE RESTORED
**
** THE SAVED CHAR MUST BE RESTORED IN THE BUFFER
** BECAUSE THE REQUESTED LENGTH IS ODD AND THE
** CONTROLLER ONLY STORES AN UPROUNDED EVEN NUMBER
** OF CHARACTERS IN THE BUFFER.
SC A2,1,A3 RESTORE CHARACTER
RB INT090
*** NOT LAST WORD
INT220 EQU *
LDK A3,2
ADS A3,BUFADD,A1 INCREMENT BUFFERADDRESS FOR NEXT WORD
RB INT090 RETURN AFTER INTERRUPT
XIF
***
INT250 EQU *
LDR A3,A5
ORKL A3,SSTINS
EXR A3 EXECUTE SST-INSTRUCTION WITH A2
IFT IOLOG=1
CF A15,LGA3A2
XIF
RB(NA) INT090 SOMETHING WRONG!!SST NOT ACCEPTED!!
LD A8,LIECB,A1 A8:=ADDRESS OF LIECB
*** TEST IF DRIVER STATUS IS CONNECT OR STOP WAIT
LD A3,DRSTAT,A1
CWK A3,DRCONE
RF(E) INT254
CWK A3,DRSTWA
ABL(NE) INT400
EJECT
INT254 EQU *
************************************************************************
*** DRIVER-STATUS IS CONNECT OR STOP WAIT
************************************************************************
*** TEST IF RECEIVER STATUS IS ACTIVE
LDK A4,DRINAC
CW A4,DRRSTA,A1
RB(E) INT090 RETURN AFTER INTERRUPT
ST A2,ECBRC,A8 STORE CONTROL-STATUS-WORD IN ECBRC
IFT IOPPC=1
*** TEST IF IOP OR PC
LC A3,DEVADD,A1
ANK A3,MIOP
RF(Z) INT255 NO IOP
*** IO-PROCESSOR;GET NR.OF WORDS READ
LDR A3,A5
SLL A3,1
ORKL A3,RER
EXR A3
ANKL A2,/FFF
ST A2,REQLEN,A1 SAVE LENGTH TEMPORARY
INT255 EQU *
XIF
IFT IOPPC=0
IFT IOPCON=1
*** IO-PROCESSOR;GET NR.OF WORDS READ
LDR A3,A5
SLL A3,1
ORKL A3,RER
EXR A3
ANKL A2,/FFF
ST A2,REQLEN,A1 SAVE LENGTH TEMPORARY
XIF
LD A2,ECBRC,A8
*** TEST IF MODEM NOT OPERABLE
LDK A3,NOTOPE
TM A3,A2
RF(NZ) INT260 YES!
*** TEST IF DRIVER STATUS 'STOP WAIT'
LDK A3,DRSTWA
CW A3,DRSTAT,A1
RF(E) INT260 PROCESS INPUT
*** DRIVER STATUS 'CONNECT'
*** TEST IF IDLE OR ABORT ONE'S
LDKL A3,IDLABO
TM A3,A2
RF(NZ) INT258 YES!
LDK A3,CAROFF
TM A3,A2 CARRIER OFF ?
RF(NZ) INT257 YES!
*** CARRIERR OFF BIT NOT SET
*** TEST IF LENGTH LESS THAN MINIMUM
LDK A3,1
AD A3,REQLEN,A1
CW A3,LENGTH,A1
RF(G) INT258 RETRY: NO INPUT AT ALL!
RF(L) INT260 ACCEPT: MORE THAN TWO CHARACTERS
LDKL A3,/F00
ANR A3,A2
RF(Z) INT260 ACCEPT: TWO CHARACTERS
RF INT258 RETRY: LESS THAN TWO CHARACTERS
INT257 EQU *
*** CARRIER-OFF BIT SET
*** TEST IF ALARM RECEIVE DATA
LD A3,RECDAT,A1
ANK A3,1
RF(Z) INT260 YES!
INT258 EQU *
*** RETRY CIO START INPUT
CM ECBRC,A8 CLEAR RETURN CODE
LD A2,RETRY,A1 A2 := RETRY COUNTER VALUE
ADK A2,1 INCREMENT COUNTER
CWK A2,5 AGAIN RETRY ?
RF(NG) INT259 YES
LDK A2,/FF
ST A2,ECBRC,A8 SAVE RETURNCODE
RF INT260
INT259 EQU *
ST A2,RETRY,A1 STORE RETRY COUNTER
LD A6,ECBBA,A8
LD A2,LENGTH,A1
ST A2,REQLEN,A1
IFT IOPPC=0
IFT IOPCON=1