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 - 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»