|
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: 69248 (0x10e80) Types: TextFile Names: »EDMSOD«
└─⟦7c4388e5c⟧ Bits:30005071 8" CR80 Floppy CR80FD_0009 ( EDM SYS 1 PJ DEC 3,80 ) └─⟦193e12850⟧ └─⟦this⟧ »EDMSOD«
LIST ;----------------------------------------------------------------------- ; ; PROJECT: NICS-TARE/CP ; ; MODULE IDENTIFICATION: NIC/290 ; ; CPS NAME: ERROR DETECTION AND CORRECTION (EDC) SUBMODULE ; EDC MAIN PROGRAM SECTION (EDM). ; ; MERGE FILES: SEE LIST BELOW ; ; MODULE FILES: EDMSOD,EDMMOD,EDMHOD,EDMNOD,EDMVOD ; ; REFERENCES: NIC/200/PSP/0006 ; ;----------------------------------------------------------------------- BEGIN MODULE EDMSYS USE BASE XDATE:=#$OC ;----------------------------------------------------------------------- ; ; MERGE FILE MESSAGES ; ;----------------------------------------------------------------------- NOLIST MESSAGE <:CALL XPDNOD:> $XPDNOD MESSAGE <:CALL SYSNOD:> $SYSNOD MESSAGE <:CALL MNNNOD:> $MNNNOD MESSAGE <:CALL CCONOD:> $CCONOD MESSAGE <:CALL ADANOD:> $ADANOD MESSAGE <:CALL GDSNOD:> $GDSNOD MESSAGE <:CALL LETNOD:> $LETNOD MESSAGE <:CALL PCFNOD:> $PCFNOD MESSAGE <:CALL CDTNOD:> $CDTNOD MESSAGE <:CALL ECFNOD:> $ECFNOD MESSAGE <:CALL EOCNOD:> $EOCNOD MESSAGE <:CALL EDCNOD:> $EDCNOD MESSAGE <:CALL EDINOD:> $EDINOD MESSAGE <:CALL EDONOD:> $EDONOD MESSAGE <:CALL CSTNOD:> $CSTNOD MESSAGE <:CALL GSTNOD:> $GSTNOD MESSAGE <:CALL MQXNOD:> $MQXNOD MESSAGE <:CALL BINNOD:> $BINNOD MESSAGE <:CALL MSBNOD:> $MSBNOD MESSAGE <:CALL COPNOD:> $COPNOD MESSAGE <:CALL DBPNOD:> $DBPNOD MESSAGE <:CALL DANNOD:> $DANNOD LIST ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ; RETURN LINKS (RL)/WORK. ; ;----------------------------------------------------------------------- LOC=EMBASE INTSTA: LOC=LOC+1 ; INT._DRIVEN_PROCESS STATE (IDLE/]1>!) ;----------------------------------------------------------------------- ; ; THE FOLLOWING ARE RETURN LINKS FOR VARIOUS ROUTINES ; ;----------------------------------------------------------------------- RL1000: LOC=LOC+1 ; RL1050: LOC=LOC+1 ; RL1055: LOC=LOC+1 ; RL1060: LOC=LOC+1 ; RL1100: LOC=LOC+1 ; RL1220: LOC=LOC+1 ; RL1230: LOC=LOC+1 ; RL1250: LOC=LOC+1 ; RL1252: LOC=LOC+1 ; RL1260: LOC=LOC+1 ; RL1390: LOC=LOC+1 ; RL1400: LOC=LOC+1 ; RL1410: LOC=LOC+1 ; RL1460: LOC=LOC+1 ; RL1470: LOC=LOC+1 ; RL1510: LOC=LOC+1 ; RL1520: LOC=LOC+1 ; RL1540: LOC=LOC+1 ; RL1550: LOC=LOC+1 ; RL1560: LOC=LOC+1 ; RL1600: LOC=LOC+1 ; RL1650: LOC=LOC+1 ; RL3200: LOC=LOC+1 ; RL3210: LOC=LOC+1 ; RL3300: LOC=LOC+1 ; RL3310: LOC=LOC+1 ; RL3500: LOC=LOC+1 ; RL3600: LOC=LOC+1 ; RL3380: LOC=LOC+1 ; ;----------------------------------------------------------------------- ; ; ASSIGNED CONSTANTS ; ;----------------------------------------------------------------------- PCIDLE:=-1 ; PROCESS IDLE. ; ; BITS: BIT7:= 7 ; ; CAUSE CODES: TIMEOUT:=3 ; TIMEOUT ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ; EDC MAIN PROGRAM SECTION. ; ;----------------------------------------------------------------------- USE PROG LOC=EMPROG EI1650:ED1650 ; ;----------------------------------------------------------------------- ; INITIALIZE THE INTERRUPT PROCESS (EDI) ; ; CALLED BY: ED2000 ; ; CALLS: ED1050, ED1055, ED1060 ; ; ENTRIES: ED1000 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3 - DESTROYED ; R4 LINK DESTROYED ; R5,R6,R7 - DESTROYED ;----------------------------------------------------------------------- ED1000: ; MOV R4 RL1000 ; JMP S4 ED1050 ; INITIALIZE PROCESS DESCRIPTOR JMP S4 ED1055 ; SET UP GENERAL AREA OF ECF JMP S4 ED1060 ; CREATE ECR'S MON GLET ; GET A LETTER JMPI S4 EI1940 &;E NO LETTER - REPORT ERROR MOV R5 ECIITL ; SAVE LOCATION OF LETTER JMPI RL1000 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; INITIALIZE POINTERS IN THE PROCESS DESCRIPTOR ; ; CALLED BY: ED1000, ED1100 ; ; CALLS: NONE ; ; ENTRIES: ED1050 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0 - DESTROYED ; R4 LINK DESTROYED ; R5 - GSTP (REL) ; R7 - DESTROYED ; R1, R2, R3, R6 - UNCHANGED ;----------------------------------------------------------------------- ED1050: ; MOV R4 RL1050 ; MOV XBASE R7 ; MOV XGSTPR R5 ; INITIALIZE GST POINTERS MOV R5 GSTPTA ; SUB R7 R5 ; MOV R5 XGSTPR ; MOV GSTECF.X5 R0 ; INITIALIZE ECF POINTERS MOV R0 ECFPTA ; SUB R7 R0 ; MOV R0 ECFPTR ; MOV GSTPCF.X5 R0 ; INITIALIZE PCF POINTERS MOV R0 PCFPTA ; SUB R7 R0 ; MOV R0 PCFPTR ; MOV GSTMQE.X5 R0 ; INITIALIZE MQE POINTERS MOV R0 MQEPTA ; SUB R7 R0 ; MOV R0 MQEPTR ; MOV R0 NMQEPT ; MOV GSTMQI.X5 R0 ; INITIALIZE MQI POINTERS MOV R0 MQIPTA ; SUB R7 R0 ; MOV R0 MQIPTR ; MOV R0 NMQIPT ; MOV GSTMQO.X5 R0 ; INITIALIZE MQO POINTERS MOV R0 MQOPTA ; SUB R7 R0 ; MOV R0 MQOPTR ; MOV R0 NMQOPT ; JMPI RL1050 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; INITIALIZE GENERAL ECF AREA ; ; CALLED BY: ED1000 ; ; CALLS: NONE ; ; ENTRIES: ED1055 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R3 - DESTROYED ; R2,R7 - UNCHANGED ; R4 LINK DESTROYED ; R5 - GSTP (REL) ; R6 - ECFP (REL) ;----------------------------------------------------------------------- ED1055: ; MOV R4 RL1055 ; MOV ECFPTR R6 ; MOVC EOCHMT R0 ; PRESET HALTED MS TIMER. MOV R0 ECGHMT.X6 ; MOVC EOCRCL R0 ; PRESET RETRANSMISSION CONTER MOV R0 ECGRCL.X6 ; MOVC EOARMB R0 ; MOV R0 ECGARMB.X6 ; SETUP ALLOWED MISSING BID RANGE MOD R6 ; MOVC ECGAKA R4 ; MOVC ECGAK0 X4 ; PRESET ACK_ARRAY ADDC ECGALA-ECGAKA R4 ; MOVC ECGAL0 X4 ; PRESET ACKL_ARRAY MOV XGSTPR R5 ; MOV GSTTCC.X5 R0 ; MOD R0 ; LOOKUP CST ENTRY ADDRESSES ADDC GSTCDY-2 R5 ; OF THE TWO HIGHEST LOGICAL MOVL 0. X5 R01 ; NUMBERED CST ENTRIES MOVL R01 ECGCIM.X6 ; SETUP TD&M CST ENTRY POINTERS JMPI RL1055 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; CREATE ECR'S AT INITIALIZATION ; ; CALLED BY: ED1000 ; ; CALLS: NONE ; ; ENTRIES: ED1060 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R3 - DESTROYED ; R1,R2 - UNCHANGED ; R4 LINK DESTROYED ; R5 - GSTP (REL) ; R6,R7 - DESTROYED ;----------------------------------------------------------------------- ED1060: ; MOV R4 RL1060 ; MOV XGSTPR R5 ; GET RELATIVE GST POINTER MOV ECFPTR R6 ; GET RELATIVE ECF POINTER ADDC ECGSIZ-ECRSIZ R6 ; SET TO POINT AT 1ST ECR ; AFTER ADDING AT ED1062 MOV GSTNSE.X5 R0 ; NO. OF EDC CHANNELS (COUNTER) MOV R0 R3 ; ED1062: ; ADDC ECRSIZ R6 ; INCREMENT TO NEXT ECR MOV R6 R7 ; MOD XBASE ; ADDC ECRSIZ R7 ; GET LOC. OF FOLLOWING ECR MOV R7 ECCLNK.X6 ; SET LINK TO FOLLOWING ECR SOB R0 ED1062 ; CONTINUE TILL ECR LINKS DONE CLR ECCLNK.X6 ; SET LAST LINK TO ZERO ADD XBASE R6 ; ABS. LOC. OF LAST ECR MOV ECFPTR R4 ; MOD ECFPTA ; MOVC ECGSIZ R7 ; LOCATION OF 1ST ECR MOV R7 ECGFQH+QCFQE. X4 ; SET LOC. OF 1ST ECR IN QUEUE MOV R6 ECGFQH+QCLQE. X4 ; SET LOC. OF LAST ECR IN QUEUE MOV R3 ECGFQH+QCCQE. X4 ; SET NO. OF ECR'S IN QUEUE MOD ECFPTA ; MOVC ECGUQH+QCFQE R0 ; SET UP QCB FOR USED ECR'S MOV R0 ECGUQH+QCLQE. X4 ; JMPI RL1060 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; INITIALIZE LETTER DRIVEN PROCESS (EDL) ; ; CALLED BY: ED3000 ; ; CALLS: ED1050, ED1920, ED1950 ; ; ENTRIES: ED1100 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3 - DESTROYED ; R4 LINK DESTROYED ; R5,R6,R7 - DESTROYED ;----------------------------------------------------------------------- ED1100: ; MOV R4 RL1100 ; JMP S4 ED1050 ; INITIALIZE PROCESS DESCRIPTOR ;----------------------------------- ; CONSTRUCT AND SEND A LETTER ; TO RTC TO CAUSE PERIODIC ; ACTIVATION OF THE LETTER PROCESS ;----------------------------------- MON GLET ; GET A LETTER JMPI S4 EI1950 &;E NO LETTER - REPORT ERROR MOV R5 LETPTA ; MOV R5 R7 ; SUB XBASE R7 ; REL. POINTER TO LETTER MOVC EDCRTC R0 ; LETTER TYPE = EDCRTC MOVC RTCLPN R2 ; RECEIVER = RTC MOVC EDLLPN R3 ; SENDER = EDL MOV R0 LTTYP. X7 ; MOVL R23 LTRCV. X7 ; MOVC LTMST1 R0 ; MSG_TYPE=LTMST1 MOVC EOCRTE R1 ; TIME BETWEEN LETTERS MOV R0 LTMS1. X7 ; MOV R1 LTMS4. X7 ; MON SLET ; SEND THE LETTER JMPI S4 EI1920 &;E REPORT LETTER SENDING ERROR JMPI RL1100 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; GET POINTERS TO CST, CDT, ECR, DEPENDING ON ENTRY ; ; CALLED BY: ED1500, ED1510, ED8600, ED8610 ; ; CALLS: NONE ; ; ENTRIES: ED1200 GETS ALL POINTERS ; ED1201 GETS CDT AND ECR ONLY ; ; RETURNS: LINK - NO CDT OR NO ECR ; LINK+1 - DONE ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3,R5 - UNCHANGED ; R4 LINK DESTROYED ; R6 LCN ECRP (REL) ; R7 (CSTP (REL)) CSTP (REL) ;----------------------------------------------------------------------- ED1200: ; MOV XGSTPR R7 ; MOD R6 ; MOV GSTCDY.X7 R7 ; GET CST ADDR. FOR GIVEN LCN MOV R7 CSTPTA ; SAVE ABSOLUTE LOCATION SUB XBASE R7 ; MOV R7 CSTPTR ; SAVE RELATIVE CST LOCATION ED1201: ; MOV CSTCDT.X7 R6 ; GET CDT POINTER FROM CST IEQ R6 0 ; IF NO CDT EXISTS - THEN JMP 0. X4 ; RETURN TO LINK MOV R6 CDTPTA ; SAVE ABSOLUTE CDT POINTER SUB XBASE R6 ; MOV R6 CDTPTR ; SAVE RELATIVE CDT POINTER MOV CSTECR.X7 R6 ; GET ECR POINTER FROM CST IEQ R6 0 ; IF NO ECR EXISTS - THEN JMP 0. X4 ; RETURN TO LINK MOV R6 ECRPTA ; SAVE ABSOLUTE ECR POINTER SUB XBASE R6 ; MOV R6 ECRPTR ; SAVE RELATIVE ECR POINTER JMP 1. X4 ; RETURN TO LINK+1 ;----------------------------------------------------------------------- ;FF\f ;---------------------------------------------------------------------- ; ENABLE INTERRUPTS MOMENTARILY ; ; THIS SUBROUTINE IS ENTERRED FROM A VARIETY OF PLACES FOR THE ; PURPOSE OF OPENING A "WINDOW" FOR INTERRUPTS TO BE SERVICED. ; ; CALLED BY: ED2100, ED2200, ED2500, ED3340, ED3600 ; ; CALLS: NONE ; ; ENTRIES: ED1210 - RESERVES CPU INTERRUPT BEFORE ENABLING INTERRUPTS ; ED1212 - ENABLES INTERRUPTS ONLY ; ; RETURNS: LINK ; ; REGISTERS: ENTRY EXIT ; R0,R1,R5,R6 - UNCHANGED ; R2,R3,R7 - DESTROYED (ED1210 ENTRY ONLY) ; R4 LINK DESTROYED ;---------------------------------------------------------------------- ED1210: ; MON RCPU ; RESERVE CPU INTERRUPT ED1212: ; ENABLE WITHOUT RESERVE LDM 2#100 ; INT. WINDOW LDM 2#111 ; MODN R4 ; INTSTA<>IDLE CLR INTSTA.X4 ; JMP 0. X4 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ALLOCATE AN ECR ; ; AN EMPTY ECR IS ALLOCATED, I.E. REMOVED FROM THE LIST OF EMPTIES ; AND ADDED TO THE LIST OF THOSE IN USE. VARIOUS DATA WITHIN THE ECR ; AND ITS ASSOCIATED CST ARE INITIALIZED. ; ; CALLED BY: ED3350 ; ; CALLS: NONE ; ; ENTRIES: ED1220 ; ; RETURNS: LINK - NO ECR IN LIST OF EMPTIES ; LINK+1 - DONE ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3 - DESTROYED ; R4 LINK DESTROYED ; R5 - DESTROYED ; R6 - ECRP (REL) ; R7 - CSTP (REL) ;----------------------------------------------------------------------- ED1220: ; MOV R4 RL1220 ; ; 1. GET AN ECR MOD ECFPTA ; MOVC ECGFQH R4 ; PREPARE TO GET AN ECR FROM MOVC 1 R3 ; THE EMPTY LIST MON LNOQ ; DEQUEUE AN ECR FROM EMPTY LIST JMPI RL1220 &;E NO ECR - RETURN TO LINK SUB XBASE R6 ; MOV R5 ECRPTA ; STORE ABSOLUTE ECR ADDRESS MOV R6 ECRPTR ; STORE RELATIVE ECR ADDRESS MOD ECFPTA ; MOVC ECGUQH R4 ; MON QDLE ; QUEUE ECR ON THE USED LIST MOV CSTPTA R0 ; MOV CSTPTR R7 ; MOV ECRPTA R1 ; MOV R0 ECCCST.X6 ; SET POINTER TO CST IN ECR MOV R1 CSTECR.X7 ; SET POINTER TO ECR IN CST ; ; 2. INITIALIZE ECR COMMON SECTION MOV CSTCS1.X7 R0 ; IF CSTLAD NE 0 THEN SRL R0 CSTLAD FI XTR R0 CSTLAX ; MOV R0 ECCLCN.X6 ; SAVE LCN IN ECR MOVC ECCIQH R0 ; JMP S4 ED1224 ; INITIALIZE INPUT BIN QUEUE MOVC ECCAQH R0 ; JMP S4 ED1224 ; INITIALIZE ACK QUEUE MOVC ECCNQH R0 ; JMP S4 ED1224 ; INITIALIZE NAK QUEUE MOVC ECCALQH R0 ; JMP S4 ED1224 ; INITIALIZE ACKL QUEUE ; ; 3. INITIALIZE ECR INPUT SECTION MOVC 1<ECISCQ R0 ; MOV R0 ECIFLG.X6 ; SET SETBD COMMAND REQUIRED ; (ALL OTHER ECIFLG'S CLEAR) MOVC ECISAD R0 ; MOV R0 ECISBC.X6 ; SETUP_INPUT_ARRAY_DIMENTION ; ; 4. INITIALIZE ECR OUTPUT SECTION MOVC 1<ECOSCQ R0 ; MOV R0 ECOFLG.X6 ; SET SETBD COMMAND REQUIRED ; (ALL OTHER ECOFLG'S CLEAR) MOV RL1220 R4 ; JMP 1. X4 ; RETURN TO LINK+1 ;----------------------------------------------------------------------- ; LOCAL SUBROUTINE USED TO ; INITIALIZE QUEUES. ; R0 = QCB LOCATION ; R6 = ECRPTR ;----------------------------------- ED1224: ; MOVC 0 R3 ; MOV R6 R5 ; ADD R0 R5 ; ADD ECRPTA R0 ; MOV R3 QCFQE. X5 ; SET 1ST QUEUE ELEMENT TO ZERO MOV R0 QCLQE. X5 ; LST QUEUE ELE. = ADDR. OF 1ST MOV R3 QCCQE. X5 ; SET ELEMENT COUNT TO ZERO JMP 0. X4 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; OPEN THE OUTPUT AREA OF AN ECR ; ; THE OUTPUT SECTION OF AN ECR IS PREPARED FOR THE START OF OUTPUT. ; THE OUTPUT AREA AND STATUS ARRAYS ARE CLEARED AND VARIOUS FLAGS ; AND POINTERS ARE INITIALIZED. ; ; CALLED BY: ED3360 ; ; CALLS: NONE ; ; ENTRIES: ED1240 ; ; RETURNS: LINK ; ; REGISTERS: ENTRY EXIT ; R0 BID DEST ; R1,R2,R5,R7 - UNCH ; R3 - DEST ; R4 LINK UNCH ; R6 ECRP(REL) UNCH ;---------------------------------------------------------------------- ED1240: ; MOV R0 EDWRK0 ; MOD ECRPTA ; MOVC ECOOFS R0 ; ABS. LOC. OF ECR OUTPUT AREA MOVC ECOCSZ R3 ; CLEAR OUTPUT PART OF ECR MON CLEAR ; MOD ECRPTA ; MOVC ECOSTA R0 ; ABS. LOC. OF OUTPUT STAT ARRAY MOVC 2*ECOASZ R3 ; MON CLEAR ; CLEAR ENTIRE ARRAY MOV EDWRK0 R0 ; XTR R0 EOCBDX ; MAKE SURE BID IS MODULO 128 MOV R0 ECOPSB.X6 ; INITIALIZE PREV. SEGMENT BID MOV R0 ECOFSB.X6 ; INITIALIZE 1ST SEGMENT BID MOV R0 ECOSSB.X6 ; INITIALIZE 2ND SEGMENT BID ADDC 1 R0 ; MOV R0 ECONIX.X6 ; INITIALIZE NXT ARRAY INDEX MOV R0 ECONTX.X6 ; INITIALIZE NXT TO XMIT BID ;----------------------------------- ; INITIALIZE OUTPUT FLAGS TO SHOW: ; SETBD MODE ; OUTPUT PROCESSING REQ'D ; ACK TIMEOUT ; ACKL TIMEOUT ;----------------------------------- MOVC 1<ECOSBM+1<ECOATO% ; +1<ECOALTO+1<ECOPCQ R0 ; MOV R0 ECOFLG.X6 ; JMP 0. X4 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; RELEASE DATA FROM QUEUES ; ; THIS SUBROUTINE HAS TWO ENTRIES. ED1251 RELEASES ALL DATA CONNECTED ; WITH ACK, NAK AND ACKL QUEUES. ED1250 DOES THE SAME AS ED1251 BUT IN ; ADDITION RELEASES DATA FROM THE INPUT BIN QUEUE. ; ; CALLED BY: ED3330,ED5300 ; ; CALLS: NONE ; ; ENTRIES: ED1250 - RELEASE DATA FROM ALL QUEUES ; ED1251 - RELEASE ALL INPUT GENERATED OUTPUT ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3 - DESTROYED ; R4 LINK DESTROYED ; R5,R6,R7 - DESTROYED ;----------------------------------------------------------------------- ED1250: ; MOV R4 RL1250 ; MOVC ECCIQH R4 ; JMP S6 ED1252 ; RELEASE INPUT BIN QUEUE JMP LOC+2 ; ED1251: ; BEGIN RELEASE OF OUTPUT DATA MOV R4 RL1250 ; MOVC ECCAQH R4 ; JMP S6 ED1252 ; RELEASE ACK QUEUE MOVC ECCNQH R4 ; JMP S6 ED1252 ; RELEASE NAK QUEUE MOVC ECCALQH R4 ; JMP S6 ED1252 ; RELEASE ACKL QUEUE JMPI RL1250 ; RETURN ;----------------------------------------------------------------------- ; LOCAL SUBROUTINE PERFORMS THE ; ACTUAL RELEASE. ;----------------------------------- ED1252: ; MOV R6 RL1252 ; MOVC 255 R3 ; ADD ECRPTA R4 ; MON LNOQ ; DEQUEUE ALL BINS NOP ; MON RNBN ; RELEASE ALL BINS JMPI RL1252 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; RELEASE OUTPUT DATA ; ; THIS ROUTINE IS USED TO RELEASE ALL OUTPUT DATA FOR A GIVEN ECR. ; ; CALLED BY: ED3340, ED3360, ED3600 ; ; CALLS: ED6520 ; ;ENTRIES: ED1260 ; ; RETURNS: LINK ; ; REGISTERS: ENTRY EXIT ; R0,R1,R2,R3,R5,R7 - DESTROYED ; R4 LINK DESTROYED ; R6 ECRP (REL) ECRP (REL) ;----------------------------------------------------------------------- ED1260: ; MOV R4 RL1260 ; MOVC 0 R0 ; MOVC ECOSAZ R1 ; R1 = ARRAY SIZE = 32 JMPI S4 EI6520 ; CLEAN OUT STATUS ARRAY MOV ECOQCW.X6 R0 ; GET QUEUE CONTROL WORD IBN R0 ECOLTX ; IF BLOCK IS NOT AN LCB OR IBN R0 ECOLIT ; IF THE LCB IS IN TRANSMISSION JMP ED1262 ; THEN GO RELEASE DATA MOVC NT% ; (1<ECOLCP+1<ECOLTX) R0 ; AND R0 ECOQCW.X6 ; CLEAR ALL BUT LCB BITS INECOQCW MOVC 1 R3 ; MOV ECOLER.X6 R5 ; MON RNBN ; RELEASE LCB BLOCK ED1262: ; MOV CSTPTR R6 ; MON RODCST ; RELEASE OUTPUT DATA FROM CST MOV ECRPTR R6 ; BEGIN DISCARD MQO'S IN PROGRESS MOVC EOCTDC R0 ; I.E. MOV R0 ECOTQI0.X6 ; SET QUEUE TYPES TO "DISCARD" MOV R0 ECOTQI1.X6 ; JMPI RL1260 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;---------------------------------------------------------------------- ; GET AN MQE ENTRY ; ; THIS SUBROUTINE IS CALLED TO ACCESS AN MQE ENTRY WHICH IS READY ; TO BE PROCESSED. THE FLAG AND STATUS WORDS ARE MOVED TO LOCAL ; STORAGE AND MQE TABLE BOOKKEEPING IS DONE. ; ; CALLED BY: ED2090 ; ; CALLS: ED19F1 ; ; ENTRIES: ED1390 ; ; RETURNS: LINK - NON-EDC MQE ; LINK+1 - EDC MQE ; LINK+2 - MQE TABLE EMPTY ; ; REGISTERS: ENTRY EXIT ; R0,R1,R2,R6 - DESTROYED ;R3,R5,R7 - UNCHANGED ; R4 LINK DESTROYED ;---------------------------------------------------------------------- ED1390: ; MOV R4 RL1390 ; MOV NMQEPT R6 ; GET NXT MQE RELATIVE ADDRESS MOVL MQEFLG.X6 R01 ; GET MQE FLAGS AND STATUS MOVC NT(1<MQEEND) R2 ; AND R0 R2 ; MASK OUT "MQE'S END" FLAG IEQ R2 0 ; IF REMAINING FLAGS = ZERO - THEN JMP 2. X4 ; TAKE "EMPTY" EXIT IBZ R0 MQEEDC ; IF NOT AN EDC MQE - THEN JMP ED1392 ; GO NOTIFY MXI ADDC 1 R4 ; SET UP "EDC MQE" EXIT IBZ X6 MQERDY ; IF MQE NOT READY TO PROCESS JMPI S4 EI19F1 ;E REPORT AN ERROR RELS X6 MQERDY ; CLEAR "READY TO PROCESS" FLAG MOV R0 CEFLG ; MOVE FLAGS AND STATUS TO MOV R1 CEEST ; LOCAL STORAGE JMP ED1394 ; ED1392: ; MOVC DAMXI R0 ; INT R0 ; *** TRIGGER MXI *** ED1394: ; IBZP X6 MQEHLD ; IF MXI HAS NOT SEEN THIS MQE SETS X6 MQEHLD ; SET "HANDLED ONCE" FLAG JMP ED1396 ; MOVC 1<MQEEND R0 ; CLEAR THE MQE - DONE WITH IT AND R0 MQEFLG.X6 ; ED1396: ; IBZP X6 MQEEND ; IF NOT END OF MQE'S - THEN ADDC MQEESZ R6 ; SET UP FOR NEXT MQE JMP LOC+2 ; ELSE MOV MQEPTR R6 ; USE START OF MQE'S AS NEXT MOV R6 NMQEPT ; JMP 0. X4 ; RETURN LINK+0/1 ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; GET AN MQI ENTRY ; ; THIS SUBROUTINE IS CALLED TO ACCESS THE NEXT MQI TABLE ENTRY WHICH ; IS READY TO BE PROCESSED. MQI ENTRY CONTENTS ARE MOVED TO LOCAL ; STORAGE AND MQI TABLE BOOKKEEPING IS DONE. ; ; CALLED BY: ED2100 ; ; CALLS: ED19F1 ; ; ENTRIES: ED1400 ; ; RETURNS: LIN5 - MQI TABLE EMPTY ; LINK+1 - NON-EDC MQI ; LINK+2 - DONE ; ; REGISTERS ENTRY EXIT ; R0,R2 - DESTROYED ; R1,R3,R5,R6 - UNCHANGED ; R4 LINK DESTROYED ; R7 - DESTROYED ;----------------------------------------------------------------------- ED1400: ; MOV R4 RL1400 ; MOV NMQIPT R4 ; GET NEXT MQI RELATIVE ADDRESS MOVL MQIFLG.X4 R01 ; GET FLAG AND STATUS WORDS MOVC NT 1<MQIEND R2 ; AND R0 R2 ; MASK OUT "END OF MQI'S" FLAG IEQ R2 0 ; IF OTHER FLAG BITS = ZERO THEN JMPI RL1400 ; TAKE THE EMPTY RETURN MOVC RL1400 R7 ; IBZP R0 MQIEDC ; IF A NON-EDC MQI - THEN INC 0. X7 ; SET FOR NON-EDC MQI RETURN JMP ED1401 ; GO DO BOOKKEEPING IBZ X4 MQIRDY ; IF MQI NOT READY TO PROCESS JMPI S4 EI19F1 ;E REPORT AN ERROR RELS X4 MQIRDY ; CLEAR "READY TO PROCESS" FLAG MOVC CIFLG R5 ; MODC MQIESZ ; MOVE MQI CONTENTS TO MOVM X4 X5 ; LOCAL STORAGE INC 0. X7 ; SET UP FOR "DONE" RETURN INC 0. X7 ; ED1401: ; MOV NMQIPT R4 ; IBN X4 MQIHLD ; IF MXI HAS SEEN THE MQI THEN JMP ED1403 ; GO CLEAN OUT THE MQI SETS X4 MQIHLD ; SET "HANDLED ONCE" FLAG IBNP R0 MQISYN ; IF SYNCH NON-EDC CHANNEL - THEN IBZ R0 MQIEDC ; JMP ED1402 ; GO TRIGGER MXI MOVC 1<MQIBML+1<MQISTC R2 ; AND R2 R1 ; INE R1 0 ; IF NO STUCK TAPE OR BIN MISLNK IBN R0 MQIEDC ; OR MQI IS EDC - THEN JMP ED1404 ; GO SET UP FOR NEXT MQI ED1402: ; MOVC DAMXI R0 ; *** TRIGGER MXI *** INT R0 ; JMP ED1404 ; ED1403: ; MOVC 1<MQIEND R0 ; CLEAR FLAGS EXCEPT "END OF MQI" AND R0 MQIFLG.X4 ; ED1404: ; IBZP X4 MQIEND ; IF NOT END OF MQI TABLE ADDC MQIESZ R4 &; SET UP FOR NEXT MQI JMP LOC+2 &; ELSE MOV MQIPTR R4 &; USE MQI TABLE START ADDRESS MOV R4 NMQIPT ; JMPI RL1400 ; RETURN(1/2) ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; GET AN MQO ENTRY ; ; CALLED BY: ED2200 ; ; CALLS: ED19F1 ; ; ENTRIES: ED1410 ; ; RETURNS: LINK - MQO TABLE EMPTY ; LINK+1 - NON-EDC MQO ; LINK+2 - DONE ; ; REGISTERS ENTRY EXIT ; R0,R2 - DESTROYED ; R1,R3,R5,R6 - UNCHANGED ; R4 LINK DESTROYED ; R7 - DESTROYED ;----------------------------------------------------------------------- ED1410: ; MOV R4 RL1410 ; MOV NMQOPT R4 ; GET NEXT MQO RELATIVE ADDRESS MOVL MQOFLG.X4 R01 ; GET FLAG AND STATUS WORDS MOVC NT 1<MQOEND R2 ; AND R0 R2 ; MASK OUT "END OF MQO'S" FLAG IEQ R2 0 ; IF OTHER FLAG BITS = ZERO - THEN JMPI RL1410 ; TAKE "EMPTY" RETURN MOVC RL1410 R7 ; IBZP R0 MQOEDC ; IF NON-EDC MQO - THEN INC 0. X7 ; SET UP "NON-EDC MQO" RETURN JMP ED1411 ; AND GO DO BOOKKEEPING IBZ X4 MQORDY ; IF MQO NOT READY TO PROCESS JMPI S4 EI19F1 ;E THEN REPORT AN ERROR RELS X4 MQORDY ; CLEAR "READY TO PROCESS" FLAG MOVC COFLG R5 ; MODC MQOESZ ; MOVM X4 X5 ; MOVE MQO TO LOCAL STORAGE INC 0. X7 ; SET UP "DONE" RETURN INC 0. X7 ; ED1411: ; MOV NMQOPT R4 ; IBN X4 MQOHLD ; IF MXI HAS SEEN THIS MQO - THEN JMP ED1413 ; GO CLEAN IT OUT SETS X4 MQOHLD ; SET "HANDLED ONCE" FLAG IBNP R0 MQOSYN ; IF A SYNCH NON-EDC CHANNEL THEN IBZ R0 MQOEDC ; JMP ED1412 ; GO TRIGGER MXI MOVC 1<MQOBML+1<MQOSER R2 ; AND R2 R1 ; INE R1 0 ; IF NO SEC. OR BIN LINK. ERRORS IBN R0 MQOEDC ; OR IT IS AN EDC MQO JMP ED1414 ; THEN GO SET U- NE0T M-O ADDRESS ED1412: ; MOVC DAMXI R0 ; *** TRIGGER MXI *** INT R0 ; JMP ED1414 ; ED1413: ; MOVC 1<MQOEND R0 ; CLEAR FLAGS EXCEPT "END OF MQO" AND R0 MQOFLG.X4 ; ED1414: ; IBZP X4 MQOEND ; IF NOT END OF MQO TABLE - THEN ADDC MQOESZ R4 &; SET UP FOR NEXT MQO JMP LOC+2 &; ELSE MOV MQOPTR R4 &; USE MQO START AS NEXT ADDRESS MOV R4 NMQOPT ; JMPI RL1410 ; RETURN(1/2) ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; UPDATE CSTVF1 ; ; THIS SUBROUTINE UPDATES CSTVF1 FROM STATUS BITS IN AN MQI. ; SETS "STATUS CHANGE" ; SETS "TRANSMIT OVERRUN" ; SETS "RECEIVE OVERRUN/INTERRUPT" ; IF "STATUS CHANGE" IS ON, THEN SEND AND RECEIVE STATUS ARE ADDED ; TO CSTVF1. IF THERE IS A MUX LINKAGE ERROR, CSTBML IS SET AND THE ; ERROR IS REPORTED. ; ; CALLED BY: ED1510 ; ; CALLS: ED19C0 ; ; ENTRIES: ED1450 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0 - DESTROYED ; R1,R2,R5,R6 - UNCHANGED ; R3 - BIN STATUS WORD ; R4 LINK DESTROYED ; R7 CSTP (REL) CSTP (REL) ;----------------------------------------------------------------------- ED1450: ; MOV CIEST R3 ; GET STATUS MOVC 1<CSTSCH+% ; 1<CSTTXO+1<CSTRXO R0 ; AND R3 R0 ; UNPACK 3 FLAGS SHOWN ABOVE IOR R0 CSTVF1.X7 ; PUT THEM IN CSTVF1 ADDC CSTVF1 R7 ; IBN R0 CSTSCH ; IF STATUS CHANGE IS ON - THEN MODC 1<CSTRCS+1<CSTSNS ; ADD SEND AND RECEIVE STATUS PUT R3 X7 ; TO CSTVF1 IBNP R3 CDIBML ; IF A BIN LINKAGE ERROR SETS X7 CSTBML ; THEN SET FLAG IN CSTVF1 JMPI S4 EI19C0 ;E AND REPORT THE ERROR ADDC -CSTVF1 R7 ; RESTORE R7 JMP 0. X4 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; UPDATE STATUS IN A BIN ; ; THIS SUBROUTINE CHECKS FOR A HALTED MESSAGE (VIA ED1470), STUCK TAPE ; OR INPUT OVERRUN. CORRESPONDING FLAGS ARE SET IN THE BIN STATUS WORD. ; IF ANY OF THE ABOVE ERRORS ARE FOUND THEN THE TERMINATION ERROR FLAG ; IS SET IN LOCAL STATUS (CIEST). ; ; CALLED BY: ED1510 ; ; CALLS: ED1470 ; ; ENTRIES: ED1460 ; ; RETURNS: LINK - BIN EMPTY ; LINK+1 - BIN NOT EMPTY OR HALTED MESSAGE OR STUCK TAPE ; ; REGISTERS ENTRY EXIT ; R0,R1 - DESTROYED ; R2 - BIN STATUS FLAGS ; R3 - DESTROYED ; R4 LINK DESTROYED ; R5 - BUFP (ABS) ; R6 - CSTP (REL) ; R7 - DESTROYED ;----------------------------------------------------------------------- ED1460: ; MOV R4 RL1460 ; MOV CIBUF R5 ; GET BIN ADDRESS MOV CSTPTR R6 ; JMP S4 ED1470 ; CHECK HALTED MS MODC 1<BINHMS &; HALTED MESSAGE DETECTED MOVC 0 R2 ; MOV R0 EDWRK0 ; SAVE CHAR. COUNT FROM ED1470 MOV CIEST R3 ; IBN R3 CDISTC ; IF STUCK TAPE DETECTED - THEN SETS R2 BINSTP ; SET STUCK TAPE FLAG IBNP R3 CDIINT ; IF OVERRUN DETECTED - THEN SETS R2 BINSTP ; SET STUCK TAPE AND SETS R2 BINHMS ; HALTED MESSAGE FLAGS MOV CIBUF R5 ; GET BIN ADDRESS MOVC BINSTA R0 ; GET STATUS POSITION IN A BIN MOVC BINIFM R1 ; GET BIT MASK MON PBUF ; PUT STATUS FLAGS IN THE BIN MOV EDWRK0 R0 ; MOV RL1460 R4 ; AND R2 R1 ; JON R1 ED1464 ; IF ERRORS FOUND GO SET TERM ERR IEQ R0 0 ; IF CHAR_COUNT=0 THEN JMP 0. X4 ; TAKE EMPTY BIN RETURN JMP 1. X4 ; RETURN(1) ED1464: ; MOVC CIEST R7 ; SETS X7 CDITME ; SET TERMINATION ERROR JMP 1. X4 ; RETURN(1) ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; CHECK FOR A HALTED MESSAGE (ED1470). OR ; RESET HALTED MESSAGE TIMER (ED1475) ; ; IF THE CHARACTER COUNT IS NON ZERO IT IMPLIES THAT THE MESSAGE IS ; NOT HALTED. IF THE COUNT IS ZERO THE TIME SINCE LAST FULL BIN IS ; CALCULATED. IF TIME CALCULATED IS LESS THAN THE HALTED MESSAGE TIME ; NO HALTED MESSAGE CAN BE ASSUMED. ; OTHERWISE THE HALTED MESSAGE EXIT IS TAKEN . ; ; CALLED BY: ED1460, ED5100, ED5200, ED5300 ; ; CALLS: NONE ; ; ENTRIES: ED1470 - CHECK FOR HALTED MESSAGE ; ; ED1475 - RESET HALTED MESSAGE TIMER ; ; REGISTERS: ENTRY EXIT ; R0 - COUNT ; R1 - DEST ; R2 - DEST ; R3 - DEST ; R4 LINK LINK ; R5 BUFP(ABS) BUFP(ABS) ; R7 - DEST ;----------------------------------------------------------------------- ED1470: ; MOV R4 RL1470 ; MON GBSM ; GET PAGE OF BIN MOV XBASE R1 ; SVS R2 ; SAVE CURRENT PAGE LDS R3 ; SET FOR BIN PAGE MODN R1 ; MOV BINSTA.X5 R0 ; GET STATUS WORD FROM BIN LDS R2 ; RESTORE CURRENT PAGE XTR R0 BINCNX ; UNPACK CHARACTER COUNT MOV RL1470 R4 ; INE R0 0 ; IF CHARACTER COUNT IS NON ZERO JMP 1. X4 ; TAKE MESSAGE OK RETURN MODN XBASE ; MOV ADCLK R3 ; MOV ECRPTR R7 ; MOV ECICLK.X7 R1 ; CALCULATE TIME ELAPSED SUB R1 R3 ; SINCE PREVIOUS DATA BUFFER. MOD ECFPTR ; MOV ECGHMT R1 ; ILO R3 R1 ; IF TIME<HALTED MS THEN JMP 1. X4 ; TAKE "OK" RETURN ED1475: ; MODN XBASE ; MOV ADCLK R1 ; MOD ECRPTR ; MOV R1 ECICLK ; RESET HALTED MESSAGE TIMER JMP 0. X4 ; RETURN TO LINK ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS STATUS FROM AN MQI ; ; THIS ROUTINE CHECK VALIDITY OF THE INPUT. ; IF THERE IS NO ECR OR IF THE CHANNEL IS NOT OPEN OR IF THE ; BIN IS EMPTY, THE INPUT BIN IS RELEASED (IF IT ISN'T THE DUMMY). ; WE SHOULD NEVER SEE THE DUMMY. ; THE ROUTINE UPDATES CSTVF1 VIA ED1450. ; THE ROUTINE WILL IGNORE A DUMMY BIN ON AN OPEN CHANNEL. ; A NEW BIN IS GIVEN TO THE MUX VIA MONITOR CALL XMIBUF. ; BIN STATUS IS UPDATED FROM THE MQI VIA ED1460. ; ; CALLED BY: ED1550 ; ; CALLS: ED1450, ED1460, ED1970, ED1200 ; ; ENTRIES: ED1510 ; ; RETURNS: LINK - NO BIN ; LINK+1 - DISCONNECTED BIN RELEASED ; LINK+2 - DISCONNECTED BIN IS READY TO PROCESS. ; ; REGISTERS ENTRY EXIT ; R0,R1,R2 - DESTROYED ; R3 - DESTROYED ; R4 LINK DESTROYED ; R5 - DESTROYED ; R6 LCN DESTROYED ; R7 - DESTROYED ;----------------------------------------------------------------------- ED1510: ; MOV R4 RL1510 ; JMP S4 ED1200 ; GET POINTERS TO CST, CDT AND ECR JMP ED1512 ; NO ECR - GO RELEASE BIN MOV CSTCS2.X7 R0 ; IBZ R0 CSTICO ; IF CHANNEL NOT OPEN - THEN JMP ED1512 ; GO RELEASE THE BIN JMP S4 ED1450 ; UPDATE CSTVF1 ; SETS R3 = BIN STATUS ON EXIT MOV CIBUF R5 ; GET BIN ADDRESS MOD GSTPTR ; MOV GSTDIB R4 ; GET DUMMY BIN ADDRESS INE R4 R5 ; IF BIN IS THE DUMMY OR IBZ R3 CDIBDS ; BIN NOT RELEASED BY MXP - THEN JMPI RL1510 ; TAKE "NO BIN" RETURN MON XMIBUF ; EXCHANGE MUX INPUT BINS JMP ED1514 &; NO FREE BIN TO GIVE MUX JMP ED1516 &; BIN SWITCHING ERROR JMP S4 ED1460 ; UPDATE BIN STATUS JMP ED1512 &; GO RELEASE EMPTY BIN MOV RL1510 R4 ; JMP 2. X4 ; BIN "READY" RETURN ED1512: ; MOV CIEST R3 ; GET MQI STATUS MOV CIBUF R5 ; GET BIN LOCATION MOD GSTPTR ; MOV GSTDIB R4 ; GET DUMMY BIN LOCATION INE R4 R5 ; IF BIN IS THE DUMMY OR IBZ R3 CDIBDS ; BIN NOT RELEASED BY MXP - THEN JMPI RL1510 ; TAKE "NO BIN" RETURN MOVC 1 R3 ; MOV R5 R6 ; MON RNBN ; RELEASE THE BIN MOV RL1510 R4 ; JMP 1. X4 ; TAKE "BIN RELEASED" RETURN ED1514: ; MOV CSTPTR R6 ; MOVC 1<CSTLAC R0 ; SET FLAG TO TELL MP THAT IOR R0 CSTVF1.X6 ; THERE ARE NO FREE BINS JMPI RL1510 ; TAKE "NO BIN" RETURN ED1516: ; JMP S4 ED1970 ;E REPORT BIN SWITCH ERROR JMPI RL1510 ; TAKE "NO BIN" RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS STATUS FROM AN MQO ; ; THIS ROUTINE CHECKS FOR A SECURITY OR BUFFER MISLINKAGE ERROR. ; IF EITHER ERROR IS FOUND AN ERROR BIT IS SET IN CSTVF1 AND THE ; ERROR IS REPORTED (ED19C0). ; ; CALLED BY: ED1560 ; ; CALLS: ED19C0, ED19D0 ; ; ENTRIES: ED1520 ; ; RETURNS: LINK - BLOCK INCOMPLETE ; LINK+1 - BLOCK COMPLETE ; ; REGISTERS ENTRY EXIT ; R0 - DESTROYED ; R1,R2,R5,R6 - UNCHANGED ; R3 - DESTROYED ; R4 LINK DESTROYED ; R7 - DESTROYED ;----------------------------------------------------------------------- ED1520: ; MOV R4 RL1520 ; MOV COEST R3 ; GET STATUS FROM MQO MOVC 1<CDOSER+1<CDOBML R0 ; CHK FOR SECURITY/MISLINK ERROR AND R3 R0 ; JON R0 ED1522 ; JUMP TO PROCESS ERROR IF FOUND MOVC 1<CDOEDS R0 ; AND R0 R3 ; INE R0 R3 ; IF BLOCK DISCONNECTED BY MXP JMP ED1524 ; THEN GO FLAG THE ERROR JMP 1. X4 ; "BLOCK COMPLETE" RETURN ED1522: ; MOV CSTPTR R7 ; MOVC 1<CSTMBE R0 ; IOR R0 CSTVF1.X7 ; SET ERROR IN CSTVF1 JMP S4 ED19C0 ;E REPORT THE ERROR ED1524: ; JMP S4 ED19D0 ;E REPORT BLK DISCONNECT ERROR JMPI RL1520 ; ;----------------------------------------------------------------------- ;FF\f ;---------------------------------------------------------------------- ; PROCESS AN MQE ; ; FOR AN INPUT OR OUTPUT MQE FOR WHICH THERE HAS BEEN AN INTERRUPT, ; ONLY AN LTU TIMEOUT CHECK IS MADE. FOR AN OUTPUT MQE WITH AN ; INTERRUPT, TRANSMISSION STATUS IS UPDATED BEFORE THE LTU TIMEOUT ; CHECK IS MADE. ; ; CALLED BY: ED2090 ; ; CALLS: ED1200 ; ; ENTRIES: ED1540 ; ; RETURNS: LINK ; ; REGISTERS: ENTRY EXIT ; R0,R2,R3,R5 - UNCHANGED ; R1,R4,R6,R7 - DESTROYED ;---------------------------------------------------------------------- ED1540: ; MOV R4 RL1540 ; MOV CEEST R1 ; GET STATUS FROM MQE IBN R1 MQETYP ; IF AN INPUT MQE OR IBZ R1 MQEONT ; NO OUTPUT INTERRUPT - THEN JMP ED1544 ; GO CHECK LTU TIMEOUT MOV CEFLG R6 ; GET FLAG BITS FROM MQE SWP R6 ; XTR R6 MQELAX ; UNPACK LCN JMP S4 ED1200 ; GET CST, CDT, ECR POINTERS NOP ; ADDC ECOFLG R6 ; OUTPUT FLAG LOCATION IN ECR IBNP R1 MQEDIS ; IF OUTPUT DISABLED - THEN SETS X6 ECOTXO ; SET XMIT STATUS OFF JMP LOC+2 ; RELS X6 ECOTXO ; SET XMIT STATUS ON ED1544: ; MOV CSTPTR R6 ; IBN R1 MQELTO ; IF LTU TIMEOUT MON LTUTMO ; THEN PROCESS IT JMPI RL1540 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS AN MQI ; ; PROCESSES MQI STATUS VIA ED1510. IF A BIN DOESN'T EXIST, NO FURTHER ; WORK IS DONE. IF A BIN EXISTS IT IS QUEUED TO THE ECR'S INPUT QUEUE. ; IF A TERMINATION ERROR IS FOUND (IN ED1510) IT IS PROCESSED BY ED5700. ; IF AN END OF EDC BLOCK IS FOUND THEN THE TYPE AND BID ARE ; STORED LOCALLY. ; ; CALLED BY: ED2100 ; ; CALLS: ED1510, ED5700 ; ; ENTRIES: ED1550 ; ; RETURNS: LINK - EDC BLOCK INCOMPLETE ; LINK+1 - EDC BLOCK COMPLETE (END OF BLOCK FOUND) ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3 - DESTROYED ; R4 LINK DESTROYED ; R5,R6,R7 - DESTROYED ;----------------------------------------------------------------------- ED1550: ; MOV R4 RL1550 ; MOV CIFLG R6 ; GET FLAGS FROM MQI SWP R6 ; XTR R6 MQILAX ; UNPACK LCN JMP S4 ED1510 ; PROCESS MQI STATUS JMPI RL1550 &; NO BIN - "INCOMPLETE" RETURN JMP ED1551 &; BIN RELEASED - SKIP QUEUEING MOVC 1 R3 ; MOD ECRPTA ; MOVC ECCIQH R4 ; ADD THE INPUT BIN TO MOV CIBUF R5 ; THE INPUT BIN QUEUE WHICH MOV R5 R6 ; COLLECTS BINS INTO MON LNIQ ; EDC BLOCKS ED1551: ; MOV CIEST R0 ; IBN R0 CDITME ; IF A TERM. ERROR WAS FOUND THEN JMP ED1554 ; GO PROCESS IT IBZ R0 CDIBEB ; IF NOT END OF EDC BLOCK - THEN JMPI RL1550 ; TAKE "BLOCK INCOMPLETE" RETURN MOV CITAB R0 ; GET TYPE AND BID OF BLOCK MOV R0 R1 ; SWP R0 ; XTR R0 8 ; XTR R1 8 ; TYPE AND BID UNPACKED MOV R0 CITYPE ; SAVE TYPE LOCALLY MOV R1 CIBID ; SAVE BID LOCALLY MOV RL1550 R4 ; JMP 1. X4 ; TAKE "BLOCK COMPLETE" RETURN ED1554: ; JMPI S4 EI5700 ; GO PROCESS TERMINATION ERROR JMPI RL1550 ; TAKE "BLOCK INCOMPLETE" RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS AN MQO ; ; THIS SUBROUTINE IS CALLED TO PROCESS MQO'S. IT IS USED MAINLY ; AS AN ENTRY TO THE STATUS PROCESSING ROUTINE (ED1520). ; ; CALLED BY: ED2200 ; ; CALLS: ED1200, ED1520, ED1980 ; ; ENTRIES: ED1560 ; ; RETURNS: LINK - NO ECR OR BLOCK DISCONNECTED BY MXP ; LINK+1 - DONE ; ; REGISTERS ENTRY EXIT ; R0,R3,R7 - DESTROYED ; R1,R2,R5 - UNCHANGED ; R4 LINK DESTROYED ; R6 - ECRP (REL) ;----------------------------------------------------------------------- ED1560: ; MOV R4 RL1560 ; MOV COFLG R6 ; GET FLAGS FROM MQO SWP R6 ; XTR R6 MQOLAX ; UNPACK LCN JMP S4 ED1200 ; GET CST, CDT, ECR POINTERS JMP ED1562 ; NO ECR - GO REPORT ERROR JMP S4 ED1520 ; PROCESS MQO STATUS JMPI RL1560 &; TAKE "BLOCK DISCONNECTED" RETURN MOV RL1560 R4 ; JMP 1. X4 ; TAKE "DONE" RETURN ED1562: ; JMP S4 ED1980 ;E REPORT "NO ECR" ERROR JMPI RL1560 ; ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ACTIVATE A TRANSMISSION QUEUE ; ; THE ENTRY CHOSEN DETERMINES THE QUEUE TO BE ACTIVATED. ; ; CALLED BY: ED4100, ED4200, ED4910, ED4920, ED4930, ED4950, ED5400 ; ED7060, ED7070, ED7080 ; ; CALLS: NONE ; ; ENTRIES: ED1600 - DATA QUEUE ; ED1601 - ACK QUEUE ; ED1602 - NAK QUEUE ; ED1603 - ACKL QUEUE ; ED1604 - LCB QUEUE ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0 - DESTROYED ; R1,R2,R3,R5,R7 - UNCHANGED ; R4 LINK LINK ; R6 ECRP (REL) ECRP (REL) ;----------------------------------------------------------------------- ED1600: MODC 1<ECODTP-1<ECOAKP ; ED1601: MODC 1<ECOAKP-1<ECONKP ; ED1602: MODC 1<ECONKP-1<ECOALP ; ED1603: MODC 1<ECOALP-1<ECOLCP ; ED1604: MOVC 1<ECOLCP R0 ; IOR R0 ECOQCW.X6 ; SET REQUIRED BIT IN THE ; OUTPUT QUEUE CONTROL WORD IBZ R0 ECODTP ; IBN R0 ECOLCP ; FOR DATA OR LCB ALSO SET ECOOEP MODC 1<ECOOEP ; SET OUTPUT FLAGS TO TRIGGER MOVC 1<ECOEBP+1<ECOPCQ R0 ; PROPER PROCESSING IOR R0 ECOFLG.X6 ; JMP 0. X4 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS AN EDC MQO ; ; THIS ROUTINE DOES FINAL PROCESSING OF AN EDC BLOCK FOR WHICH AN MQO ; HAS BEEN RECEIVED. ; ; CALLED BY: ED2200, ED3340 ; ; CALLS: ED7110, ED7120, ED7130, ED7140, ED7150, ED7160, ED7170, ED7190 ; THE ABOVE ARE ALL CALLED VIA A TABLE (ED0500) IN EDC. ; ; ENTRIES: ED1650 ; ; RETURNS: LINK ; ; REGISTERS: ENTRY EXIT ; R0,R1,R2,R5,R7 - DESTROYED ; R3 EBR(MQO) DESTROYED ; R4 LINK DESTROYED ; R6 ECRP (REL) DESTROYED ;----------------------------------------------------------------------- ED1650: ; MOV R4 RL1650 ; IOZ ECOOSW.X6 ; MOVL ECOTQI0.X6 R01 ; GET PROPER XMIT QUEUE DATA ION ECOOSW.X6 ; MOVL ECOTQI1.X6 R01 ; INV ECOOSW.X6 ; SWITCH TRANSMIT QUEUES DEC ECOTEC.X6 ; REDUCE EDC BLOCK XMIT COUNT MOVC 1<ECOPCQ R2 ; IOR R2 ECOFLG.X6 ; SET "PROCESSING REQ'D" FLAG MOD R0 ; USE XMIT QUEUE I.D. TO GET TO JMPI S4 ED0500 ; PROCESSING PGM (VIA ED0500) JMPI RL1650 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; REPORT ERRORS VIA CSTVF4 ; ; CALLED BY: ED2100, ED4400, ED7086 THRU ED7098, ED7380 ; ; CALLS: NONE ; ; ENTRIES: ED1800 ; ; RETURNS: LINK - UNRECOVERABLE ERROR ; LINK+1 - RECOVERABLE ERROR ; ; REGISTERS ENTRY EXIT ; R0 ERROR CODE ERROR CODE (SHIFTED) ; R1,R2,R3,R5 - UNCHANGED ; R4 LINK LINK ; R6 - DESTROYED ; R7 - CSTP (REL) ;----------------------------------------------------------------------- ED1800: ; MOV CSTPTR R7 ; GET RELATIVE CST POINTER SLL R0 EECECX ; POSITION ERROR CODE ADDC CSTVF4 R7 ; MOD8 #FF ; TO STORE ERROR CODE PUT R0 X7 ; MOV CSTPTR R7 ; SET R7 FOR EXIT ; IBZ R0 EECURE ; IF ERROR IS RECOVERABLE - THEN JMP 1. X4 ; TAKE "RECOVERABLE" RETURN MOV ECRPTR R6 ; ED1804: ; MOVC 1<ECOSCQ+1<ECOATO+% ; SET "SETBD REQ'D" PLUS BOTH 1<ECOALTO R0 ; "TIME-OUTS OCCURRED" IN IOR R0 ECOFLG.X6 ; THE OUTPUT FLAG JMP 0. X4 ; TAKE "UNRECOVERABLE" RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; GROSS ERROR HANDLING ; ; THIS ROUTINE IS ENTERRED FOR ERRORS WHICH QUESTION THE INTEGRITY ; OF THE SOFTWARE. THE ERROR REPORTED DEPENDS ON THE PARTICULAR ; ENTRY POINT. ALL ERRORS ARE REPORTED VIA MON ERR. CURRENT DESIGN ; OF MON ERR DOES NOT INCLUDE A RETURN TO THE CALLER. IT IS A SYSTEM ; HALT. THEREFORE THIS ROUTINE DOES NOT RETURN DESPITE THE CODING. ; ; CALLED BY: NUMEROUS ROUTINES AND SUBROUTINES ; ; CALLS: NONE ; ; ENTRIES: SHOWN BELOW IN CODE ; ; RETURNS: NONE ; ; REGISTERS: SINCE THIS ROUTINE HAS NO ENTRY PARAMETERS AND DOES NOT ; RETURN, REGISTER CONTENTS ARE UNIMPORTANT. ;----------------------------------------------------------------------- ED1900: MODC GSTCPF - GSTCPE ; ERROR0 (GENERAL CP ERROR) ED1910: MODC GSTCPE - GSTLME ; ERROR1 (CREATE PROCESS): ED1920: MODC GSTLME - GSTUXS ; ERROR2 (LETTER MECHANISM): ED1930: MODC GSTUXS - GSTLTE ; ERROR3 (UNEXPECTED SENDER): ED1940: MODC GSTLTE - GSTNLT ; ERROR4 (LETTER TYPE ERROR): ED1950: MODC GSTNLT - GSTNBF ; ERROR5 (NO LETTER): ED1960: MODC GSTNBF - GSTNNE ; ERROR6 (NO BUFFER): ED1970: MODC GSTNNE - GSTNEC ; ERROR7 (NO NEXT BUFFER): ED1980: MODC GSTNEC - GSTCPF ; ERROR8 (NO ECR FOUND): ED1990: MODC GSTCPF - GSTCRF ; ERROR9 (GENERAL CP FAULT): ED19A0: MODC GSTCRF - GSTFLE ; ERRORA (CDT RESERVATION FAULT): ED19B0: MODC GSTFLE - GSTOSE ; ERRORB (FIFO LPN ERROR): ED19C0: MODC GSTOSE - GSTMDE ; ERRORC (MUX OUTPUT SECURITY): ED19D0: MODC GSTMDE - GSTEBM ; ERRORD (MUX BUF DISC ERROR): ED19E0: MODC GSTEBM - GSTUTQ ; ERRORE (EB-BIN MISMATCH): ED19F0: MODC GSTUTQ - GSTMOF ; ERRORF (UNDEFINED TX QUEUE): ED19F1: MOVC GSTMOF R0 ; ERRORF1(MMQ OVERFLOW): MOV R0 XLICC ; XLICC:=CAUSE MOV R4 XLIRP ; XLIRP:=RETURN MON ERR ;E CALL ONLINE ERROR PROCESSING JMP 0. X4 ; NOT EXECUTED ;---------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ; INTERRUPT DRIVEN MAIN PROGRAM INITIALIZATION ; ;----------------------------------------------------------------------- ED2000: ; JMP S4 ED1000 ; INITIALIZE INTERRUPT PROCESS MOVC EDILPN R3 ; MOV XBASE R4 ; GET BASE OF INTERRUPT PROCESS MON CRP ; CREATE INTERRUPT PROCESS JMP S4 ED1910 &;E CREATION ERROR - REPORT MON RCPU ; RESERVE_CPU_INTERRUPT MON RTI ; RETURN TO INITIATOR (DBA) ;----------------------------------------------------------------------- ; THE FIRST INTERRUPT WILL START ; THE PROGRAM HERE. ;----------------------------------- MOVC PBEXPR R0 ; MON INQ ; LINK PROCESS INTO EXPRESS QUEUE JMPI S4 EI1990 ;E REPORT QUEUE LINKAGE ERROR ;----------------------------------------------------------------------- ; ; START INTERRUPT_SERVICE HERE. ; ; THIS IS THE MAIN LINE OF CODE USED BY THE INTERRUPT PROCESS. ALL ; INTERRUPT RELATED ACTIVITIES ARE CONTROLLED FROM HERE. ; ;----------------------------------------------------------------------- ED2050: ; MOVC PCIDLE R0 ; MOV R0 INTSTA ; SET "IDLE" FLAG TO "IDLE" ; IF ANY WORK IS DONE THIS FLAG ; WILL BE CLEARED. WHEN THE PROC- ; CESSING LOOP IS COMPLETE THE ; FLAG IS TESTED. IF IT'S ZERO ; THE CYCLE WILL BE RESTARTED ; HERE. THIS CAUSES THE PROCESS ; TO RUN TILL THERE IS ABSOLUTELY ; NO MORE WORK TO DO. ;---------------------------------------------------------------------- ; ; BEGIN MQE SERVICE ; ; ALL AVAILABLE MQE'S ARE SCANNED FOR SERVICE UNTIL THEY ARE EXHAUSTED. ; ONLY THEN ARE MQI'S (ED2100) ADDRESSED. ; ;----------------------------------------------------------------------- ED2090: ; JMP S4 ED1390 ; GET AN MQE JMP ED2090 ; X0: NON_EDC_MQE JMP S4 ED1540 & ; X1: EDC_MQE JMP ED2100 ; X2: END MQE_SERVICE ;----------------------------------------------------------------------- ; ; BEGIN MQI SERVICE ; ; ALL AVAILABLE MQI'S ARE SCANNED FOR SERVICE UNTIL THEY ARE EXHAUSTED. ; ONLY THEN ARE MQO'S (ED2200) ADDRESSED. ; ;----------------------------------------------------------------------- ED2100: ; JMP S4 ED1400 ; GET AN MQI JMP ED2190 &; X0: NO MQI'S JMP ED2100 &; X1: GOTO_REPEAT (NON-EDC MQI) ; X2: EDC MQI FOUND JMP S4 ED1550 ; INITIAL MQI PROCESSING JMP ED2100 &; X0: REPEAT BLOCK INCOMPLETE ; X1: EDC BLOCK COMPLETE ;----------------------------------------------------------------------- ; WHEN WE GET HERE A COMPLETE EDC ; BLOCK HAS BEEN RECEIVED ;----------------------------------- MOV ECRPTR R6 ; THIS CODE PREPARES FOR ENTRY TO MOV ECCIQH.X6 R1 ; MON EDITST. EDITST IS THE MOV CIEST R3 ; HOOK USED BY THE TEST DRIVE MOV CIBID R4 ; SYSTEM TO ALTER EDC INPUTS. MOV CITYPE R5 ; THE DATA IN REGISTERS ARE MOV CSTPTR R6 ; PROVIDED TO THE TDS FOR POSSIBLE MON EDITST ;TC MODIFICATION. JMP ED2150 &; TDS SAYS DISCARD THE BLOCK MOV R3 CIEST ; RESTORE DATA POSSIBLY MOV R4 CIBID ; MODIFIED BY THE TDS. MOV R5 CITYPE ; MOV CSTCS7.X6 R0 ; IBNP R0 CSTEMM ; IF EDC MONITORING IS ON - THEN MON EDCTMI ;TM TAKE CARE OF INPUT MONITORING JMPI S4 EI1960 &;E REPORT MONITORING ERROR MOV CITYPE R0 ; GET BLOCK TYPE IBN R0 BIT7 ; IF TYPE PARITY ERROR - THEN JMP ED2130 ; REPORT PARITY ERROR ADDC -<:A:> R0 ; IHS R0 <:K:>-<:A:>+1 ; IF TYPE IS UNDEFINED - THEN JMP ED2140 ; REPORT RANGE ERROR MOV ECRPTR R6 ; MOD R0 ; USE TYPE TO INDEX PROPER JMPI S4 ED0300 ; PROCESSING ROUTINE JMP S4 ED1210 ;I OPEN INTERRUPT WINDOW JMP ED2100 ; GET NEXT MQI ;----------------------------------- ; PARITY AND RANGE ERRORS ARE ; REPORTED AND THE BLOCK IS ; DISCARDED. ;----------------------------------- ED2130: ; MODC EEC030-EEC031 ; TYPE PARITY ERROR ED2140: ; MOVC EEC031 R0 ; TYPE RANGE ERROR JMP S4 ED1800 ;E REPORT THE ERROR NOP ; ED2150: ; READY TO RELEASE THE EDC BLOCK MOVC 1000 R3 ; MOD ECRPTA ; MOVC ECCIQH R4 ; MON LNOQ ; DEQUEUE BLOCK FROM INPUT BIN QUE NOP ; MON RNBN ; RELEASE BLOCK TO FREE BIN POOL JMP ED2100 ; GET NEXT MQI ED2190: ; END MQI_SERVICE. ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ; BEGIN MQO SERVICE ; ; ALL AVAILABLE MQO'S ARE SCANNED FOR SERVICE UNTIL THEY ARE EXHAUSTED. ; ONLY THEN ARE PROCESSING REQUESTS (ED2500) ADDRESSED. ; ;----------------------------------------------------------------------- ED2200: ; JMP S4 ED1410 ; GET AN MQO JMP ED2290 &; X0: GOTO END_MQO_SERVICE JMP ED2200 &; X1: GOTO REPEAT (NON-EDC MQO) ; X2: EDC MQO FOUND JMP S4 ED1560 ; MQO STATUS PROCESSING JMP ED2200 &; X0: MQO N.G. - GET NEXT ONE ; X1: STATUS OK MOV ECRPTR R6 ; GET ECR POINTER MOV COBUF R3 ; GET EDC BLOCK POINTER JMP S4 ED1650 ; FINAL MQO PROCESSING JMP S4 ED1210 ;I OPEN INTERRUPT WINDOW JMP ED2200 ; GET NEXT MQO ED2290: ; ;----------------------------------------------------------------------- ; ; PROCESS REQUEST HANDLING ; ; IN ORDER TO REDUCE THE TIME REQUIRED TO CYCLE THE MQO TABLE, SOME ; PROCESSING IS PUT OFF UNTIL NOW. EACH ECR IS CHECKED TO SEE IF ; ADDITIONAL PROCESSING WAS REQUESTED WHEN THE MQO'S WERE BEING CHECKED. ; ;----------------------------------------------------------------------- ED2500: ; MOV ECFPTR R5 ; MOV ECGUQH+QCFQE.X5 R6 ; GET ADDRESS OF 1ST USED ECR MOV ECGUQH+QCCQE.X5 R0 ; GET NUMBER OF USED ECR'S IEQ R0 0 ; IF NO USED ECR'S - THEN JMP ED2590 ; THERE IS NO WORK TO DO ED2502: ; MOV R0 LOOPCT ; SAVE LOOP COUNT SUB XBASE R6 ; RELATIVIZE ECR ADDRESS MOV ECOFLG.X6 R0 ; GET THE ECR'S OUTPUT FLAGS IBZ R0 ECOPCQ ; IF NO PROCESSING NEEDED - THEN JMP ED2504 ; GO GET NEXT ECR MOVC NT(1<ECOPCQ) R0 ; AND R0 ECOFLG.X6 ; CLEAR "PROCESSING REQ'D" FLAG MOV ECCLCN.X6 R6 ; GET ECR'S LCN JMP S4 ED1200 ; GET CST, CDT POINTERS JMPI S4 EI1980 ; POINTER MISSING - REPORT ERROR JMPI S4 EI7290 ; DO REQUIRED PROCESSING JMP S4 ED1210 ;I OPEN INTERRUPT WINDOW JMP ED2500 ; RESTART PROCESSING LOOP. THIS ; MAKES SURE THAT ALL PROCESSING ; IS DONE WHEN THE ROUTINE EXITS. ;---------------------------------- ED2504: ; MOV ECCFLK.X6 R6 ; GET NEXT ECR IN THE CHAIN MOV LOOPCT R0 ; SOB R0 ED2502 ; DECREMENT LOOP CTR AND CONTINUE ; WHILE PROCESSING REQUIRED. ED2590: ; MOV INTSTA R0 ; INE R0 PCIDLE ; IF ANY WORK WAS DONE - THEN JMP ED2050 ; GO CHECK ONE MORE TIME ;----------------------------------------------------------------------- ; ; RESERVE CPU INTERRUPT ; ; AT THE COMPLETION OF THE PROCESSING CYCLE THE CPU INTERRUPT IS ; RESERVED TO ENABLE THE NEXT CYCLE. EDC RETURNS FROM INTERRUPT AND ; WAITS FOR THE NEXT CPU INTERRUPT TO START A NEW CYCLE. ; ;----------------------------------------------------------------------- ED2900: ; LDM 2#111 ; DISABLE_INTERRUPTS MON RCPU ; RESERVE_CPU_INTERRUPT MON RFI ; RETURN_FROM_INTERRUPT JMPI S4 EI1990 ;E REPORT INVALID PROCESS I.D. ERR JMP ED2050 ; NEW INTERRUPT STARTS HERE ;----------------------------------------------------------------------- ; ; LOCAL INTERRUPT SERVICE. ; ;----------------------------------------------------------------------- ED2990: ; MOV XLIRP R4 ; MON ERR &;E CALL ONLINE ERROR PROCESSING ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ; THIS IS THE MAIN LINE CODE USED BY THE LETTER DRIVEN PROCESS. ALL ; LETTER RELATED PROCESSING IS CONTROLLED FROM HERE. ; ;----------------------------------------------------------------------- ; ; LETTER DRIVEN MAIN PROGRAM INITIALIZATION ; ;----------------------------------------------------------------------- ED3000: ; JMP S4 ED1100 ; INIT. LETTER PROCESS BASE AREA MOVC EDLLPN R3 ; PROCESS NO. FOR EDL MOV XBASE R4 ; GET ABS. BASE OF EDL MON CRP ; CREATE EDL PROCESS JMP S4 ED1910 &;E REPORT CREATION ERROR MON RTI ; RETURN FROM INITIALIZATION ;----------------------------------------------------------------------- ; ; WAIT FOR A LETTER HERE ; ;----------------------------------------------------------------------- ED3100: ; MON WL ; WAIT HERE MOV R5 LETPTA ; SAVE ABS. ADDRESS OF LETTER MOV R7 LETPTR ; SAVE REL. ADDRESS OF LETTER MOV LTRCV. X7 R0 ; GET LETTER SENDER - MONITOR PUTS ; SENDER IN RECEIVER POSITION MOV LETPTR R7 ; IEQP R0 RTCLPN ; IF SENDER = REAL TIME CLOCK JMP S4 ED3200 ; THEN PROCESS RTC LETTER JMP ED3110 ; IEQP R0 CMILPN ; IF SENDER IS CMI - THEN JMP S4 ED3300 ; PROCESS CMI LETTER JMP ED3110 ; IEQP R0 TQMLPN ; IF SENDER = TIME QUEUE MONITOR JMPI S4 EI3500 ; PROCESS TQM LETTER JMP ED3110 ; IEQP R0 ODPLPN ; IF SENDER IS ODP - THEN JMPI S4 EI3600 ; PROCESS ODP LETTER JMP ED3110 ; JMP S4 ED1930 ; REPORT UNEXPECTED SENDER ED3110: ; RETURN FROM LETTER PROCESSOR JMP ED3100 ; GO WAIT FOR NEXT LETTER ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS_RTC_LETTER ; ; THIS ROUTINE PROCESSES LETTERS FROM THE REAL TIME CLOCK EVERY 100 MS. ; IT CONTROLLS THE THROTTLING STATE AND MAKES SURE THAT THE INTERRUPT ; PROCESS (EDI) IS ACTIVATED AT LEAST EVERY 100 MS. ; ; CALLED BY: ED3100 ; ; CALLS: ED4300, ED1920, ED1940 ; ; ENTRIES: ED3200 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3,R5,R6 - DESTROYED ; R4 LINK DESTROYED ; R7 LETP (REL) DESTROYED ;----------------------------------------------------------------------- ED3200: ; MOV R4 RL3200 ; MOV LTMS1. X7 R4 ; GET MESSAGE TYPE INE R4 LTMST1 ; IF MESSAGE TYPE NOT 1 - THEN JMP ED3208 ; IT'S AN ERROR MON GSST ; GET NO. OF VACANT SECTORS IN R0 MOV ECFPTR R4 ; GET POINTERS TO ECF AND GST MOV XGSTPR R5 ; MOV ECGFLG.X4 R1 ; GET GLOBAL ECF FLAGS IBN R1 ECGTHR ; IF THROTTLING IS ON - THEN JMP ED3202 ; GO CHECK ITS STATUS ;---------------------------------- ; THROTTLING IS NOT ON ;---------------------------------- MOV GSTTL1.X5 R2 ; GET LOWER THROTTLING LIMIT SLT R0 R2 ; IF NO. VACANT SECTORS > LIMIT JMP ED3204 ; THEN ALL OK - SEND LETTER TO RTC SETS R1 ECGTHR ; SET THROTTLING FLAG ON MOVC CCBCT2 R2 ; GET 10 SEC. BUFFER CONN. TIME MOVC TRUE R3 ; FOR GST THROTTLING FLAG JMP ED3203 ; ;----------------------------------- ; THROTTLING IS ON ;----------------------------------- ED3202: ; MOV GSTTL2.X5 R2 ; GET UPPER THROTTLING LIMIT ILT R0 R2 ; IF NO. VACANT SECTORS < LIMIT JMP ED3204 ; THEN LEAVE THROTTLING ALONE MOVC ECGTHR R2 ; CLRS R1 R2 ; CLEAR ECF THROTTLING FLAG MOVC CCBCT1 R2 ; GET .8 SEC. CONNECT TIME MOVC FALSE R3 ; FOR GST THROTTLING FLAG ED3203: ; MOV R1 ECGFLG.X4 ; STORE ECF THROTTLING FLAG MOV R3 GSTTHR.X5 ; STORE GST THROTTLING FLAG MOD GSTPCF.X5 ; MODN XBASE ; MOV R2 PCPBCT ; SET CONNECT TIME FOR MXP JMPI S4 EI4300 ; PROCESS_MP_ACK ED3204: ; MOV LETPTA R5 ; MOVC EOCRTE R0 ; GET 100 MS TIME TILL NEXT LETTER MODN XBASE ; MOV R0 LTMS4. X5 ; PUT 100 MS TIME IN RTC LETTER MON SLET ; SEND LETTER TO RTC JMP S4 ED1920 &;E REPORT LETTER HANDLING ERROR CPU ; *** TRIGGER EDI PROCESS *** JMPI RL3200 ; RETURN ED3208: ; JMP S4 ED1940 ;E REPORT MESSAGE TYPE ERROR JMPI RL3200 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS_CMI_LETTER ; ; THIS ROUTINE PROCESSES LETTERS FROM CMI WHICH RELATE TO COMMANDS ; RECEIVED FROM THE MP. ; ; CALLED BY: ED3100 ; ; CALLS: ED3310, ED3320, ED3330, ED3340, ED3350, ED3360, ED3370, ; ED3380, ED4300, ED1920, ED3430, ED3410, ED1201, ED6420 ; ; ENTRIES: ED3300 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3,R5,R6 - DESTROYED ; R4 LINK DESTROYED ; R7 LETP DESTROYED ;----------------------------------------------------------------------- ED3300: ; MOV R4 RL3300 ; MOVL LTMS1. X7 R01 ; GET MESS. TYPE AND SUB-COM. LOC. MOV R1 R5 ; INE R0 LTMST1 ; IF MESSAGE TYPE NOT 1 - THEN JMP ED3306 ; GO CHECK FOR 2 SUB XBASE R5 ; RELATIVIZE SUB-COMMAND LOC. MOVL OCSCTS.X5 R01 ; R0 = SC TYPE, R1 = PAD/LAD XTR R0 OCSCTX ; MOV R0 CSCTYP ; UNPACK AND STORE TYPE MOV R1 CSCPLA ; STORE PAD AND LAD SWP R1 ; XTR R1 CSTLAX ; UNPACK LAD (LCN) MON GETCST ; GET CST LOC. FOR THE LCN JMPI S4 EI3430 &;V REPORT ERROR FINDING CST MOV R4 CSTPTA ; SAVE CST LOC. MOV R6 CSTPTR ; MOV CSCTYP R0 ; GET SUBCOMMAND TYPE IEQP R0 OCS5 ; IF TYPE IS 5 - THEN JMP S4 ED3350 ; GO DO CHANNEL SETUP JMP ED3303 ; AND RETURN LETTER TO CMI MOV CSTCS6.X6 R0 ; MOVC 1<CSTTST+% ; UNPACK TEST, SYNCH AND EDC FLAGS 1<CSTSYN+1<CSTEDC R3 ; AND R0 R3 ; INE R3 1<CSTSYN+1<CSTEDC ; IF LCN IN TEST OR NOT SYNCH EDC JMPI S4 EI3410 ;V THEN REPORT A VIOLATION MOV R6 R7 ; JMP S4 ED1201 ; GET CDT AND ECR POINTERS JMPI S4 EI3410 ;E NO POINTERS - REPORT VIOLATION MOV CSCTYP R0 ; INEP R0 OCS1 ; IF SC TYPE = 1 OR 2 - THEN INE R0 OCS2 ; JMP ED3301 ; JMP S4 ED3310 ; OPEN INPUT AND JMP S4 ED3320 ; OPEN OUTPUT JMP ED3303 ; GO RETURN LETTER TO CMI ED3301: ; INEP R0 OCS3 ; IF SC TYPE = 3 OR 4 - THEN INE R0 OCS4 ; JMP ED3302 ; JMP S4 ED3330 ; CLOSE INPUT AND JMP S4 ED3340 ; CLOSE OUTPUT JMPI S4 EI6420 ; DEACTIVATE ACK TIME OUT JMPI S4 EI6440 ; DEACTIVATE ACKL TIME OUT JMP ED3303 ; RETURN LETTER TO CMI ED3302: ; IEQP R0 OCS12 ; IF SC TYPE = 12 - THEN JMP S4 ED3360 ; GENERATE A SETBD JMP ED3303 ; AND RETURN LETTER TO CMI INE R0 OCS13 ; TEST FOR START /STOP OF IEQP R0 OCS14 ; NORMAL MONITORING JMP S4 ED3370 ; GO PROCESS NORMAL MONITORING JMP ED3303 ; AND RETURN CMI LETTER INE R0 OCS15 ; TEST FOR START/STOP OF IEQP R0 OCS16 ; EDC MONITORING JMP S4 ED3380 ; GO PROCESS EDC MONITORING JMP ED3303 ; AND RETURN CMI LETTER JMPI S4 EI3410 ; BAD SC TYPE - REPORT VIOLATION ED3303: ; MOVC 0 R0 ; SET COMMAND COMPLETE CODE ;----------------------------------- ; THIS ROUTINE IS ; ENTERED FROM ED3400 ALSO ;----------------------------------- ED3304: ; MOV LETPTA R5 ; MODN XBASE ; MOV R0 LTMS4. X5 ; STORE COMPLETION CODE IN LETTER MON SLET ; SEND LETTER BACK TO CMI JMPI S4 EI1920 &;E REPORT LETTER HANDLING ERROR JMPI RL3300 ; RETURN ;----------------------------------------------------------------------- ED3306: ; INE R0 LTMST2 ; IF MSG TYPE NOT = 2 - THEN JMP ED3308 ; GO REPORT THE ERROR MOV LETPTR R7 ; CLR LTMS4. X7 ; JMPI S4 EI4300 ; PROCESS MP ACKS JMPI RL3300 ; ED3308: ; JMP S4 ED1940 ;E REPORT BAD LETTER TYPE JMPI RL3300 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; SUB-COMMAND_HANDLING_PROCEDURES. ; ; CALLED BY: ED3300 ; ; CALLS: ED1240, ED1250, ED1260, ED1210, ED1650, ED3410 ; ; ENTRIES: ED3310 - OPEN INPUT ; ED3320 - OPEN OUTPUT ; ED3330 - CLOSE INPUT ; ED3340 - CLOSE OUTPUT ; ED3350 - SET UP CHANNEL ; ED3360 - SETBD HANDLING ; ED3370 - START/STOP NORMAL MONITORING ; ED3380 - START/STOP EDC MONITORING ; ; RETURNS: LINK - COMPLETE ; ED3410 - VIOLATION DETECTED ; ; REGISTERS ENTRY EXIT ; R0 SC_TYPE SC_TYPE ; R1,R2,R3,R5,R6,R7 - DESTROYED ; R4 LINK DESTROYED ;----------------------------------------------------------------------- ; ED3310: ; BEGIN OPEN_INPUT ;---------------------------------- MOV R4 RL3310 ; MOV CSTPTR R6 ; MOV CSTCS2.X6 R0 ; IBZ R0 CSTCSU ; IF CHANNEL NOT SET UP - THEN JMP S4 ED3410 ;V REPORT VIOLATION IBN R0 CSTICO ; IF CHANNEL ALREADY OPEN - THEN JMP 0. X4 ; EXIT - DONE MON OEICDT ; OPEN_EDC_INPUT_CDT JMP S4 ED3410 ;V CDT OPENING ERROR - VIOLATION MOV CSTPTR R6 ; MON PIPCST ; PRESET_IDP_CST_PARAMETERS MOVC 1<CSTICO R0 ; IOR R0 CSTCS2.X6 ; SET "INPUT CHANNEL OPEN" FLAG MON BEQCST ; PUT CHANNEL IN BAUD RATE QUEUE JMPI RL3310 ; ;----------------------------------------------------------------------- ED3320: ; BEGIN OPEN_OUTPUT ;---------------------------------- MOV R4 RL3310 ; MOV CSTPTR R6 ; MOV CSTCS2.X6 R0 ; IBZ R0 CSTCSU ; IF CHANNEL NOT SET UP - THEN JMP S4 ED3410 ;V REPORT A VIOLATION IBN R0 CSTOCO ; IF CHANNEL ALREADY OPEN - THEN JMP 0. X4 ; EXIT - DONE MON OEOCDT ; OPEN_EDC_OUTPUT_CDT(CDTP) JMP S4 ED3410 &;V CDT OPEN ERROR - VIOLATION MOV CSTPTR R6 ; MOVC 1<CSTOCO R0 ; IOR R0 CSTCS2.X6 ; SET OUTPUT CHANNEL OPEN MOV ECRPTR R6 ; MOVC 1<ECOSCQ+1<ECOALTO+% ; SET "SETBD REQ'D", "ACK TIMEOUT" 1<ECOATO R0 ; "ACKL TIMEOUT" MOV R0 ECOFLG.X6 ; IN ECR'S OUTPUT FLAG CPU ; ***TRIGGER INTERRUPT PROCESS*** JMPI RL3310 ; RETURN ;----------------------------------------------------------------------- ED3330: ; BEGIN CLOSE_INPUT ;---------------------------------- MOV R4 RL3310 ; MOV CSTPTR R6 ; MOV CSTCS2.X6 R0 ; IBZ R0 CSTICO ; IF CHANNEL ALREADY CLOSED - THEN JMP 0. X4 ; EXIT - DONE MOVC NT 1<CSTICO R0 ; AND R0 CSTCS2.X6 ; SET CHANNEL CLOSED FOR INPUT MON CGICDT ; CLOSE_GENERAL_INPUT_CDT NOP ; MOV CSTPTR R6 ; MON BDQCST ; REMOVE CST FROM BAUD RATE QUEUE MOV ECRPTR R6 ; JMP S4 ED1250 ; RELEASE_ECC_INPUT_DATA. ; JMPI S4 EI5600 ; RELEASE_ECI_DATA. ; JMPI RL3310 ; RETURN ;----------------------------------------------------------------------- ED3340: ; BEGIN CLOSE_OUTPUT ;---------------------------------- MOV R4 RL3310 ; MOV CSTPTR R6 ; MOV CSTCS2.X6 R0 ; IBZ R0 CSTOCO ; IF CHANNEL ALREADY CLOSED - THEN JMP 0. X4 ; EXIT - DONE MOVC NT 1<CSTOCO R0 ; AND R0 CSTCS2.X6 ; SET OUTPUT CHANNEL CLOSED MOV ECRPTR R6 ; JMP S4 ED1260 ; RELEASE_OUTPUT_DATA. ED3342: ; UNTIL CTD_CLOSED DO MOV CSTPTR R6 ; MON CEOCDT ; CLOSE_GENERAL_OUTPUT_CDT. JMPI S4 EI19A0 ;E X0: RESERVATION ERROR. JMP ED3344 ; X1: EB RETREIVED FROM CDT ; AND CDT NOT CLOSED. ; GOTO SIM_MQO. ; (R3:=EB_REF.) JMP ED3346 ; X2: CDT CLOSED,AWAIT_OUT- ; STANDING MQO'S. ED3344: ; MOV ECRPTR R6 ; BEGIN SIM_MQO. MOV ECOTEC.X6 R0 ; GET OUTPUT BLOCK COUNT ILT R0 2 ; IF < 2 OUTSTANDING BLOCKS THEN JMP ED3345 ; GO HANDLE 0 OR 1 PSEUDO MQO'S INV ECOISW.X6 ; SIM THE LAST MQO,I.E. INV ECOOSW.X6 ; SWITCH OOSW/OISW ED3345: ; JMPI S4 EI1650 ; PROCESS THE EDC BLOCK JMP ED3342 ; GO TRY CLOSING AGAIN ED3346: ; MON RODCST ; RELEASE_OUTPUT_DATA_CST. JMP S4 ED1251 ; RELEASE_ECC_OUTPUT_DATA. MOV ECRPTR R6 ; ED3348: ; WAIT TILL ALL MQO'S REC'D IOZ ECOTEC.X6 ; IF NO OUTSTANDING BLOCKS - THEN JMP ED3349 ; EXIT CPU ; ***TRIGGER INTERRUPT PROCESS*** JMP S4 ED1212 ; OPEN INTERRUPT WINDOW JMP ED3348 ; KEEP WAITING ED3349: ; JMPI RL3310 ; RETURN ;----------------------------------------------------------------------- ED3350: ; BEGIN SETUP_CHANNEL ;---------------------------------- MOV R4 RL3310 ; SAVE RETURN LINK MOV CSTPTR R6 ; GET CST POINTER MON PRGCST ; PROGRAM CST JMP & S4 ED3430 ;V OPEN CST RETURN MON DECR ; DEALLOCATE ECR JMP & S4 ED3410 ;E OPEN/BAD RETURN NOP ; NONE WAS ALLOCATED MON DCDT ; DEALLOCATE POSSIBLE CDT JMP & S4 ED3410 ;E OPEN CDT RETURN NOP ; NO ONE ALLOCATED MON CKPCST ; CHECK PROGRAMMING JMP & S4 ED3430 ;V WRONG CONTENTS RETURN MON PGPCST ; PRESET CST PARAMETERS MOV CSTCS1.X6 R3 ; IF CSTPAD NE 0 THEN SRL R3 CSTPAD FI XTR R3 CSTPAX ; GET PAD(CS1) ED3352: SIO R0 R3 ; CHECK, THAT LTU EXISTS MON CHKLTU ; CHECK LTU TYPE JMP & S4 ED3430 ;V WRONG TYPE MON PRGLTU ; PROGRAM LTU ED3354: ; NO LTU RETURN - CONTINUE: MON ACDT ; ALLOCATE CDT JMP & S4 ED3410 ;E GOT AN OPEN ONE JMP & S4 ED3430 ;V NONE AVAILABLE MON PGPCDT ; PRESET GENERAL CDT PARAMETERS JMP & S4 ED3410 ;E NOT RESERVABLE MON PEPCDT ; PRESET SYNC EDC CDT JMP & S4 ED3410 ;E NOT RESERVABLE JMP S4 ED1220 ; ALLOCATE ECR JMP & S4 ED3430 ;V NONE AVAILABLE MOV R6 R0 ; ADDC CSTCS2 R0 ; SETS X0 CSTCSU ; DECLARE CHANNEL SETUP JMPI RL3310 ; RETURN ;---------------------------------------------------------------------- ED3360: ; BEGIN SETB_SC_HANDLING. ;---------------------------------- MOV R4 RL3310 ; MOV CSTPTR R6 ; MOV CSTCS2.X6 R3 ; MOVC 1<CSTICO+1<CSTOCO R0 ; AND R0 R3 ; INE R0 R3 ; IF CHANNEL NOT OPEN - THEN JMP S4 ED3430 ; REPORT A VIOLATION MOV ECRPTR R6 ; JMP S4 ED1260 ; RELEASE_OUTPUT_DATA JMPI S4 EI6420 ; DEACTIVATE ACK TIMEOUT JMPI S4 EI6440 ; DEACTIVATE ACKL TIMEOUT MOV ECONIX.X6 R0 ; JMP S4 ED1240 ; PREPARE ECR OUTPUT AREA MOD CSTPTR ; MOVC CSTVF4 R7 ; GET CSTVF4 LOCATION SETS X7 EECSRA ; SET SETBD COMMAND IN PROGRESS CPU ; ***TRIGGER INTERRUPT PROCESS*** JMPI RL3310 ; RETURN ;----------------------------------------------------------------------- ; ED3370: ; BEGIN START/STOP NORMAL MONITORING ;----------------------------------- MOV CSTPTR R6 ; ADDC CSTCS7 R6 ; MOVC CSTNMM R2 ; CLRS X6 R2 ; CLEAR CSTNMM (STOP) BUT IEQ R0 OCS13 ; IF ITS START SETS X6 CSTNMM ; THEN TURN CSTNMM ON JMP X4 ; RETURN ;----------------------------------------------------------------------- ; ED3380: ; BEGIN START/STOP EDC MONITORING ;----------------------------------- MOV CSTPTR R6 ; ADDC CSTCS7 R6 ; SETS X6 CSTEMM ; SET CSTEMM (START) INE R0 OCS16 ; IF SC NOT STOP - THEN JMP X4 ; RETURN FROM START MOV R4 RL3380 ; SAVE RETURN LINK ;----------------------------------- ; PROCESS STOP EDC MONITORING ;----------------------------------- MOVC CSTEMM R2 ; CLRS X6 R2 ; CLEAR CSTEMM (STOP) MOV XGSTPR R6 ; MOV GSTECF.X6 R6 ; SUB XBASE R6 ; REL. LOCATION OF ECF IN R6 MOV ECGCIM.X6 R5 ; REL. LOC. OF CST THAT SUB XBASE R5 ; IS USED FOR INPUT MONITORING MOV CSTIP2.X5 R7 ; SBZ R7 CSTISA ; IF A SECTOR IS ALLOCATED THEN JMP S4 ED3383 ; QUEUE IT FOR THE MP MOV XGSTPR R6 ; MOV GSTECF.X6 R6 ; SUB XBASE R6 ; REL. LOCATION OF ECF IN R6 MOV ECGCOM.X6 R5 ; REL. LOCATION OF CST THAT SUB XBASE R5 ; IS USED FOR OUTPUT MONITORING MOV CSTIP2.X5 R7 ; SBZ R7 CSTISA ; IF A SECTOR IS ALLOCATED THEN JMP S4 ED3383 ; QUEUE IT FOR THE MP JMPI RL3380 ; RETURN ED3383: ; SVS R3 ; SAVE PSW LDM 2#111 ; DISABLE INTERRUPTS MOV R5 XHWRK6 ; PUT CSTPTR IN EDCQMS WORK AREA MON EDCQMS ; QUEUE THE MESSAGE SECTOR LDS R3 ; RESTORE PSW JMP X4 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; SUBCOMMAND ERROR HANDLING ; ; CALLED BY: ED3310, ED3320, ED3350, ED3360 ; ; CALLS: NONE ; ; ENTRIES: ED3410 - CP ERROR ; ED3420 - SUBCOMMAND ERROR ; ED3430 - ATTEMPTED VIOLATION ; ; RETURNS: ED3304 - SUBCOMMAND COMPLETION ; ; REGISTERS ENTRY EXIT ; R0 - CMC ; R1 - DESTROYED ; R2,R3,R7 - UNCHANGED ; R4 LINK DESTROYED ; R5 - GSTP (REL) ; R6 - CSTP (REL) ;----------------------------------------------------------------------- ED3410: MODC CMCCPE-CMCCME ; CP ERROR ED3420: MODC CMCCME-CMCATV ; SUBCOMMAND ERROR ED3430: MOVC CMCATV R0 ; ATTEMPTED VIOLATION MOVC 1<CSTSUE R1 ; MOV CSTPTR R6 ; IOR R1 CSTVF1.X6 ; SET ERROR BITS IN CSTVF1 MOV XGSTPR R5 ; MOV R4 GSTSBR.X5 ; SAVE ERROR DETECTION ADDR IN GST JMP ED3304 ; GOTO SC_COMPLETION. ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS_TQM_LETTERS ; ; TIME QUEUE MONITOR LETTERS ARE RECEIVED WHEN TIMEOUTS EXPIRE. THE ; TIMEOUTS IN QUESTION ARE THE ACK AND ACKL TIMEOUTS. ; ; CALLED BY: ED3100 ; ; CALLS: ED1200, ED1604 ; ; ENTRIES: ED3500 ; ; RETURNS: DONE ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3,R5,R6 - DESTROYED ; R4 LINK DESTROYED ; R7 LETP (REL) DESTROYED ;----------------------------------------------------------------------- ED3500: ; MOV R4 RL3500 ; MOV R7 LETPTR ; SAVE POINTER TO TQM LETTER MOV LETPTR R7 ; MOV LTMS1. X7 R4 ; INE R4 LTMST0 ; IF MSG TYPE IS NOT 0 - THEN JMP ED3506 ; GO RELEASE THE LETTER MOV LTMS4. X7 R6 ; GET LCN AND FLAGS MOV R6 R3 ; XTR R6 CSTLAX ; UNPACK LCN JMPI S4 EI1200 ; GET CST, CDT AND ECR FOR LCN JMP ED3506 &; NO ECR - GO RELEASE LETTER MOV ECOFLG.X6 R0 ; GET OUTPUT FLAGS FOR THE LCN SETS R0 ECOPCQ ; SET "PROCESSING REQ'D" FLAG IBZ R3 EOCLTF ; IF ACKL TIMEOUT NOT ON - THEN JMP ED3502 ; GO CHECK ACK TIMEOUT IONP ECOXLT.X6 ; IF ACKL CTR NOT ZERO THEN DEC ECOXLT.X6 ; DECREMENT IT AND JMP ED3506 ; EXIT IBZ R0 ECOPALT ; IF NO PENDING ACKL TIMEOUT THEN JMP ED3506 ; EXIT MOVC ECOPALT R1 ; CLRS R0 R1 ; CLEAR PENDING ACKL TIMEOUT MOV ECOLCT.X6 R1 ; GET LCB COUNT ILT R1 EOCLCL ; IF LCB COUNT < LCB LIMIT - THEN JMP ED3501 ; GO SET TIMEOUT MOVC EEC10C R0 ; JMPI S4 EI1800 ; REPORT LCB COUNT EXCESS NOP ; JMP ED3506 ; EXIT ED3501: ; SETS R0 ECOALTO ; SET "ACKL TIMEOUT" FLAG MOV R0 ECOFLG.X6 ; JMPI S4 EI1604 ; ACTIVATE LCB OUTPUT QUEUE JMP ED3504 ; GO TRIGGER INTERRUPT PROCESS ED3502: ; IBZ R3 EOCATF ; IF ACK TIMEOUT NOT ON - THEN JMP ED3506 ; EXIT IONP ECOXAT.X6 ; IF ACK COUNTER NON ZER - THEN DEC ECOXAT.X6 ; DECREMENT IT AND JMP ED3506 ; EXIT IBZP R0 ECOPAT1 ; IF NO PENDING ACK TIMEOUTS THEN IBZ R0 ECOPAT2 ; JMP ED3506 ; EXIT SETS R0 ECOATO ; SET ACK TIMEOUT ON MOVC NT% ; (1<ECOPAT1+1<ECOPAT2) R1 ; CLEAR PENDING ACK TIMEOUT FLAGS AND R1 R0 ; MOV R0 ECOFLG.X6 ; ED3504: ; CPU ;I ***TRIGGER INTERRUPT PROCESS*** ED3506: ; MOV LETPTA R5 ; MON RLET ; RELEASE THE LETTER JMPI RL3500 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; PROCESS_ODP_LETTERS ; ; THIS ROUTINE PROCESSES LETTERS FROM ODP WHICH DEAL WITH ; PRE-EMPTION, INITIATION OF OUTPUT OR CHANNEL CLOSING. ; ; CALLED BY: ED3100 ; ; CALLS: ED1200, ED1212, ED1260, ED7200, ED3330, ED6420, ED6440, ; ED1980, ED1920 ; ; ENTRIES: ED3600 ; ; RETURNS: LINK ; ; REGISTERS ENTRY EXIT ; R0,R1,R2,R3,R5,R6 - DESTROYED ; R4 LINK DESTROYED ; R7 LETP (REL) DESTROYED ;----------------------------------------------------------------------- ED3600: ; MOV R4 RL3600 ; MOV R7 LETPTR ; MOV LETPTR R7 ; MOV LTMS1. X7 R4 ; INE R4 LTMST1 ; IF MSG TYPE IS NOT 1 - THEN JMP ED3610 ; GO CHECK PRE-EMPTION MOV ECFPTR R5 ; MOV ECGUQH.X5 R6 ; GET TOP OF USED ECR QUEUE MOV ECGUQH+% ; QCCQE. X5 R0 ; GET NO. OF USED ECR'S IEQ R0 0 ; IF NO ECR'S THEN JMP ED3606 ; EXIT ED3602: ; MOV R0 LOOPCT ; CYCLE USED ECR'S MOV R6 ECRPTA ; SUB XBASE R6 ; MOV ECCCST.X6 R7 ; GET ABS. CST PTR FROM ECR MOV R7 CSTPTA ; SUB XBASE R7 ; RELATIVIZE CST POINTER IOZ QCCQE+CSTOBQ.X7 ; IF OUTPUT BIN QUEUE EMPTY - THEN JMP ED3604 ; GO CHECK NEXT CHANNEL MOD R6 ; MOVC ECOFLG R5 ; GET ADDRESS OF OUTPUT FLAGS RELS X5 ECOEMP ; SET OUTPUT BIN QUEUE NOT EMPTY MOV R6 ECRPTR ; SAVE POINTERS MOV R7 CSTPTR ; IBZP X5 ECOSCQ ; IF NOT IN SETBD MODE - THEN JMPI S4 EI7200 ; GO DO SOME OUTPUT JMP ED3604 ; THEN GET NEXT CHANNEL MOV CSTPTR R6 ; MON RODCST ; RELEASE CST OUTPUT DATA MOV ECRPTR R6 ; ED3604: ; CPU ; ***TRIGGER INTERRUPT PROCESS*** JMP S4 ED1212 ;I OPEN INTERRUPT WINDOW MOV ECCFLK.X6 R6 ; GET LINK TO NEXT ECR MOV LOOPCT R0 ; SOB R0 ED3602 ; PROCESS NEXT ECR UNLESS DONE ED3606: ; CLEAR_FLAG: MOV LETPTA R5 ; MODN XBASE ; CLR LTMS4. X5 ; JMPI RL3600 ; RETURN ;----------------------------------------------------------------------- ; PRE-EMPTION ED3610: ;----------------------------------- INE R4 LTMST2 ; IF MSG TYPE NOT 2 - THEN JMP ED3620 ; GO CHECK CHANNEL CLOSING MOV LTMS3. X7 R6 ; SWP R6 ; XTR R6 CSTLAX ; UNPACK LCN JMPI S4 EI1200 ; GET CST, CDT, ECR POINTERS JMPI S4 EI1980 &;E NO ECR - REPORT ERROR MOV CSTPTR R6 ; CLR CSTNOC.X6 ; CLEAR O/P CHAR. COUNT MOV ECRPTR R6 ; JMP S4 ED1260 ; RELEASE OUTPUT DATA MOVC 1<ECOSCQ+1<ECOATO+% ; 1<ECOALTO R0 ; IOR R0 ECOFLG.X6 ; SET FLAGS AS IF JUST OPENED MOV LETPTR R7 ; MOVC CMILPN R0 ; MOV R0 LTRCV. X7 ; LETTER RECEIVER = CMI CLR LTMS4. X7 ; MOV LETPTA R5 ; MON SLET ; SEND LETTER TO CMI JMPI S4 EI1920 &;E REPORT LETTER HANDLING ERROR JMPI RL3600 ; RETURN ;----------------------------------------------------------------------- ; REQUEST TO CLOSE CHANNEL ED3620: ;----------------------------------- INE R4 LTMST3 ; IF MSG TYPE NOT 3 - THEN JMP ED3630 ; REPORT MESSAGE TYPE ERROR MOV LTMS3. X7 R6 ; SWP R6 ; XTR R6 CSTLAX ; UNPACK LCN JMPI S4 EI1200 ; GET CST, CDT, ECR POINTERS JMP ED3624 ; NO ECR - RETURN JMP S4 ED3330 ; CLOSE INPUT JMP S4 ED3340 ; CLOSE OUTPUT JMPI S4 EI6420 ; DEACTIVATE ACK TIMEOUT JMPI S4 EI6440 ; DEACTIVATE ACKL TIMEOUT ED3624: ; MOV LETPTA R5 ; MON SLET ; RETURN THE LETTER JMPI S4 EI1920 ;E REPORT LETTER HANDLING ERROR JMPI RL3600 ; RETURN ED3630: ; JMPI S4 EI1940 &;E REPORT LETTER TYPE ERROR MOV LETPTA R5 ; MON RLET ; RELEASE LETTER JMPI RL3600 ; RETURN ;----------------------------------------------------------------------- ;FF\f ;----------------------------------------------------------------------- ; ; LOCAL INTERRUPT SERVICE ; ; THE ONLY LEGAL ENTRY TO THIS ROUTINE IS AS A RESULT OF AN LTU ; TIMEOUT WHEN STATUS IS READ DURING PROCESSING OF A SETUP SUBCOMMAND ; ;----------------------------------------------------------------------- ED3990: ; MOV XLIRP R4 ; GET RETURN ADDRESS MOV XLICC R0 ; GET INTERRUPT CAUSE SNE R4 ED3352 ; IF NOT TIMEOUT ON SIO INSTR. INE R0 TIMEOUT ; ADDR. THEN MON ERR ; CALL MON ERR ELSE SVS R7 ; MOVC NT #1800 R3 ; CLEAR LOCAL INTERRUPT AND AND R3 R7 ; TIMEOUT BITS LDS R7 ; IN PSW MOVC 0 R3 ; MOV R3 XLICC ; CLEAR LOCAL INTERRUPT CAUSE JMP ED3354 ; SKIP LTU PROGRAMMING ;----------------------------------------------------------------------- ; ; EXTERNAL NAMES. ; ;----------------------------------------------------------------------- BEGIN EXTERNAL ED1251,ED1475,ED1200 EXTERNAL ED1600,ED1601,ED1602,ED1603,ED1604,ED1800 EXTERNAL ED1900,ED1910,ED1920,ED1930,ED1940,ED1950,ED1960,ED1970 EXTERNAL ED1980,ED1990,ED19A0,ED19B0,ED19C0,ED19D0,ED19E0,ED19F0 EXTERNAL ED2000,ED2990,ED3000,ED3990 EXTERNAL ED19F1,ED3410,ED3420,ED3430,ED3500,ED3600 NAMES END ;----------------------------------------------------------------------- ; ; END OF EDC MAIN PROGRAM SECTION. ; ;----------------------------------------------------------------------- END «eof»