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