|
|
DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 54400 (0xd480)
Types: TextFile
Names: »EDISOD«
└─⟦31861d049⟧ Bits:30005074 8" CR80 Floppy CR80FD_0012 ( EDI SYS 1 PJ DEC 3, 80 )
└─⟦46bca6409⟧
└─⟦this⟧ »EDISOD«
LIST
;----------------------------------------------------------------------
; PROJECT: NICS_TARE/CP
;
; MODULE IDENTIFICATION:NIC/291
; DISK IDENTIFICATION: CR/D/0943
;
; CPS NAME: ERROR DETECTION AN CORRECTION (EDC) SUBMODULE
; EDC INPUT PROGRAM SECTION (EDI).
; CPS VERSION: 0100
;
; MERGE FILES: SEE LIST BELOW
;
; MODULE FILES: EDISOD,EDIMOD,EDIHOD,EDIVOD,EDINOD.
;
; REFERENCES: NIC/200/PSP/0006
;
;----------------------------------------------------------------------
BEGIN MODULE EDISYS
USE BASE
XDATE:=#$OC;
;----------------------------------------------------------------------
;
; MERGE FILE MESSAGES
;
;----------------------------------------------------------------------
NOLIST
$EOCNOD
MESSAGE <:MERGE EOCNOD:>
$EDONOD
MESSAGE <:MERGE EDONOD:>
$EDCNOD
MESSAGE <:MERGE EDCNOD:>
$XPDNOD
MESSAGE <:MERGE XPDNOD:>
$SYSNOD
MESSAGE <:MERGE SYSNOD:>
$CSTNOD
MESSAGE <:MERGE CSTNOD:>
$BINNOD
MESSAGE <:MERGE BINNOD:>
MESSAGE <:MERGE MQXNOD:> $MQXNOD
$GDSNOD
MESSAGE <:MERGE GDSNOD:>
$COPNOD
MESSAGE <:MERGE COPNOD:>
$MNNNOD
MESSAGE <:MERGE MNNNOD:>
$ECFNOD
MESSAGE <:MERGE ECFNOD:>
MESSAGE <:MERGE GSTNOD:> $GSTNOD
MESSAGE <:MERGE LETNOD:> $LETNOD
LIST
;-----------------------------------------------------------------------
;FF\f
LOC=EIBASE
;----------------------------------------------------------------------
;
; SPECIAL CONSTANTS.
;
;----------------------------------------------------------------------
; ; THE FOLLOWING CONSTANTS ARE
; ; USED AS INPUT PARAMETERS TO THE
; ; VALIDATION ROUTINE (ED4510)
; ;-----------------------------------
TSTBID:=0 ;
TSTCRC:=1 ; PARAMETERS FOR ED4510
TSTSPN:=2 ;
; ;-----------------------------------
ALLBIT:=#0 ; ZERO
BIDPE:=7 ; PARITY ERROR BIT NO. IN THE BID
;----------------------------------------------------------------------
;
; EDC INPUT PROCEDURE RETURN LINK'S.
;
;----------------------------------------------------------------------
RL4000: LOC=LOC+1
RL4100: LOC=LOC+1
RL4200: LOC=LOC+1
RL4300: LOC=LOC+1
RL4540: LOC=LOC+1
RL4550: LOC=LOC+1
RL4560: LOC=LOC+1
RL4570: LOC=LOC+1
RL4580: LOC=LOC+1
RL4600: LOC=LOC+1
RL4610: LOC=LOC+1
RL4620: LOC=LOC+1
RL4700: LOC=LOC+1
RL4750: LOC=LOC+1
RL4800: LOC=LOC+1
RL4900: LOC=LOC+1
RL4910: LOC=LOC+1
RL4920: LOC=LOC+1
RL4930: LOC=LOC+1
RL4940: LOC=LOC+1
RL4950: LOC=LOC+1
RL4960: LOC=LOC+1
RL4970: LOC=LOC+1
;-----------------------------------------------------------------------
; THE FOLLOWING SHARE SPACE
;-----------------------------------
RL5000:
RL5100:
RL5200:
RL5300:
RL5400:
RL5500:
RL5600:
RL5700:
RLMAIN: LOC=LOC+1
;-----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; EDC INPUT WORK AREA
;
;----------------------------------------------------------------------
ECISLX: LOC=LOC+1 ; INDEX TO IDP_SCHEDULE_QUEUE
; THIS PARAMETER IS NOT
; INITIALIZED AS THE BACKGROUND
; VALUE (ZERO) IS SUFFICIENT.
;-----------------------------------
ISVR0: LOC=LOC+1 ; THESE LOCATIONS ARE USED FOR
ISVR1: LOC=LOC+1 ; TEMPORARY REGISTER STORAGE.
ISVR2: LOC=LOC+1 ;
ISVR3: LOC=LOC+1 ;
ISVR4: LOC=LOC+1 ;
ISVR5: LOC=LOC+1 ;
ISVR6: LOC=LOC+1 ;
ISVR7: LOC=LOC+1 ;
;----------------------------------------------------------------------
;FF\f
USE PROG
LOC=EIPROG
;----------------------------------------------------------------------
;
; EDC INPUT SECTION PROGRAM AREA.
;
;----------------------------------------------------------------------
;
; DISPATCH ACKL
;
; WHEN THE MP RELEASES AN LCB THIS ROUTINE IS CALLED TO CONSTRUCT AN
; ACKL. AN UNEXPECTED REQUEST FOR AN ACKL IS DETECTED AND REPORTED.
; AN UNEXPECTED REQUEST IS SENSED WHEN NO LCB HAS BEEN RECEIVED.
;
; ENTRIES: ED4100
;
; RETURNS: LINK
;
; CALLS: ED4500, ED1603
;
; CALLED BY: ED4300
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 PTR.TO ACKL-ARRAY UNCH
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4100: ;
MOV R4 RL4100 ;
MOD R6 ;
MOVC ECIFLG R7 ;
IBZ X7 ECIALR ; IF UNEXPECTED MP ACKL THEN
JMP S4 ED4404 ;R REPORT AN ERROR
RELS X7 ECIALR ; CLEAR "ACKL REQ'D" FLAG
;-----------------------------------
; SET UP TO GENERATE AN ACKL
;-----------------------------------
MOVC BTACKL R0 ; BLOCK TYPE = ACKL
MOV ECIALB.X6 R1 ; BID = LCB BID
MOD R6 ; QUEUE = ACKL QUEUE
MOVC ECCALQH R3 ;
IBN X7 ECISCQ ; IF A SETBD WAS RECEIVED THEN
JMP ED4102 ; FORGET THE WHOLE THING
JMP S4 ED4500 ; CREATE THE ACKL BLOCK
JMP ED4102 ; NO BIN AVAILABLE FOR ACKL
MOV R5 ISVR5 ;
JMPI S4 EI1603 ; SCHEDULE_ACKL_QUEUE
MOV ISVR5 R5 ;
ED4102: ;
JMPI RL4100 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; DISPATCH ACK
;
; WHEN THE MP RELEASES A SEGMENT OR MESSAGE THIS ROUTINE IS CALLED TO
; CONSTRUCT AND SEND AN ACK.
;
; AN UNEXPECTED MP REQUEST FOR AN ACK IS DETECTED WHEN
; A. TWO ACKS ARE CURRENTLY WAITING TO BE SENT.
; B. THERE ARE NO SEGMENTS OR MESSAGES PENDING TO THE MP.
; C. ONE ACK IS WAITING TO BE SENT AND ANOTHER IS NOT REQUIRED.
;
; IF ECIRR IS FOUND TO BE SET THEN THE LAST BLOCK RECEIVED WAS AN RR
; WHICH FOLLOWED A SETBD AND WE ARE IN A RECOVERY MODE. IN THIS CASE
; WE CANCEL REQUESTS FOR ACKS UNTIL NO DATA IS LEFT. ONLY THEN IS THE
; ACK RESPONSE TO THE RR GENERATED.
; IF THE LAST BLOCK RECEIVED WAS A SETBD THEN THE REQUEST FOR ACK IS
; IGNORED.
;
; ENTRIES: ED4200
;
; RETURNS: LINK
;
; CALLS: ED4500, ED1601
;
; CALLED BY: ED4300
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 PTR.TO ACK-ARRAY UNCH
; R6 ECRPTR ECRPTR
; R7 - DEST
;----------------------------------------------------------------------
ED4200: ;
MOV R4 RL4200 ;
MOD R6 ;
MOVC ECIFLG R7 ;
IBZ X7 ECIAP2 ;
IBZ X7 ECIAR1 ;
JMP S4 ED4402 ;R REPORT UNEXPECTED ACK REQUEST
IBNP X7 ECIAP1 ;
IBZ X7 ECIAR2 ;
JMP S4 ED4402 ;R REPORT UNEXPECTED ACK REQUEST
IBZP X7 ECISETB ; IF LAST BLOCK WAS NOT SETBD
IBZ X7 ECIRR ; OR RR (NO RECOVERY) THEN
JMP ED4202 ; GO PROCESS ACK REQUEST
IBZ X7 ECIAR2 ; RELEASE THE LAST "ACK REQ'D"
RELS X7 ECIAR1 ;
RELS X7 ECIAR2 ;
IBZ X7 ECISETB ; IF LAST BLOCK WAS SETBD OR
IBN X7 ECIAR1 ; RECOV. ON WITH DATA REMAINING
JMP ED4206 ; THEN EXIT
RELS X7 ECIRR ; END RECOVERY AND
JMP ED4204 ; GOTO QUEUE ACK
;
ED4202: ;
IBN X7 ECIAP1 ; SET PROPER FLAG TO INDICATE
SETS X7 ECIAP2 ; ANOTHER ACK IS BEING SENT
SETS X7 ECIAP1 ;
IBN X7 ECIAP2 ; PREPARE TO ACK OLDEST BID
MODC ECISSI-ECIFSI ;
MODC ECIFSI-ECIPAI ;
ED4204: ;
MOV ECIPAI.X6 R1 ; PREPARE FOR ACK BLOCK BUILDING
MOVC BTACK R0 ;
MOD R6 ;
MOVC ECCAQH R3 ;
IBN X7 ECISCQ ; IF SETBD REQ'D THEN
JMP ED4206 ; SKIP THE ACK
MOV XGSTPR R4 ; TO ACCESS MP THROTTLING FLAG
ADDC GSTMPT R4 ;
SEQ X4 FALSE ; SKIP IF MP THROTTLING IS OFF
JMP ED4206 ; NO ACK IF MP THROTTLING IS ON
JMP S4 ED4500 ; CREATE THE ACK BLOCK
JMP ED4206 ; NO BIN AVAILABLE FOR ACK
MOV R5 ISVR5 ;
JMPI S4 EI1601 ; SCHEDULE_ACK_QUEUE
MOV ISVR5 R5 ;
ED4206: ;
JMPI RL4200 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; MP ACK REQUEST HANDLING
;
; WHEN THE MP RELEASES AN LCB, EOS OR EOM THEN THIS ROUTINE IS CALLED
; TO SUPERVISE THE SENDING OF A PROPER ACKNOWLEDGMENT.
;
; ENTRIES: ED4300
;
; RETURNS: LINK
;
; CALLS: ED1200, ED4100, ED4200
;
; CALLED BY: ED3200, ED3300
;
; REGISTERS: ENTRY EXIT
; R0 _ DEST
; R1 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 _ DEST
; R6 _ DEST
; R7 _ DEST
;----------------------------------------------------------------------
ED4300: ;
MOV R4 RL4300 ;
ED4302: ;
MOD ECFPTR ;
MOVC ECGFLG R7 ;
MOD ECFPTR ;
MOVC ECGALA R5 ; SET TO ACCESS PENDING ACK TABLE
IBNP X5 ECGAKP ; IF AN ACKL IS PENDING
RELS X5 ECGAKP ; THEN CLEAR ACK PENDING FLAG
JMP ED4304 ; AND GO PROCESS IT
ADDC ECGAKA-ECGALA R5 ; SET TO ACCESS PENDING ACK TABLE
IBZ X7 ECGTHR ; IF THROTTLING IS ON
IBZ X5 ECGAKP ; OR NO ACK IS PENDING
JMP ED4308 ; THEN WE'RE DONE - EXIT
RELS X5 ECGAKP ; CLEAR PENDING FLAG
ED4304: ; PROCESS PENDING ACK OR ACKL
MOD ECGECX.X5 ; GET OFFSET TO EDC PORTION AND
MOD R5 ; AD ADDRESS OF ARRAY START
MOVC ECGDAT R4 ; TO GET ADDR. OF 1ST DATA WORD
IBZ X4 ECGRDY ; IF NOT READY WE'RE DONE
JMP ED4302 ; SO GO CHECK OTHER ARRAY
RELS X4 ECGRDY ; TURN OFF RDY FLAG IN DATA WORD
MOV X4 R6 ; GET THE DATA WORD
XTR R6 7 ; UNPACK LCN
INC ECGECX.X5 ; INCREMENT ARRAY INDEX
AND X5 ECGECX.X5 ; THIS IS AN "AND" WITH ECGACW
; WHICH RESETS THE INDEX TO THE
; BEGINNING OF THE ACK/L ARRAY BLK
JMPI S4 EI1200 ; GET ECR CORRESPONDING TO LCN
JMPI S4 EI1980 ;UE NO ECR - REPORT ERROR
MOD ECFPTR ;
IEQ R5 ECGAKA ; IF WORKING ON PENDING ACK
MODC ED4200-ED4100 ; SEND THE ACK
; ELSE
JMP S4 ED4100 ; SEND AN ACKL
ED4306: ;
JMP ED4304 ;
ED4308: ;
JMPI RL4300 ; RETURN
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; ERROR REPORT ROUTINE
;
; CALLS: ED1800
;
; CALLED BY ED4200, ED4100, ED4510
;
; RETURNS: NONE
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R4 LINK UNCH
;----------------------------------------------------------------------
ED4400: ; SPARE
;
ED4402: ; UNEXPECTED ACK
MODC EEC019-EEC020 ;
ED4404: ; UNEXPECTED ACKL
MODC EEC020-EEC030 ;
ED4406: ; EB_PARITY ERROR
MODC EEC030-EEC001 ;
ED4408: ; EB FRAMMING_ERROR
MODC EEC001-EEC021 ;
ED4410: ; BID_SPAN_ERROR
MODC EEC021 ;
MOVC 0 R0 ;
MOV R7 ISVR7 ;
MOVC ISVR7 R7 ;
STC 6 ; SAVE REGISTERS
JMPI S4 EI1800 ; CALL REPORT_ERROR(ERROR_CODE)
JMP ED4490 ; RET1: UNRECV.ERROR GOTO CLEAR
MOVC ISVR0 R7 ;
UNS 7 ; RESET REGISTERS
JMP X4 ; RETURN TO LINK
;
ED4490: ; UNRECV_ERROR.
MOVC 1 R1 ;
MOVC ECISAD R2 ;
JMP S4 ED4550 ; CALL CLEAR_UP(ALL_ARRAY'S)
NOP ;
JMPI RLMAIN ; RETURN TO MAIN_LINE
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; CREATE EDC BLOCK
;
; THIS ROUTINE IS USED TO BUILD BLOCKS REQUIRED FOR PROTOCOL.
; IT BUILDS ACKS AND NAKS FOR OUTPUT AND ABNORMAL TERMINATION BLOCKS
; FOR INPUT.
;
; ENTRIES: ED4500 - CREATE OUTBOUND BLOCK
; ED4502 - CREATE INBOUND BLOCK
;
; RETURNS: LINK+0 NO BINS
; LINK+1 COMPLETE
;
; CALLED BY: ED4910, ED4920, ED4930, ED4950, ED5300, ED5400
;
; CALLS: MONITOR CALLS ONLY
;
; REGISTERS: ENTRY EXIT
; R0 (E1) TYPE UNCH
; R1 (E1) BID1 UNCH
; R2 (E1) BID2 UNCH
; R3 QCB-REL UNCH
; R4 LINK UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4500: ; ENTRY1: CREATE OUTBOUND EDC BLOCK
MOVC ISVR7 R7 ; SAVE REGISTERS.
STC 6 ;
MOV R7 ISVR7 ;
MOVC 1 R3 ;
MON GNOB ; GET AN OUTPUT BIN
JMP ED4506 ; NO BINS
MOV ISVR0 R0 ; R0:=TYPE
MOV ISVR1 R1 ; R1:=BID1
MOV ISVR2 R2 ; R2:=BID2
XTR R1 7 ;
XTR R2 7 ;
SLL R1 8 ;
IOR R0 R1 ; R1 = BID1 IN UPPER, TYPE IN LWR
SUB XBASE R5 ;
MOD CSTPTR ; READ OUTBOUND SECURITY CODE
MOV CSTCS2 R7 ;
SRL R7 CSTOSC ;
XTR R7 3 ;
SLL R7 BINSEC ; POS. TO BINSEC FIELD
SVS R4 ;
LDS R3 ; BEGIN BLOCK MAKEUP
IEQP R0 BTNAK2 ; IF TYPE = NAK2 - 2 BIDS NEEDED
MOV R2 BINWXO+2.X5 ; SET CHAR. COUNT = 5
MODC 1 ; ELSE
ADDC 4 R7 ; SET CHAR. COUNT = 4
IOR R7 BINSTA.X5 ;
IEQ R0 BTNAK2 ; IF TYPE = NAK2 THEN
MODC 1 ; C1:=5
MOVC 4 R2 ; ELSE
MOV R2 BINWXO.X5 ; C1:=4
MOV R1 BINWXO+1.X5 ; STORE BID1 AND TYPE
LDS R4 ;
ADD XBASE R5 ;
JMP ED4504 ; GO QUEUE EDC BLOCK
;-----------------------------------------------------------------------
ED4502: ; ENTRY2: CREATE INBOUND EDC BLOCK
MOVC ISVR7 R7 ; SAVE REGISTERS.
STC 6 ;
MOV R7 ISVR7 ;
MOVC 1 R3 ;
MON GNIB ; GET INBOUND BIN
JMP ED4506 ; NO BINS
SVS R2 ;
MOD CSTPTR ;
MOV CSTCS2 R7 ; READ INBOUND SECURITY CODE
MODC CSTISC ;
SRL R7 0 ;
XTR R7 3 ;
SLL R7 BINSEC ; POS. TO BINSEC FIELD
SUB XBASE R5 ;
LDS R3 ;
ADDC 1<BINEIB+1<BINURE R7 ; TYPE:=ABNORMAL TERMINATION.
IOR R7 BINSTA.X5 ;
LDS R2 ;
ADD XBASE R5 ;
;-----------------------------------------------------------------------
ED4504: ; QUEUE INBOUND/OUTBOUND EB
MOV ISVR3 R4 ;
ADD XBASE R4 ; R4:= ABS PTR TO REQ'D QCB
MOVC 1 R3 ;
MON LNIQ ;
MOV ISVR7 R7 ; RESET REGISTERS.
UNS 6 ;
JMP 1. X4 ; RETURN TO LINK
;-----------------------------------------------------------------------
ED4506: ; NO BINS FOR THE BLOCK
MOV CSTPTR R4 ; SET "NO BUFFER" FLAG IN CSTVF1
MOVC 1<CSTLAC R5 ;
IOR R5 CSTVF1.X4 ;
MOV ISVR7 R7 ; SET UP TO EXIT
UNS 6 ;
JMP X4 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; VALIDATE BID, CRC OR SPAN
;
; THIS ROUTINE TESTS BID PARITY, CRC VALIDITY OR SPAN, DEPENDING
; ON FLAGS IN R0.
;
;ENTRY: ED4510
;
; RETURNS: LINK - ERROR RETURN
; LINK+1 - TESTED ITEM OK
;
; CALLED BY: ED4800, ED5100, ED5200, ED5300, ED5400, ED5500
;
; CALLS: ED4406, ED4408, ED4410
;
; REGISTERS: ENTRY EXIT
; R0 TEST-REQUEST DEST
; R4 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4510: ;
MOV R4 R7 ;
IBZ R0 TSTBID ; IF BID PARITY NOT REQUESTED
JMP ED4512 ; GO CHECK FOR CRC REQUEST
MOV CIBID R4 ; GET CURRENT BID FROM BIN
IBNP R4 BIDPE ; IF BID PARITY ERROR THEN
JMP S4 ED4406 ;R REPORT PARITY ERROR AND
JMP X7 ; ERROR RETURN
ED4512: ;
IBZ R0 TSTCRC ; IF CRC NOT TO BE TESTED THEN
JMP ED4514 ; GO CHECK FOR SPAN REQUEST
MOV CIEST R4 ;
IBNP R4 MQICFE ; IF A CRC ERROR EXISTS
JMP S4 ED4408 ;R REPORT THE ERROR
JMP X7 ; AND ERROR RETURN
ED4514: ;
IBZ R0 TSTSPAN ; IF SPAN NOT TO BE TESTED THEN
JMP ED4516 ; GO TO OK RETURN
MOV CIBID R4 ; GET CURRENT BID
MOV ECIPAI.X6 R0 ; GET PREVIOUSLY ACK'D BID
SUB R0 R4 ;
ADDC -1 R4 ; THIS SUBTRACTION IS USED TO
XTR R4 7 ; HANDLE BID WRAPAROUND
ADDC -1 R4 ;
MODC ECICSL ;
IGEP R4 X6 ; IF DIFFERENCE IN BIDS TOO BIG
JMP S4 ED4410 ;R REPORT AN ERROR
JMP X7 ; ERROR RETURN
ED4516: ;
JMP 1. X7 ; TEST SUCCESSFUL
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; FIND STATUS ADDRESS
;
; THIS SUBROUTINE FINDS THE RELATIVE ADDRESS, IN THE STATUS ARRAY,
; FOR A GIVEN BID (IN R7).
;
; ENTRIES: ED4520
;
; RETURNS: LINK
;
; CALLED BY: ED5400, ED4910, ED4610, ED4550, ED4540, ED4560
;
; CALLS: NONE
;
; REGISTERS: ENTRY EXIT
; R4 LINK LINK
; R7 IDENT. ISTA(I).PTR.
;----------------------------------------------------------------------
ED4520: ;
XTR R7 ECIADC ; GET BID MODULO 32
MOD R7 ;
MOD ECRPTR ;
MOVC ECISTA R7 ;
JMP X4 ; RETURN TO LINK
;----------------------------------------------------------------------
;----------------------------------------------------------------------
;
; THIS ROUTINE IS GIVEN TWO BIDS. IT DETERMINES IF THE OLDER (R1) IS
; LESS THAN OR EQUAL TO THE NEWER (R2). IN ADDITION THE DIFFERENCE
; MUST BE LESS THAN THE LIMIT IMPOSED BY THE STATUS TABLE SIZE.
; ON EXIT THE DIFFERENCE IS INCREMENTED TO BE USED AS AN INDEX BY
; THE CALLER.
;
; CALLED BY: ED4560, ED4550
;
; CALLS: NONE
;
; ENTRIES: ED4530
;
; RETURNS: LINK ERROR
; LINK+1 OK
;
; REGISTERS: ENTRY EXIT
; R1 IDENT1 UNCH
; R2 IDENT2 COUNT
; R4 LINK UNCH
;----------------------------------------------------------------------
ED4530: ;
SUB R1 R2 ;
XTR R2 7 ;
IGE R2 ECISAD ; IF (R1 NOT PREVIOUS TO R2) THEN
JMP X4 ; TAKE ERROR RETURN
ADDC 1 R2 ; R2 =IDENT2+1-IDENT1
JMP 1. X4 ; RETURN TO LINK+1
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; SET ECIOPN FOR THOSE BIDS WHICH ARE ACCEPTABLE
;
; THIS SUBROUTINE SETS THE STATUS ARRAY ENTRIES FOR ALLOWABLE BIDS
; TO "OPEN". IT ALSO SETS THE "EXPECTED" FLAG IN THE ARRAY ENTRY
; FOR THE NEXT EXPECTED BID. THE NAKF FLAG IS CLEARED FOR THE NEXT
; BLOCK TO BE QUEUED TO IDP.
;
; CALLED BY: ED4930, ED4950, ED4750, ED4700
;
; CALLS: ED4520
;
; ENTRIES: ED4540
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DES
; R2 - DES
; R4 LINK DES
; R6 PTR TO ECR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4540: ;
MOV R4 RL4540 ;
MOD ECFPTR ;
MOV ECGARMB R0 ; GET ALLOWED RANGE OF MISSNG BIDS
MOV ECINXI.X6 R1 ; GET NEXT EXPECTED BID
ADDC -1 R1 ;
ADDC 1 R0 ; ARMB+1
MOVC 1<ECIOPN R2 ;
ED4542: ;
MOV R1 R7 ;
ADD R0 R7 ;
JMP S4 ED4520 ; GET STATUS ARRAY ENTRY LOC.
IOR R2 0. X7 ; SET ARRAY ENTRY "OPEN"
SOB R0 ED4542 ;
SETS X7 ECIEXP ; SET NEXT EXPECTED BID "EXPECTED"
MOV ECINQI.X6 R7 ; GET NEXT BID FOR IDP
JMP S4 ED4520 ; GET ITS STATUS ARRAY LOC.
RELS X7 ECINAKF ; RELEASE ITS NAKF FLAG
JMPI RL4540 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; CLEAR UP
;
; CLEARS OUT THE STATUS ARRAY FOR ALL BIDS BETWEEN AND INCLUDING THE
; TWO GIVEN IN R1 AND R2.
;
; CALLED BY: ED4750, ED4800
;
; CALLS: ED4520, ED4530
;
;
; ENTRIES: ED4550
;
; RETURNS: LINK NOT_DONE.
; LINK+1 DONE.
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 IDENT1 DEST
; R2 IDENT2 DEST
; R4 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4550: ;
MOV R4 RL4550 ;
JMP S4 ED4530 ; IF BID1 NOT PREVIOUS TO BID2
JMPI RL4550 ; THEN LOOP BELOW WON'T WORK
ED4552: ;
MOV R1 R7 ;
JMP S4 ED4520 ; GET STATUS ARRAY LOC. FOR BID
IBZ X7 ECIEND ;
IBZ X7 ECIOK ;
JMP ED4554 ; JUMP IF BLOCK IN ARRAY
SVP ED4554 ; DEVICE TO SAVE REGISTERS ONLY
MOV ECIEFA-ECISTA.X7 R5 ; RELEASE BLOCK STORED IN ARRAY
MOVC 100 R3 ;
MON RNBN ; RELEASE ALL BINS IN THE BLOCK
MOV XBASE R0 ;
LDN R0 ; RESTORE REGISTERS
ED4554: ;
CLR ECISTA-ECISTA. X7 ; CLEAR ALL ELEMENTS IN THE
CLR ECIEFA-ECISTA. X7 ; STATUS ARRAY
CLR ECIELA-ECISTA. X7 ;
ADDC 1 R1 ; SET UP FOR NEXT BID
SOB R2 ED4552 ; FALL THRU AND EXIT IF DONE
MOV RL4550 R4 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; CLEAR STATUS
;
; THIS SUBROUTINE CLEARS AN AREA OF THE STATUS, IN THE STATUS ARRAY,
; DETERMINED BY A BIT MASK. IT DOES THIS FOR EACH BID BETWEEN AND
; INCLUDING THE LAST ACK'D SEGMENT AND THE NEXT TO BE ACK'D.
;
; CALLED BY: ED4700
;
; CALLS: ED4520, ED4520
;
; ENTRIES: ED4560
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 BITMASK UNCH
; R1 IDENT1 DEST
; R2 IDENTZ DEST
; R4 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4560: ;
MOV R4 RL4560 ;
JMP S4 ED4530 ; IS LAST ACK'D BID < NEXT ONE
JMPI S4 EI1900 ;UE NO - REPORT ERROR
ED4562: ;
MOV R1 R7 ;
JMP S4 ED4520 ; GET ADDRESS OF STATUS ENTRY
AND R0 X7 ; UPDATE STATUS
ADDC 1 R1 ;
SOB R2 ED4562 ;
JMPI RL4560 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; SET EDC BLOCK STATUS
;
; UPDATES STATUS WORD IN A BIN BY OR'ING THE CONTENTS OF R0 INTO
; THE STATUS WORD.
;
; CALLED BY: ED4600, ED5500, ED5700
;
; CALLS: NONE
;
; ENTRIES: ED4570
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 MASK UNCH
; R3 - DEST
; R4 LINK DEST
; R5 BUFF UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4570: ;
MOV R4 RL4570 ;
MON GBSM ; GET BIN PAGE
SUB XBASE R5 ;
SVS R4 ;
LDS R3 ;
IOR R0 BINSTA.X5 ; UPDATE BINSTA
LDS R4 ;
ADD XBASE R5 ; RESET BUFF_REF
JMPI RL4570 ; RETURN TO LINK
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; ACTIVATE IDP
;
; THIS ROUTINE IS CALLED WHEN A COMPLETE EDC BLOCK IS TO BE SENT TO IDP.
; IT SENDS A LETTER TO IDP TO NOTIFY THAT SUBMODULE THAT THERE IS WORK
; TO DO ON THE CHANNEL.
;
; CALLED BY: ED4610, ED5300, ED5500, ED5700
;
; CALLS: ED1920
;
; ENTRIES: ED4580
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 - ECRPTR
; R7 - DEST
;----------------------------------------------------------------------
ED4580: ;
MOV R4 RL4580 ; SAVE LINK
LDM 2#111 ; DISABLE INTERRUPTS
MOV CSTPTR R5 ;
MOV GSTPTR R6 ;
ION CSTDEV.X5 ; IF CHAN. IN SCHED. LIST THEN
JMP ED4584 ; GO NOTIFY IDP - OTHERWISE
MOV R5 CSTDEV.X5 ; INDICATE CHAN. INCLUDED
MOVC ECISLX R4 ; GET REL SCHED_LIST_INDEX
; **** ECISLX IS LOCAL TO EDI****
MOD X4 ;
MOV GSTECL.X6 R0 ;
IEQ R0 -1 ; IF LAST ENTRY THEN
CLR 0. X4 ; RESET ECISLX TO START
MOV CSTBAS.X5 R0 ;
MOD X4 ;
MOV R0 GSTECL.X6 ; PUT PROCESS BASE OF CST IN
; A GSTECL ENTRY. THIS ALLOWS IDP
; TO FIND BASES OF CST'S TO
; PROCESS.
INC 0. X4 ; INCREMENT GSTECL INDEX
ED4584: ;
ION GSTIPB.X6 ; IF IDP NOT IDLE THEN
JMP ED4586 ; SKIP SENDING LETTER
MOV R6 GSTIPB.X6 ; SET IDP BUSY
MOV ECIITL R5 ; GET EDC-IDP LETTER ADDRESS
; ****ECIITL IS LOCAL TO EDC****
MOV R5 R7 ;
SUB XBASE R7 ; GET POINTER TO IDP LETTER
MOVC EDCIDP R0 ; GET TYPE (DEFINED IN LET)
MOV R0 LTTYP. X7 ;
MOVC IDPLPN R0 ;
MOV R0 LTRCV. X7 ; SET RECEIVER
MOVC EDILPN R0 ;
MOV R0 LTSND. X7 ; SET SENDER
MON SLET ; SEND LETTER TO IDP
JMPI S4 EI1920 ;E LETTER HANDLING ERROR
ED4586: ;
MOV ECRPTR R6 ;
JMPI RL4580 ; RETURN TO LINK
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; INSERT EDC BLOCK IN CYCLIC ARRAY
;
; THIS SUBROUTINE REMOVES A COMPLETED EDC BLOCK FROM THE INPUT
; COLLECTION QUEUE (ECCIQH). IT THEN MOVES THE BLOCK TO THE CYCLIC
; STATUS ARRAY (ECIEFA, ECIELA, ECISTA). THE INDEX TO EACH OF THE
; THREE TABLES IS THE SAME AND IS THE BID MODULO 32. THE NUMBER
; OF BINS IN THE BLOCK IS OR'D INTO ECISTA. THE END OF BLOCK FLAG
; IS SET IN THE LAST BIN VIA ED4570.
;
; CALLED BY: ED5100, ED5200
;
; CALLS: ED4570
;
; ENTRIES: ED4600
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 ECRPTR UNCHA
; R7 - DEST
;----------------------------------------------------------------------
ED4600: ;
MOV R4 RL4600 ;
MOD ECRPTA ;
MOVC ECCIQH R4 ; GET BLOCK FROM INPUT QUEUE
MOVC 100 R3 ;
MON LNOQ ; R3 = NUMBER OF ELEMENTS
NOP ; R5 = 1ST QUEUE ENTRY ADDRESS
MOV R6 R4 ; R6 = LST QUEUE ENTRY ADDRESS
MOV ECRPTR R6 ;
MOV CIBID R7 ; CALCULATE STATUS ARRAY INDEX
XTR R7 ECIADC ;
ADD R6 R7 ; SAVE ELEMENTS IN PROPER TABLES
MOV R5 ECIEFA.X7 ; ECIEFA = 1ST QUEUE ENTRY ADDR
MOV R4 ECIELA.X7 ; ECIELA = LST QUEUE ENTRY ADDR
SLL R3 ECICQE ; ECISTA = NO. OF BINS
MODC ECISTA ;
IOR R3 X7 ;
MOV R4 R5 ;
MOVC 1<BINEIB R0 ; SET EOB_INDICATOR IN LAST BIN
JMP S4 ED4570 ;
JMPI RL4600 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; DISPATCH DATA TO IDP
;
; THIS ROUTINE REMOVES EDC BLOCKS FROM THE CYCLIC STATUS ARRAY
; (ECISTA ETC.) AND QUEUES THEM FOR PROCESSING BY IDP. IT ALSO
; ACTIVATES IDP VIA ED4580.
;
; CALLED BY: ED5100, ED5200
;
; CALLS: ED4520, ED4580
;
; ENTRIES: ED4610
;
; RETURN: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4610: ;
MOV R4 RL4610 ;
ED4612: ;
MOV ECINQI.X6 R7 ; GET NEXT BID TO QUEUE
JMP S4 ED4520 ; GET ITS STATUS ARRAY ADDRESS
MOD R6 ;
MOVC ECIFLG R5 ;
IBN X7 ECIOK ; IF BLOCK IS NOT OK OR
IBN X7 ECIEND ; IF END PROCESSING IS DONE
JMP ED4616 ; THEN EXIT
; AT THIS POINT THE BLOCK IS OK
; BUT END PROCESSING IS NOT DONE
INC ECINQI.X6 ; UPDATE NEXT BID TO QUEUE
IBN X5 ECIAR2 ; IF WE HAVE 2 SEGMENTS AT THE MP
JMPI S4 EI1900 ;UE THIS WOULD BE 3 - ERROR
RELS X5 ECISBI ; CLEAR EOS/EOM LST QUEUED FLAG
IBZ X7 ECIEOS ; IF NOT AN EOS
JMP ED4614 ; THEN SKIP EOS PROCESSING
SETS X5 ECISBI ; SET EOS/EOM LAST QUEUED
IBN X5 ECIAR1 ; SET PROPER MP ACK REQ'D FLAG
SETS X5 ECIAR2 ;
SETS X5 ECIAR1 ;
ED4614: ;
RELS X5 ECIQTB ; CLEAR "TERM. BLOCK QUEUED" FLAG
SETS X5 ECIITR ; SET "SCHEDUL IDP" FLAG
SETS X7 ECIEND ; SET "END PROCESSING DONE" FLAG
ADDC -ECISTA R7 ; FETCH THE BLOCK FROM THE
MOV ECISTA.X7 R3 ; CYCLIC ARRAYS
SRL R3 ECICQE ; GET BIN COUNT
MOV ECIEFA.X7 R5 ; GET ADDR. OF 1ST BIN
MOV ECIELA.X7 R6 ; GET ADDR. OF LST BIN
MOD CSTPTA ;
MOVC CSTFIB R4 ; PUT THE BLOCK IN INPUT BIN QUEUE
MON LNIQ ;
MOV ECRPTR R6 ; RESET R6
JMP ED4612 ;
ED4616: ;
IBNP X5 ECIITR ; IF "SCHEDULE IDP" FLAG IS ON
RELS X5 ECIITR ; THEN CLEAR IT AND
JMPI S4 EI4580 ; SCHEDULE IDP
MOV ECRPTR R6 ; RESET R6
JMPI RL4610 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; DISCARD AN EDC BLOCK
;
; THE CURRENT EDC BLOCK IS DISCARDED, I.E. REMOVED FROM THE INPUT
; BIN QUEUE AND RELEASED TO THE FREE BIN POOL.
;
; CALLED BY: ED5100, ED5200, ED5300, ED5400, ED5500, ED4970
;
; CALLS: NONE
;
; ENTRY: ED4620
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0-R5 - DEST.
; R6 ECRPTR UNCHA.
; R7 - DEST
;-----------------------------------------------------------------------
ED4620: ;
MOV R4 RL4620 ;
MOVC 1000 R3 ;
MOD ECRPTA ; LINK ALL BINS OUT
MOVC ECCIQH R4 ;
MON LNOQ ; AND RELEASE BINS.
NOP ;
MON RNBN ;
MOV ECRPTR R6 ; REESTABLISH R6
JMPI RL4620 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; SET SPAN OF ACCEPTABLE BIDS
;
; THIS SUBROUTINE COMPUTES THE EXPECTED RANGE OF BIDS WHICH ARE
; ACCEPTABLE SINCE THE LAST SEGMENT WAS ACK'D. THE PARAMETER
; CALCULATED (ECICSL) IS USED IN THE SPAN CHECKING SUBROUTINE (ED4510).
; IF THERE ARE NO SEGMENTS CURRENTLY WAITING THEN THE SPAN IS SET FOR
; TWO SEGMENTS OR 2*(MAX SEGMENT LENGTH IN BLOCKS) - 1.
; IF THERE IS 1 EOS WAITING THE SPAN IS SET TO THE NUMBER OF BLOCKS
; IN THE SEGMENT PLUS THE MAXIMUM SEGMENT LENGTH.
; IF THERE ARE 2 SEGMENTS WAITING THE SPAN IS SET TO INCLUDE ONLY
; THE 2 SEGMENTS.
;
; CALLED BY: ED4800, ED4700, ED5300
;
; CALLS: NONE
;
; ENTRIES: ED4630
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R4 LINK DEST
; R6 ECRPTR UNCH
;----------------------------------------------------------------------
ED4630: ;
MOD R6 ;
MOVC ECIFLG R5 ; GET INPUT FLAG WORD ADDRESS
IBN X5 ECIEOS1 ; IF 1 EOS HAS BEEN REC'D THEN
JMP ED4632 ; GO CHECK FOR 2
MOV ECISBC.X6 R1 ; GET MAX # BLOCKS PER SEGMENT
SLL R1 1 ; SETS SPAN TO 2*(MAX BLK CT)-1
ADDC -1 R1 ;
JMP ED4634 ;
ED4632: ;
IBN X5 ECIEOS2 ; IF 2 SEGMENTS ARE IN THEN
MODC ECISSI-ECIFSI ; GET 2ND BID
MOV ECIFSI.X6 R1 ;
MOV ECIPAI.X6 R0 ; GET LAST ACK'D BID
SUB R0 R1 ; COMPUTE (# BLKS IN LST SEG) -1
ADDC -1 R1 ; TAKING INTO ACCOUNT BID
XTR R1 ECIADC ; WRAPAROUND
IBN X5 ECIEOS2 ; IF WE'RE ON 2 SEGMENTS THEN
JMP ED4634 ; GO SET SPAN
MOV ECISBC.X6 R0 ; GET MAX # BLKS PER SEGMENT
ILT R1 R0 ; IF LAST SEGMENT HAD FEWER
; BLOCKS THAN ALLOWED THEN
ADD R0 R1 ; ADD ACTUAL BLK COUNT
ED4634: ;
MOV R1 ECICSL.X6 ; SET THE SPAN
JMP X4 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; ACK BOOK-KEEPING
;
; THIS SUBROUTINE CLEARS UP STATUS, INTHE STATUS ARRAY, FOR ALL
; BLOCKS THAT HAVE BEEN ACK'D. IT THEN UPDATES FLAGS AND POINTERS
; FOR BLOCKS STILL WAITING TO BE ACK'D.
;
; CALLED BY: ED5100, ED5200, ED5400
;
; CALLS: ED4560, ED4630, ED4540
;
; ENTRIES: ED4700
;
; RETURNS: LINK
;
; REGISTERES: ENTRY EXIT
; R0 - DEST
; R1 - DES
; R2 - DES
; R4 LINK DEST
; R5 IFLG-PTR UNCH
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4700: ;
MOV R4 RL4700 ;
ED4702: ;
MOVC ALLBIT R0 ; ALLBIT = 0
MOV ECIPAI.X6 R1 ; GET LAST ACK'D BID
ADDC 1 R1 ;
MOV ECIFSI.X6 R2 ; GET BID OF 1ST SEG WAITING ACK
IBZ X5 ECISETB ; IF LAST BLOCK WAS A SETBD
JMP S4 ED4560 ; THEN CLEAR STATUS ARRAY
MOV X5 R0 ; GET INPUT FLAG WORD
MOVC 1<(ECIAP2+1)-1 R1 ; CHANGE 2ND SEGMENT
AND R1 R0 ; FLAGS TO 1'ST SEGMENT
SRL R0 (ECIAP2+1)/2; FLAGS IN ECIFLG,AND
MOD R1 ; CLEAR 2ND SEGMENT
PUT R0 X5 ; FLAGS.
MOV ECIFSI.X6 R0 ; MAKE NEXT SEG TO BE ACK'D
; LAST SEGMENT ACK'D
MOV ECISSI.X6 R1 ; MAKE 2ND SEG TO BE ACK'D
; NEXT TO BE ACK'D
MOV R0 ECIPAI.X6 ;
MOV R1 ECIFSI.X6 ;
; ECISSI IS NOT CLEARED BECAUSE
; IT IS NOT NECESSARY DUE TO
; FLAG SETTINGS ABOVE
JMP S4 ED4630 ; SET SPAN OF ACCEPTABLE BIDS
JMP S4 ED4540 ; SET STATUS ARRAY ELEMENTS
; OPEN FOR EXPECTED BIDS
IBN X5 ECIAP1 ; IF THERE IS STILL AN ACK PENDING
JMP ED4702 ; REPEAT THE PROCESS
JMPI RL4700 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; RE-SYNCHRONIZE AFTER SETBD
;
; THIS SUBROUTINE INITIALIZES BID POINTERS AS A RESULT OF A SETBD
; BLOCK RECEPTION. IT ALSO CLEARS OUT THE STATUS ARRAY AS REQUIRED.
;
; CALLED BY: ED5300
;
; CALLS: ED4540, ED4550
;
; ENTRIES: ED4750
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 BID DEST
; R1 - DEST
; R2 - DEST
; R4 LINK DEST
; R6 ECRPTR ECRPTR
; R7 - DEST
;----------------------------------------------------------------------
ED4750: ;
MOV R4 RL4750 ;
MOV R0 ECIPAI.X6 ; PREVIOUSLY ACK'D BID
MOV R0 ECIFSI.X6 ; 1ST BID WAITING MP ACK
MOV R0 ECISSI.X6 ; 2ND BID WAITING MP ACK
ADDC 1 R0 ;
MOV R0 ECINXI.X6 ; NEXT BID EXPECTED
MOV R0 ECINQI.X6 ; NEXT BID TO QUEUE TO IDP
MOV ECINXI.X6 R1 ;
MOV ECIPAI.X6 R2 ;
ADDC ECISAD R2 ;
JMP S4 ED4550 ; CLEAR OUT THE STATUS ARRAY
JMPI S4 EI1900 ;UE REPORT STATUS ARRAY CLEAR ERROR
JMP S4 ED4540 ; SET STATUS ARRAY ELEMENTS OPEN
; FOR EXPECTED BIDS
JMPI RL4750 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; PROCESS RECEIPT OF A NEW END OF SEGMENT
;
; THE ROUTINE DOES THE FOLLOWING:
;
; SETS THE EOS BIT (ECIEOS) IN THE STATYS ARRAY FOR THE BLOCK.
; SETS ECIEOS1 OR ECIEOS2 TO INDICATE 1 OR 2 EOS'S RECEIVED.
; IF 2 EOS'S, THEY ARE SET IN PROPER ORDER, I.E. LOWER BID
; IN EOSFSI AND HIGHER BID IN EOSSSI.
; RESETS THE SPAN OF ACCEPTABLE BIDS DUE TO RECEIPT OF AN EOS.
; TESTS TO SEE IF THE 2ND SEGMENT LIMIT HAS BEEN VIOLATED AS A
; RESULT OF THE NEWLY CALCULATED SPAN.
;
; CALLED BY: ED5200
;
; CALLS: ED4630, ED4550, ED4510, ED4520
;
; ENTRIES: ED4800
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4800: ;
MOV R4 RL4800 ;
MOD R6 ;
MOVC ECIFLG R5 ;
MOV CIBID R0 ;
MOV R0 R7 ;
JMP S4 ED4520 ; GET STATUS ARRAY LOC FOR THS BID
SETS X7 ECIEOS ; SET EOS BIT IN STATUS ARRAY
IBZ X5 ECIEOS1 ; IF NO EOS'S THEN
JMP ED4802 ; MAKE ENTRIES FOR ONE
SETS X5 ECIEOS2 ; SET 2 EOS'S PRESENT
MOV R0 R1 ; IF SEGMENTS RECEIVED
MOV ECIFSI.X6 R2 ; IN CORRECT ORDER
SUB R2 R1 ; I.E.
XTR R1 EOCBDX ; FIRST SEGMENT
SHS R1 ECISAD+1 ; PREVIOUS TO 2ND, THEN
MOV R0 ECISSI.X6 ; PUT BID IN 2ND POSITION
SHS R1 ECISAD+1 ;
JMP ED4804 ; ELSE
MOV ECIFSI.X6 R1 ; SWITCH THE TWO BIDS
MOV R1 ECISSI.X6 ;
MOV R0 ECIFSI.X6 ;
JMP ED4804 ;
ED4802: ;
MOV R0 ECIFSI.X6 ; SET BID AS 1ST ONE
SETS X5 ECIEOS1 ; SET ONE EOS PRESENT
ED4804: ;
JMP S4 ED4630 ; RESET SPAN OF ACCEPTABLE BIDS
MOV ECINXI.X6 R0 ; TEST THAT 2ND SEGMENT LIMIT
ADDC -1 R0 ; HAS NOT BEEN VIOLATED. I.E.
; MAKE SURE THAT THE LAST BLOCK
; RECEIVED IS WITHIN THE NEW SPAN.
; THE CHECK FAILS IF WE GOT A 2ND
; SEGMENT SMALLER THAN MAX SIZE
; AND A PREVIOUS BID WAS OK TILL
; THE NEW LIMIT WAS CALCULATED.
MOV CIBID R1 ;
MOV R0 CIBID ;
MOVC 1<TSTSPAN R0 ; SET UP TO TEST SPAN
JMP S4 ED4510 ; TEST SPAN ON LAST BID
JMP ED4805 ; SPAN ERROR DETECTED
MOV R1 CIBID ;
JMP ED4806 ; GOTO RETURN
ED4805: ;
MOV R1 CIBID ;
MOV ECIPAI.X6 R1 ; CLEAR OUT ALL STATUS ARRAY
ADD ECICSL.X6 R1 ; SLOTS WHICH ARE NOT WITHIN THE
ADDC 2 R1 ; CURRENT TWO SEGMENT LIMIT
MOV R1 ECINXI.X6 ;
MOV ECIPAI.X6 R2 ;
ADDC ECISAD R2 ;
JMP S4 ED4550 ; DO THE CLEARING
JMPI S4 EI4410 ;R REPORT 2ND SEG VIOLATION ERROR
ED4806: ;
JMPI RL4800 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; GOT AN INVALID BLOCK
;
; THE PROCEDURE IS ENTERRED ON RECEIPT OF AN
; ABNORMAL EDC BLOCK AND RESULTS IN TRANSMISSION OF A
; NAKF(I) IF REQUIRED.
; ABNORMAL BLOCKS INCLUDE THE FOLLOWING:
; 1. NOT WITHIN RANGE OF 2 SEGMENT BOUNDARY.
; 2. NOT WITHIN ALLOWED RANGE OF MISSING BID'S.
; 3. BID PARITY-ERROR.
; 4. CRC-ERROR IN AN EB OUT OF SEQUENCE,BUT WITHIN
; THE ALLOWED RANGE OF MISSING BID'S.
;
; CALLED BY: ED5100, ED4990, ED4950
;
; CALLS: ED4500, ED4520, ED1602
;
; ENTRIES: ED4910
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R3 - DEST
; R4 - DEST
; R5 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4910: ;
MOV R5 RL4910 ;
MOD R6 ;
MOVC ECIFLG R7 ; GET ADDRESS OF INPUT FLAGS
IBN X7 ECIEOS2 ; IF ALREADY 2 EOS'S
JMP ED4912 ; EXIT - THE BLOCK IS GARBAGE
MOV ECINXI.X6 R7 ; GET EXPECTED BID
JMP S4 ED4520 ; FIND STATUS ARRAY ENTRY FOR IT
IBN X7 ECINAKF ; IF A NAKF HAS ALREADY BEEN SENT
JMP ED4912 ; THEN EXIT
SETS X7 ECINAKF ; SET THE NAKF FLAG
MOVC BTNAKF R0 ;
MOV ECINXI.X6 R1 ; GET EXPECTED BID AGAIN
ADDC -1 R1 ;
MOD R6 ;
MOVC ECCNQH R3 ; GET LOC OF NAK QUEUE HEAD
JMP S4 ED4500 ; CREATE THE NAKF BLOCK
JMP ED4912 ; NO BINS FOR NAK
JMPI S4 EI1602 ; SCHEDULE NAK_QUEUE
ED4912: ;
JMPI RL4910 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; GOT MISSING BLOCK
;
; A PREVIOUSLY NAK'D EDC BLOCK IS RECEIVED.
; IF CRC-ERROR THEN RETRANSMISSION REQUESTED
; ELSE QUEUE FOR PROCESSING.
;
; CALLED BY: ED4990
;
; CALLS: ED4500, ED4510, ED1602
;
; ENTRIES: ED4920
;
; RETURNS: LINK CRC-ERROR
; LINK+1 EB OK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R3 PTR_STATUS DEST
; R4 - DEST
; R5 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4920: ;
MOV R5 RL4920 ;
MOVC 1<TSTCRC R0 ;
JMP S4 ED4510 ; CHECK FOR CRC ERROR
JMP ED4922 ; JUMP ON CRC ERROR FOUND
SETS X3 ECIOK ; SET BLOCK RECEIVED OK
JMP 1. X5 ; RETURN TO LINK+1
ED4922: ;
MOV CIBID R1 ; SET UP TO NAK THE NEWLY
MOVC BTNAK R0 ; RECEIVED BLOCK
MOD R6 ;
MOVC ECCNQH R3 ;
JMP S4 ED4500 ; CREATE THE NAK BLOCK
JMPI RL4920 ; NO BINS FOR NAK
JMPI S4 EI1602 ; SCHEDULE_NAK_QUEUE
JMPI RL4920 ; RETURN TO LINK
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; GOT EXPECTED EDC BLOCK
;
; THIS PROCEDURE IS ENTERED DURING FAULTLESS
; TRANSMISSION.
;
; CALLED BY: ED4990
;
; CALLS: ED4500, ED4510, ED4540, ED1602
;
; ENTRIES: ED4930
;
; RETURNS: LINK CRC-ERROR
; LINK+1 EB OK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R3 STATUS_PTR DEST
; R4 - DEST
; R5 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4930: ;
MOV R5 RL4930 ;
RELS X3 ECIEXP ; CLEAR "EXPECTED BID" FLAG
INC ECINXI.X6 ; SET UP NEXT EXPECTED BID
JMP S4 ED4540 ; SET STATUS ARRAY ENTRIES OPEN
; FOR LEGAL BIDS
MOVC 1<TSTCRC R0 ;
JMP S4 ED4510 ; CHECK FOR CRC ERROR
JMP LOC+2 ; CRC ERROR FOUND
JMP ED4932 ; BLOCK OK - NO CRC ERROR
SETS X3 ECINAK ; SET "NAK'D" FLAG
MOVC BTNAK R0 ; SET UP TO CREATE A NAK FOR
MOV CIBID R1 ; THE BLOCK
MOD R6 ;
MOVC ECCNQH R3 ;
JMP S4 ED4500 ; CREATE THE NAK BLOCK
JMPI RL4930 ; NO BINS FOR NAK
JMPI S4 EI1602 ; SCHEDULE NAK_QUEUE
JMPI RL4930 ; RETURN TO LINK
ED4932: ;
SETS X3 ECIOK ; SET "BLOCK OK" FLAG
JMP 1. X5 ; RETURN TO LINK+1
;----------------------------------------------------------------------
;----------------------------------------------------------------------
;
; GOT AN EXISTING BLOCK
;
; CALLED BY: ED4990
;
;----------------------------------------------------------------------
ED4940: ;
JMP X5 ; RETURN TO LINK
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; GOT A BLOCK WHOSE BID IS SUBSEQUENT TO THE EXPECTED ONE.
;
; THIS PROCEDURE IS ENTERED ON RECEIPT OF
; AN EB OUT OF SEQUENCE, BUT WITHIN THE ALLO-
; WED RANGE OF MISSING EB'S
;
; CALLED BY: ED4990
;
; CALLS: ED4500, ED4910, ED4540, ED4510, ED1602, ED4520
;
; ENTRIES: ED4950
;
; RETURNS: LINK (VIA GOT_INVALID)
; LINK+1 EB OK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 STATUS-PTR. DEST
; R4 - DEST
; R5 LINK DEST
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4950: ;
MOV R5 RL4950 ;
MOVC 1<TSTCRC R0 ;
JMP S4 ED4510 ; CHECK FOR CRC ERROR
JMP ED4910 ; CRC ERROR FOUND
MOV ECINXI.X6 R1 ; GET BID OF EXPECTED BLOCK
ED4952: ;
MOV R1 R7 ;
JMP S4 ED4520 ; GET STATUS ARRAY LOC FOR THE BID
IEQ R3 R7 ; IS THIS THE CURRENT BID
JMP ED4954 ; YES - DONE WITH LOOP
RELS X7 ECIEXP ; CLEAR "EXPECTED BID" FLAG
SETS X7 ECINAK ; SET THE "NAK'D" FLAG
ADDC 1 R1 ; SET TO GET NEXT BID
JMP ED4952 ; CONTINUE LOOP
ED4954: ;
SETS X3 ECIOK ; SET "BLOCK OK" FLAG FOR LATST ID
MOV ECINXI.X6 R1 ; GET EXPECTED BID
XTR R1 EOCBDX ;
MOV CIBID R2 ; SET UP FOR NAK OR NAK2
ADDC -1 R2 ; DEPENDING ON # OF BIDS SKIPPED
INE R1 R2 ;
MODC BTNAK2-BTNAK ;
MOVC BTNAK R0 ;
MOD R6 ;
MOVC ECCNQH R3 ;
ADDC 2 R2 ;
MOV R2 ECINXI.X6 ; SET NEXT EXPECTED BID TO
; ONE MORE THAN THE CURRENT ONE
JMP S4 ED4540 ; SET ALLOWABLE BIDS IN STATUS ARY
MOV RL4950 R5 ;
JMP S4 ED4500 ; CREATE NAK OR NAK2 BLOCK
JMP 1. X5 ; NO BINS FOR NAK
JMPI S4 EI1602 ; SCHEDULE NAK_QUEUE
JMP 1. X5 ; RETURN TO LINK+1
;----------------------------------------------------------------------
;----------------------------------------------------------------------
;
; INVALID STATE IN STATUS ARRAY DETECTED
;
; CALLED BY: ED4990
;
; CALLS: ED4620
;
; ENTRIES: ED4970
;
; RETURNS: LINK
;
;----------------------------------------------------------------------
ED4970: ;
MOV R5 RL4970 ;
JMPI S4 EI1900 ;UE REPORT IN VALID STATE IN
;UE STATUS ARRAY
JMP S4 ED4620 ; DISCARD THE BLOCK
JMPI RL4970 ; RETURN TO LINK
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; PROCESS BLOCKS BASED ON STATUS ARRAY FLAGS
;
; BLOCKS CONTAINING DATA ARE PROCESSED BASED ON THE CONTENTS OF THE
; FOUR FLAGS DESCRIBED BELOW. \HE RELATIONSHIP BETWEEN THESE FLAGS
; AS WELL AS THEIR POSITION IN THE STATUS WORD IS CRITICAL. ANY
; CHANGES IN THIS AREA WILL NECESSITATE CHANGES IN THE FOLLOWING CODE.
; THE FOUR FLAGS ARE:
; ECIOK = 1 BLOCK RECEIVED OK
; ECINAK = 1 BLOCK PREVIOUSLY NAK'D
; ECIOPN = 1 THIS BID IS PERMITTED
; ECIEXP = 1 BID IS THE NEXT ONE EXPECTED
;
; CALLED BY: ED5100, ED5200
;
; CALLS: ED4520, ED4910, ED4920, ED4930, ED4940, ED4950, ED4970
;
; ENTRIES: ED4990
;
; RETURNS: RETURNS INDIRECTLY VIA CALLED ROUTINES
;
; REGISTERS ENTRY EXIT
; R0 - -
; R1 - -
; R2 - -
; R3 - STATUS_PTR
; R4 - DEST
; R5 LINK UNCH
; R6 ECRPTR UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED4990: ;
MOV CIBID R7 ;
JMP S4 ED4520 ; GET LATST BID STATUS ARRAY LOC
MOV R7 R3 ;
MOV X7 R7 ; GET STATUS WORD FROM ARRAY
XTR R7 ECIOK+1 ; GET 4 FLAGS DEALT WITH BELOW
MOD R7 ;
JMP S4 ED4992 ;
ED4992: ; ECIOK ECINAK ECIOPN ECIEXP
JMP ED4910 ; 0 0 0 0
; BLOCK UNEXPECTED
JMP ED4970 ; 0 0 0 1
; ILLEGAL
JMP ED4950 ; 0 0 1 0
; BLOCK UNEXPECTED BUT LEGAL
JMP ED4930 ; 0 0 1 1
; EXPECTED BLOCK
JMP ED4970 ; 0 1 0 0
; ILLEGAL
JMP ED4970 ; 0 1 0 1
; ILLEGAL
JMP ED4920 ; 0 1 1 0
; PREVIOUSLY NAK'D BLOCK
JMP ED4970 ; 0 1 1 1
; ILLEGAL
JMP ED4970 ; 1 0 0 0
; ILLEGAL
JMP ED4970 ; 1 0 0 1
; ILLEGAL
JMP ED4940 ; 1 0 1 0
; PREVIOUSLY RECEIVED BLOCK
JMP ED4970 ; 1 0 1 1
; ILLEGAL
JMP ED4970 ; 1 1 0 0
; ILLEGAL
JMP ED4970 ; 1 1 0 1
; ILLEGAL
JMP ED4940 ; 1 1 1 0
; PREVIOUSLY REC'D NAK'D BLOCK
JMP ED4970 ; 1 1 1 1
; ILLEGAL
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; DATA BLOCK PROCESSING
;
; IF A SETBD HAS NOT YET BEEN RECEIVED THE BLOCK IS DISCARDED AND
; THE ROUTINE EXITS. THE HALTED MESSAGE SECTOR TIMER IS RESET VIA
; ED1475. ECISETB, WHICH INDICATES THE LAST BLOCK WAS A SETBD, IS
; CLEARED. IF AN ACK HAS BEEN SENT, ACK BOOKKEEPING IS PERFORMED
; (ED4700) TO REMOVE IT FROM THE RECORDS. THE BID IS CHECKED FOR
; PARITY ERROR AND TO SEE IF IT IS IN LEGAL RANGE. IF EITHER CHECK
; FAILS ED4910 IS CALLED TO GENERATE A NAK. THE BLOCK IS THEN DISCARDED
; AND THE ROUTINE EXITS. FURTHER VALIDITY CHECKS ARE MADE VIA ED4990.
; IF ANY OF THOSE CHECKS FAIL THE BLOCK IS DISCARDED AND THE ROUTINE
; EXITS.
; IF THE BLOCK PASSES ALL CHECKS IT IS INSERTED IN THE CYCLIC QUEUE
; (ED4600) AND CALLED TO THE ATTENTION OF IDP (ED4610).
;
; CALLED BY: ED2100
;
; CALLS: ED4510, ED4990, ED4600, ED4800, ED4610, ED4620, ED4910
; ED4700, ED1475
;
; ENDTRIES: ED5100
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 - DEST
; R7 - DEST
;----------------------------------------------------------------------
ED5100: ;
MOV R4 RL5100 ;
MOV ECRPTR R6 ; GET POINTER TO CURRENT ECR
MOD R6 ;
MOVC ECIFLG R5 ; GET CURRENT ECR FLAG WORD LOC.
IBN X5 ECISCQ ; IF SETBD REQUIRED, THEN
JMP ED5102 ; DISCARD THE EDC BLOCK
JMPI S4 EI1475 ; RESET HALTED MS TIMER
RELS X5 ECISETB ; CLR "LST BLK SETBD" FLAG
IBN X5 ECIAP1 ; IF AN ACK WAS SENT, THEN
JMP S4 ED4700 ; DO ACK BOOKKEEPING
MOVC 1<TSTBID+1<TSTSPAN R0 ;
JMP S4 ED4510 ; TEST BID PARITY AND SPAN
JMP ED5104 ; BID PARITY OR SPAN ERROR
JMP S5 ED4990 ; MAKE FURTHER CHECKS
JMP ED5102 ; FAILED FURTHER CHECKS
JMP S4 ED4600 ; INSERT BLOCK IN CYCLIC QUEUE
JMP S4 ED4610 ; SEND DATA TO IDP
JMP ED5106 ; EXIT
ED5102: ;
JMP S4 ED4620 ; DISCARD THE BLOCK
JMP ED5106 ; EXIT
ED5104: ;
JMP S5 ED4910 ; PROCESS INVALID BLOCK
JMP S4 ED4620 ; DISCARD THE BLOCK
ED5106: ;
JMPI RL5100 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; EOS/EOM PROCESSING
;
; IF A SETBD HAS NOT YET BEEN RECEIVED THE BLOCK IS DISCARDED AND
; THE ROUTINE EXITS. THE HALTED MESSAGE SECTOR TIMER IS RESET VIA
; ED1475. ECISETB, WHICH INDICATES THE LAST BLOCK WAS A SETBD, IS
; CLEARED. IF AN ACK HAS BEEN SENT, ACK BOOKKEEPING IS PERFORMED
; (ED4700) TO REMOVE IT FROM THE RECORDS. THE BID IS CHECKED FOR
; PARITY ERROR AND TO SEE IF IT IS IN LEGAL RANGE. IF EITHER CHECK
; FAILS ED4910 IS CALLED TO GENERATE A NAK. THE BLOCK IS THEN DISCARDED
; AND THE ROUTINE EXITS. FURTHER VALIDITY CHECKS ARE MADE VIA ED4990.
; IF ANY OF THOSE CHECKS FAIL THE BLOCK IS DISCARDED AND THE ROUTINE
; EXITS.
; IF THE BLOCK PASSES ALL CHECKS IT IS PROCESSED (ED4800), INSERTED
; IN THE CYCLIC QUEUE (ED4600) AND CALLED TO THE ATTENTION OF IDP.
;
; CALLED BY: ED2100
;
; CALLS: ED4510, ED4990, ED4800, ED4600, ED4610, ED4620, ED4910,
; ED4700, ED1475
;
; ENTRIES: ED5200
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 - DEST
; R7 - DEST
;----------------------------------------------------------------------
ED5200: ;
MOV R4 RL5200 ;
MOV ECRPTR R6 ; GET POINTER TO CURRENT ECR
MOD R6 ;
MOVC ECIFLG R5 ; GET CURRENT ECR FLAG WORD LOC.
IBN X5 ECISCQ ; IF SETBD REQUIRED, THEN
JMP ED5202 ; DISCARD THE BLOCK
JMPI S4 EI1475 ; RESET HALTED MS TIMER
RELS X5 ECISETB ; SET LAST BLOCK NOT SETBD
IBN X5 ECIAP1 ; IF AN ACK WAS SENT, THEN
JMP S4 ED4700 ; GO BOOKKEEP ACK'S
MOVC 1<TSTBID+1<TSTSPAN R0 ;
JMP S4 ED4510 ; TEST BID PARITY AND SPAN
JMP ED5204 ; BID PARITY OR SPAN ERROR
JMP S5 ED4990 ; FURTHER CHECKS
JMP ED5202 ; FAILED FURTHER CHECKS
JMP S4 ED4800 ; EOS PROCESSING
JMP S4 ED4600 ; INSERT BLOCK IN CYCLIC QUEUE
JMP S4 ED4610 ; SEND BLOCK TO IDP
JMP ED5206 ; EXIT
ED5202: ;
JMP S4 ED4620 ; DISCARD THE BLOCK
JMP ED5206 ; EXIT
ED5204: ;
JMP S5 ED4910 ; PROCESS INVALID BLOCK
JMP S4 ED4620 ; DISCARD THE BLOCK
ED5206: ;
JMPI RL5200 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; PROCESS INCOMMING SETBD'S
;
; WHEN A VALID SETBD BLOCK IS RECEIVED IT IS PROCESSED AS FOLLOWS:
; RECOVERY MODE, "SEGMENT RECEIVED" FLAGS AND "SETBD REQUIRED"
; ARE CLEARED.
; SETBD RECEIVED IS SET IN ECF AND CSTVF4.
; IF A TERMINATION BLOCK HAS NOT BEEN QUEUED ONE IS CREATED
; AND QUEUED. IDP IS THEN NOTIFIED.
; RESYNCHRONIZATION IS DONE VIA ED4750.
; SPAN OF ACCEPTABLE BIDS IS SET VIA ED4630.
;
; CALLED BY: ED2100
;
; CALLS: ED4510, ED4502, ED4750, ED4620, ED4580, ED1475, ED1251, ED4630
;
; ENTRIES: ED5300
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 - DEST
; R7 - DEST
;----------------------------------------------------------------------
ED5300: ;
MOV R4 RL5300 ;
MOV ECRPTR R6 ;
JMP S4 ED4620 ; DISCARD BLOCK - NO LONGER REQ'D
MOVC 1<TSTCRC+1<TSTBID R0 ;
JMP S4 ED4510 ; TEST BID PARITY AND CRC
JMP ED5302 ; BID PARITY OR CRC ERROR
MOD R6 ;
MOVC ECIFLG R5 ; GET LOC. OF INPUT DATA FLAG
RELS X5 ECIRR ; CLEAR POSSIBLE RECOVERY MODE
RELS X5 ECIEOS1 ; CLEAR PENDING SEGMENT FLAGS
RELS X5 ECIEOS2 ;
RELS X5 ECISCQ ; CLEAR SETBD REQUIREMENT
SETS X5 ECISETB ; SET SETBD LAST BLOCK RECEIVED
MOD CSTPTR ;
MOVC CSTVF4 R7 ;
SETS X7 EECSBR ; SET SETBD REC'D IN CSTVF4
IBN X5 ECIQTB ; IF TERMINATION BLOCK QUEUED
JMP ED5301 ; SKIP BUILDING ONE
MOD CSTPTR ;
MOVC CSTFIB R3 ;
SETS X5 ECIITR ; SET FLAG TO NOTIFY IDP
JMP S4 ED4502 ; CREATE TERMINATION BLOCK WHICH
; INDICATES AN ERROR & QUEUE IT
NOP ;
ED5301: ;
SETS X5 ECIQTB ; FLAG TERMINATION BLOCK QUEUED
MOV CIBID R0 ;
JMP S4 ED4750 ; RESYNCH. AND CLEAR STATUS ARRAY
JMP S4 ED4630 ; SET SPAN OF ACCEPTABLE BIDS
IBNP X5 ECIITR ; IF IDP IS TO BE NOTIFIED
RELS X5 ECIITR ; CLEAR NOTIFICATION FLAG AND
JMPI S4 EI4580 ; NOTIFY IDP
JMPI S4 EI1475 ; RESET HALTED MS TIMER.
JMPI S4 EI1251 ; CLEAR ACKS & NAKS WAITING OUTPT
ED5302: ;
JMPI RL5300 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; PROCEDURE RR(EB) PROCESS INCOMMING RR'S
;
; WHEN A VALID RR BLOCK IS RECEIVED:
; ACK BOOKKEEPING IS DONE.
; IF THE LAST BLOCK WAS A SETBD AND DATA IS STILL IN THE SYSTEM
; RECOVERY MODE IS SET AND THE ROUTINE EXITS. FINAL PROCESSING
; IS DELAYED TILL THE LAST MP-ACK IS RECEIVED.
; IF THERE IS NO DATA THEN THE "LAST BLOCK SETBD" FLAG IS CLEARED.
; ALL OUTSTANDING NAK'S ARE RESENT. IF NO NAK'S EXIST THEN THE
; LAST ACK IS REPEATED.
;
; CALLED BY: ED2100
;
; CALLS: ED4510, ED4500, ED4620, ED4500, ED4700, ED4530, ED1601/1602
;
; ENTRIES: ED5400
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 - DEST
; R7 - DEST
;----------------------------------------------------------------------
ED5400: ;
MOV R4 RL5400 ;
MOV ECRPTR R6 ;
MOD R6 ;
MOVC ECIFLG R5 ;
IBN X5 ECISCQ ; IF SETBD COMMAND REQUIRED THEN
JMP ED5412 ; DISCARD EDC BLOCK
MOVC 1<TSTCRC+1<TSTBID R0 ; TO REQUEST TEST OF CRC & BID
JMP S4 ED4510 ; IF AN ERROR IS FOUND
JMP ED5412 ; THEN GO DISCARD EB
IBN X5 ECIAP1 ; IF AN ACK IS PENDING THEN
JMP S4 ED4700 ; DO ACK BOOKKEEPING
IBN X5 ECISETB ; IF LAST INPUT BLK WAS SETBD AND
IBZ X5 ECIAR1 ; DATA IS IN THE SYSTEM - SKIP
JMP ED5402 ; OTHERWISE JUMP
;-----------------------------------
; --- RECOVERY SITUATION ---
;
; THE LAST BLOCK WAS A SETBD BUT
; DATA IS STILL IN THE SYSTEM.
; SET THE RECOVERY FLAG (ECIRR)
; AND FINISH PROCESSING WHEN THE
; LAST MP-ACK (RELEASE) ARRIVES.
;-----------------------------------
SETS X5 ECIRR ; SET RECOVERY FLAG
RELS X5 ECISETB ; CLEAR "LST EB WAS SETBD" FLAG
JMP ED5412 ; EXIT
;-----------------------------------------------------------------------
; --- NO RECOVERY ---
;
; AT THIS POINT WE KNOW THE LAST
; BLOCK WAS NOT A SETBD OR THERE
; IS NO DATA IN THE SYSTEM. WE NOW
; RESEND ALL NAKS OR SEND LAST ACK
ED5402: ;-----------------------------------
RELS X5 ECISETB ; CLEAR LAST EB AS SETBD
MOVC FALSE R5 ; INITIALIZE QUEUE FLAG TO ACK
MOV ECINQI.X6 R2 ; GET BID OF NXT EB TO GO TO
; IDP FOR THIS CHANNEL
ED5403: ;
MOV R2 R7 ;
JMP S4 ED4520 ; GET ADDR. OF STATUS IN ARRAY
IBN X7 ECIEXP ; IF BID WAS EXPECTED THEN
JMP ED5408 ; GO CHECK FOR NAKF
MOV R2 R1 ;
ED5404: ;
IBN X7 ECINAK ; IF PREVIOUSLY NAK'D THEN SKIP
IBN X7 ECIOK ; IF BLOCK NOW OK THEN
JMP ED5405 ; GO CHECK FOR A NAK2
; THERE IS A NAK ON THIS BLOCK
MOVC TRUE R5 ; SET FOR NAK QUEUE
ADDC 1 R2 ; SET FOR NEXT STATUS ENTRY
MOV R2 R7 ;
JMP S4 ED4520 ; GET NEXT STATUS ENTRY
JMP ED5404 ; LOOK AT NEXT BLOCK FOR NAK2/NAKF
ED5405: ;
IEQ R1 R2 ; IF R1 = R2 THEN
JMP ED5406 ; NO NAK NEEDED
ADDC -1 R2 ; SEE IF MORE THAN ONE BLOCK
INE R1 R2 ; MUST BE NAK'D
MODC BTNAK2-BTNAK ; YES - NAK2
MOVC BTNAK R0 ; NO - NAK
MOD R6 ;
MOVC ECCNQH R3 ;
JMP S4 ED4500 ; CREATE REQ'D NAK BLOCK
JMPI RL5400 ; NO BINS AVAILABLE
ED5406: ;
ADDC 1 R2 ; SET FOR NXT STATUS ARRAY ENTRY
JMP ED5403 ; CONTINUE
ED5408: ;
MOV R2 R1 ;
MOV CIBID R2 ; GET CURRENT BID
IBZP X7 ECINAKF ; IF NAKF HAS NOT BEEN SENT AND
JMPI S4 EI4530 ; NXT BID QUED > RR BID
JMP ED5410 ; SEND AN ACK
MOVC BTNAKF R0 ;
MOD R6 ;
MOVC ECCNQH R3 ;
ADDC -1 R1 ;
JMP S4 ED4500 ; CREATE A NAKF
JMPI RL5400 ; NO BINS AVAILABLE
MOVC TRUE R5 ; SET FLAG FOR NAK QUEUE
ED5410: ;
INE R5 FALSE ; IF NAK MADE UP THEN
JMP ED5411 ; GO SEND A NAK
MOVC BTACK R0 ;
MOD R6 ;
MOVC ECCAQH R3 ;
MOV ECIPAI.X6 R1 ; GET LAST ACK'D BID
JMP S4 ED4500 ; CREATE ACK BLOCK
JMPI RL5400 ; NO BINS AVAILABLE
MODC EI1601-EI1602 ; SCHEDULE ACK QUEUE
ED5411: ;
JMPI S4 EI1602 ; SCHEDULE NAK QUEUE
ED5412: ;
JMP S4 ED4620 ; DISCARD THE RR BLOCK
JMPI RL5400 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; PROCESS INCOMMING LCB BLOCKS
;
; WHEN A VALID LCB BLOCK IS RECEIVED THE END OF BLOCK FLAG IS SET
; IN THE BLOCK AND IT IS PASSED TO IDP.
;
; CALLED BY: ED2100
;
; CALLS: ED4510, ED4620, ED4580, ED4570
;
; ENTRIES: ED5500
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R1 - DEST
; R2 - DEST
; R3 - DEST
; R4 LINK DEST
; R5 - DEST
; R6 - DEST
; R7 - DEST
;----------------------------------------------------------------------
ED5500: ;
MOV R4 RL5500 ;
MOV ECRPTR R6 ;
MOD R6 ;
MOVC ECIFLG R5 ; GET INPUT FLAG
IBN X5 ECISCQ ; IF SETBD REQ'D THEN
JMP ED5504 ; GO DISCARD THE BLOCK
MOVC 1<TSTCRC+1<TSTBID R0 ;
JMP S4 ED4510 ; TEST BID PARITY AND CRC
JMP ED5504 ; BID PARITY OR CRC ERROR
IBN X5 ECIALR ; IS AN LCB IN THE SYSTEM
JMP ED5504 ; YES - REJECT THE BLOCK
MOD R6 ; READ BLOCK COUNT IN LCB
MOV ECCIQH+QCCQE R3 ;
INE R3 1 ; IF MORE THAN 1 BLOCK IN LCB
JMP ED5504 ; THEN GO DISCARD THE BLOCK
MOV CIBID R0 ;
MOV R0 ECIALB.X6 ; SAVE LCB'S BID
SETS X5 ECIALR ; SET "WAIT FOR MP-ACK" FLAG
MOD ECRPTA ;
MOVC ECCIQH R4 ;
MON LNOQ ; FETCH LCB FROM INPUT BIN QUEUE
NOP ;
MOD CSTPTA ;
MOVC CSTFIB R4 ; QUEUE LCB FOR IDP
MON LNIQ ;
MOVC 1<BINEIB R0 ;
JMP S4 ED4570 ; SET END OF BLOCK FLAG IN LCB
JMPI S4 EI4580 ; NOTIFY IDP
JMP ED5506 ;
ED5504: ;
JMP S4 ED4620 ; DISCARD THE BLOCK
ED5506: ;
JMPI RL5500 ;
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; PRESET INPUT AREA
;
; THIS ROUTINE CLEARS THE INPUT AREA OF AN ECR. IT IS USED WHEN
; INPUT IS CLOSED.
;
; CALLED BY: ED3300
;
; CALLS: ED4550
;
; ENTRIES: ED5600
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0-R3 - DEST
; R4 LINK DEST
; R5-R7 - DEST
;----------------------------------------------------------------------
ED5600: ;
MOV R4 RL5600 ;
MOVC 1 R1 ; BID1 = 1
MOVC ECISAD R2 ; BID2 = ECISAD
JMP S4 ED4550 ; CLEAR STATUS ARRAY
JMPI S4 EI1900 ;UE BID ERROR (NOT LIKELY)
MOVC 1<ECISCQ R0 ;
MOD ECFPTR ; SET "SETBD REQ'D" FLAG
MOV R0 ECIFLG ;
JMPI RL5600 ; RETURN TO LINK 99
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; HALTED MESSAGE PROCESSING
;
; WHEN A HALTED MESSAGE IS DETECTED, THIS ROUTINE IS CALLED TO
; RELEASE ALL BINS IN THE HALTED BLOCK AND SEND A "HALTED MESSAGE"
; BLOCK TO IDP.
;
; CALLED BY: ED1550
;
; CALLS: ED4570, ED4580
;
; ENTRIES: ED5700
;
; RETURNS: LINK
;
; REGISTERS: ENTRY EXIT
; R0-R3 - DEST
; R4 LINK DEST
; R5-R7 - DEST
;----------------------------------------------------------------------
ED5700: ;
MOV R4 RL5700 ;
MOD ECRPTA ;
MOVC ECCIQH R4 ; DISCARD ECR INPUT BIN QUEUE BINS
MODN XBASE ; EXCEPT THE LAST ONE
MOV QCCQE. X4 R3 ;
ADDC -1 R3 ;
JOZ R3 ED5702 ; IF ONLY ONE BIN - NO RELEASE
MON LNOQ ; LINK BINS OUT
JMPI S4 EI1990 ;E DEQUEUE ERROR
MON RNBN ; RELEASE BINS TO BIN POOL
ED5702: ;
MOVC 1 R3 ;
MOD ECRPTA ;
MOVC ECCIQH R4 ; GET THE BIN WE SAVED
MON LNOQ ; I.E. LINK IT OUT OF QUEUE
JMPI S4 EI1990 ;E DEQUEUE ERROR
MOVC 1<BINEIB R0 ;
JMP S4 ED4570 ; SET END OF BLOCK FLAG IN BIN
MOD CSTPTA ;
MOVC CSTFIB R4 ;
MOVC 1 R3 ; QUEUE IT FOR IDP
MON LNIQ ;
JMPI S4 EI4580 ; NOTIFY IDP
JMPI RL5700 ; RETURN TO LINK
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
;
; EXTERNALE NAMES: FILE : EDINOD.
;
;----------------------------------------------------------------------
BEGIN
EXTERNAL ED4300,ED4410,ED5100,ED5200,ED5300,ED5400,ED5500,ED5600,ED5700
EXTERNAL ED4530,ED4580
NAMES
END
;----------------------------------------------------------------------
END
«eof»