|
|
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: 43008 (0xa800)
Types: TextFile
Names: »EDOSOD«
└─⟦01dc7a003⟧ Bits:30005073 8" CR80 Floppy CR80FD_0011 ( EDO SYS 1 PJ DEC, 3, 80 )
└─⟦460440515⟧
└─⟦this⟧ »EDOSOD«
LIST
;-----------------------------------------------------------------------
;
; PROJECT: NICS-TARE/CP
;
; MODULE IDENTIFICATION: NIC/292
; DISK IDENTIFICATION: CR/D/1227
;
; CPS NAME: ERROR DETECTION AND CORRECTION (EDC) SUBMODULE
; EDC OUTPUT PROGRAM SECTION (EDO)
; CPS VERSION: 0100
;
; MERGE FILES: SYSNOD,MNNNOD,GDSNOD,LETNOD,PCFNOD,CDTNOD,ECFNOD,EOCNOD
; CSTNOD,GSTNOD,MQXNOD,BINNOD,MSBNOD
; EDCNOD,TSTNOD,XPDNOD
; MODULE FILES: EDOSOD,EDOMOD,EDOHOD,EDOVOD,EDONOD
;
; REFERENCES: NIC/200/PSP/0006
;
; DATE: 791115
; AUTHOR: HM
;
;-----------------------------------------------------------------------
BEGIN MODULE EDOSYS
USE BASE
LOC=0
XDATE:=#$OC
;-----------------------------------------------------------------------
;
NOLIST
MESSAGE <:CALL SYSNOD:> $SYSNOD
MESSAGE <:CALL MNNNOD:> $MNNNOD
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 CSTNOD:> $CSTNOD
MESSAGE <:CALL GSTNOD:> $GSTNOD
MESSAGE <:CALL MQXNOD:> $MQXNOD
MESSAGE <:CALL BINNOD:> $BINNOD
MESSAGE <:CALL EDCNOD:> $EDCNOD
MESSAGE <:CALL XPDNOD:> $XPDNOD
MESSAGE <:CALL TSTNOD:> $TSTNOD
MESSAGE <:CALL MSBNOD:> $MSBNOD
MESSAGE <:CALL DBPNOD:> $DBPNOD
LIST
;-----------------------------------------------------------------------
;
; RETURN LINKS (RL)
;
;-----------------------------------------------------------------------
LOC=EOBASE
RL6230: LOC=LOC+1
RL6320: LOC=LOC+1
RL6410: LOC=LOC+1
RL6420: LOC=LOC+1
RL6430: LOC=LOC+1
RL6440: LOC=LOC+1
RL6520: LOC=LOC+1
RL6820: LOC=LOC+1
RL7160: LOC=LOC+1
RL7200: LOC=LOC+1
RL7290: LOC=LOC+1
RL7300: LOC=LOC+1
RL7400: LOC=LOC+1
RL8100: LOC=LOC+1
RL8400: LOC=LOC+1
RLMQIS: LOC=LOC+1
RLMQOS: LOC=LOC+1
;
;-----------------------------------------------------------------------
;
; ASSIGNMENTS
;
;-----------------------------------------------------------------------
; BITS:
BIT7:= 7 ;
;-----------------------------------------------------------------------
;FF\f
USE PROG
;-----------------------------------------------------------------------
;
;
; EDC OUTPUT PROGRAM SECTION
;
;
;-----------------------------------------------------------------------
LOC=EOPROG
;-----------------------------------------------------------------------
; PROCEDURE ED6200.
; READBUF(BUFP,OFFS,WORD)
;
; REGISTERS ENTRY EXIT
; R0 OFFS OFFS
; R1 - WORD
; R3 - BMSA
; R4 LINK DESTROYED
; R5 BUFP (ABS) BUFP (ABS)
; R7 - DESTROYED
;
; INPUTS: BUF
; OUTPUTS: -
;
; CALL BY: ED7070,ED8400
; CALL TO: GBSM
;-----------------------------------------------------------------------
ED6200: ; BEGIN READBUF(BUFP,OFFS,WORD)
MOV XBASE R1 ;
MON GBSM ; GET_PAGE(BUFP,BMSA)
SVS R7 ; MASK:=PSW
LDS R3 ; PSW:=BMSA
MODN R1 ;
MOD R0 ;
MOV 0. X5 R1 ; WORD:=OFFS.BUFP
LDS R7 ; PSW:=MASK
JMP 0. X4 ; RETURN
; END
;----------------------------------------------------------------------
; PROCEDURE ED6210.
; PROCEDURE INDEX(IDENT.)
;
; REGISTERS: ENTRY EXIT
; R0 IDENT. UNCH
; R4 LINK UNCH
; R7 - INDEX
;
; CALL BY: ?
;----------------------------------------------------------------------
ED6210: ; BEGIN INDEX.
MOV R0 R7 ;
XTR R7 ECOADC ; X.OSTA:=(INDEX)MOD 32
MOD R7 ;
MOD ECRPTR ;
MOVC ECOSTA R7 ; INDEX:=OSTA+X.OSTA
JMP 0. X4 ; RETURN
; END INDEX.
;----------------------------------------------------------------------
; PROCEDURE ED6220.
; PROCEDURE UPDATE_ONTX.
;
; REGISTERS: ENTRY EXIT
; R0 BID UNCH
; R4 LINK UNCH
; R6 ECRP UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED6220: ; BEGIN UPDATE_ONTX.
MOV ECONTX.X6 R7 ;
SUB R0 R7 ; DIF:=(ONTX-BID)MOD128
XTR R7 EOCBDX ;
ILT R7 ECOSAZ ; IF DIF .LT. OSAZ I.E.
; (BID PREVIOUS TO ONTX) THEN
MOV R0 ECONTX.X6 ; ONTX:=BID
JMP 0. X4 ; RETURN LINK+0
; END UPDATE_ONTX.
;-----------------------------------------------------------------------
; PROCEDURE ED6230.
; RELEASE_IEB
;
; REGISTERS ENTRY EXIT
; R0,R1,R2,R3,R5,R7 - DESTROYED
; R4 LINK DESTROYED
; R6 ECRP (REL) ECRP (REL)
;
; INPUTS: ECCIQH
; OUTPUTS: ECCIQH
;
; CALL BY: ED7040,ED7050,ED7060,ED7070,ED7080
; CALL TO: LNOQ,RNBN
;
; RETURNS:
; LINK - DONE
;-----------------------------------------------------------------------
ED6230: ; BEGIN RELEASE_IEB.
MOV R4 RL6230 ;
MOVC 255 R3 ; N:=255
MOD ECRPTA ;
MOVC ECCIQH R4 ; QCB:=IQH
MON LNOQ ; DEQUEUE(N,QCB,FBUF,LBUF)
NOP ;
MON RNBN ; RELEASE(N,FBUF)
MOV ECRPTR R6 ;
JMPI RL6230 ; RETURN
; END
;-----------------------------------------------------------------------
; PROCEDURE ED6240.
; BOOLEAND OUT_OF_RANGE(BID).
;
; REGISTERS ENTRY EXIT
; R0 BID BID
; R4 LINK LINK
; R6 ECRP (REL) ECRP (REL)
; R7 - DESTROYED
;
; CALL BY: ED7060,ED7070,ED7080.
; CALL TO: -
; RETURNS:
; LINK+0: TRUE
; LINK+1: FALSE
;-----------------------------------------------------------------------
ED6240: ; BEGIN OUT_OF_RANGE.
MOV R0 R7 ;
MODN ECOPSB.X6 ;
ADDC -1 R7 ; N:=(BID-OPSB-1)MOD 128
XTR R7 EOCBDX ;
IHS R7 ECOSAZ ; IF N >= ARRAY_SIZE THEN
JMP 0. X4 ; TRUE
; ELSE
JMP 1. X4 ; FALSE
; END OUT_OF_RANGE.
;-----------------------------------------------------------------------
; PROCEDURE ED6320.
; GENERATE_OEB
;
; REGISTERS ENTRY EXIT
; R0,R1,R2,R3 - DESTROYED
; R4 LINK DESTROYED
; R5 - BUFP (ABS)
; R6,R7 - DESTROYED
;
; INPUTS: COEBCC,COBID,CSTOSC,CSTPTR
; OUTPUTS: COEBBT,EBCNT,EBTAB,BINSTA
;
; CALL BY: ED8610
; CALL TO: GNOB,PUTBUF,ED1960
;
; ENTRIES:
; ED6320: RR
; ED6322: SETB
;
; RETURNS: LINK+0 NO OUTPUT BINS
; LINK+1 COMPLETE
;-----------------------------------------------------------------------
; BEGIN GENERATE_OEB
ED6320: MODC BTRR-BTSETB ;
ED6322: MOVC BTSETB R0 ; EB_TYPE:=FUNC(ENTRY)
MOV R0 COEBBT ;
MOV R4 RL6320 ;
MOVC 1 R3 ; N:=1
MON GNOB ; GET_BUFFER(N,FBUF)
JMP ED6325 ; NO BINS
MOV RL6320 R0 ; SET UP FOR NORMAL RETURN
ADDC 1 R0 ;
MOV R0 RL6320 ;
MOVC EBCNTX R0 ;
MOVC BINCNM R1 ;
MOV COEBCC R2 ; (WRITE EB_COUNT INTO BUFFER)
MON PUTBUF ; PUT_BUFFER(BUFP,OFFS,MASK,WORD)
MOV CSTPTR R7 ;
MOV CSTCS2.X7 R0 ;
MOVC CSTOSF R3 ;
AND R3 R0 ;
IF BINSEC-CSTOSC GT 0 THEN
SLL R0 BINSEC-CSTOSC FI
IF BINSEC-CSTOSC LT 0 THEN
SRL R0 CSTOSC-BINSEC FI
MOV COEBCC R2 ;
ADD R0 R2 ;
MOVC BINSTA R0 ;
MOVC BINSEM+BINCNM R1 ; (WRITE SEC,CNT INTO BUFFER)
MON PUTBUF ; PUT_BUFFER(BUFP,OFFS,MASK,WORD)
MOVC EBTABX R0 ;
MOVC #FFFF R1 ;
MOV COEBBT R2 ;
MOV COBID R3 ;
SWP R3 ;
IOR R3 R2 ; (WRITE TYPE,BID INTO BUFFER)
MON PUTBUF ; PUT_BUFFER(BUFP,OFFS,MASK,WORD)
JMPI RL6320 ; RETURN
ED6325: ; NO BINS
MOV CSTPTR R4 ; SET FLAG TO MP TO INDICATE
MOVC 1<CSTLAC R5 ; THAT WE'RE OUT OF BINS
IOR R5 CSTVF1.X4 ;
JMPI RL6320 ; ABNORMAL EXIT
; END
;-----------------------------------------------------------------------
; PROCEDURE ED6400
; VALID(IEST,IBID)
;
; REGISTERS ENTRY EXIT
; R0 - BID
; R4 LINK DESTROYED
;
; INPUTS: CIEST,CIBID
; OUTPUTS: -
;
; CALL BY: ED7040,ED7050,ED7060,ED7070,ED7080
; CALL TO: -
;
; RETURNS:
; LINK+0 - NON-VALID
; LINK+1 - VALID
;-----------------------------------------------------------------------
ED6400: ; BEGIN VALID(IEST,IBID)
MOV CIEST R0 ;
IBN R0 CDICFE ; IF TEST(IEST,CRC_ERROR)
JMP 0. X4 ; THEN RETURN(0)
MOV CIBID R0 ;
IBN R0 BIT7 ; IF TEST(BID,PARITY_ERROR)
JMP 0. X4 ; THEN RETURN(0)
JMP 1. X4 ; ELSE RETURN(1)
; END
;----------------------------------------------------------------------
;FF\f
;-----------------------------------------------------------------------
; PROCEDURE ED6410/ED6412.
; ACTIVATE(ACKTO-TYPE1/TYPE2)
;
; REGISTERS ENTRY EXIT
; R0,R1,R2,R3 - DESTROYED
; R4 LINK DESTROYED
; R5 - FQE (ABS)
; R6 ECRP (REL) ECRP (REL)
; R7 - DESTROYED
;
; INPUTS: CSTPTR,CSTLAD,GSTPTA,ECRPTR
; OUTPUTS: ECOFLG,ECOAFP
;
; CALL BY: ED7290,ED7410/ED7290.
; CALL TO: ED6420,RFTA
;-----------------------------------------------------------------------
ED6410: ; BEGIN ACTIVATE(ACTO-TYPE1)
MODC 1<ECOPAT1-1<ECOPAT2 ;
ED6412: ; BEGIN ACTIVATE(ACKTO-TYPE2)
MOVC 1<ECOPAT2 R0 ; TYPE:=ACKTO-TYPETO-TYPE2)
MOV R0 EDWRK0 ;
MOV R4 RL6410 ;
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
MOV EDWRK0 R0 ;
IOR R0 ECOFLG.X6 ; SET OFLG(OPAT1/OPAT2)
MOVC EDLLPN R2 ; LPN:=PID_EDL_PROCESS
MOV CSTPTR R4 ;
MOV CSTCS1.X4 R3 ;
SWP R3 ;
XTR R3 CSTLAX ; DATA:=LCN
SETS R3 EOCATF ; DATA:=DATA SET(ACKTO_DESIGNATOR)
MOD GSTPTA ;
MOVC GSTF5 R4 ; FQCB:=FIFO_QCB_ADDR (5SEC)
MON RFTA ; RESERVE_FTMO(LPN,DATA,FQCB,FQE)
NOP ;
MOV ECRPTR R6 ;
MOV R5 ECOAFP.X6 ; AFP.ECRP:=FQE
JMPI RL6410 ; RETURN
; END
;-----------------------------------------------------------------------
; PROCEDURE ED6420
; DEACTIVATE(ACKTO)
;
; REGISTERS ENTRY EXIT
; R0,R1,R3,R5,R7 - DESTROYED
; R2 - LPN
; R4 LINK DESTROYED
; R6 ECRP (REL) ECRP (REL)
;
; INPUTS: ECOFLG,ECOAFP
; OUTPUTS: -
;
; CALL BY: ED7040,ED7060,ED7070,ED7080,ED6410
; ED3301,ED3360,ED7160,ED7290
; CALL TO: DFTA
;-----------------------------------------------------------------------
ED6420: ; BEGIN DEACTIVATE(ACKTO)
MOV R4 RL6420 ;
MOV ECRPTR R6 ;
MOV ECOFLG.X6 R0 ;
IBZP R0 ECOPAT1 ; IF OFLG(OPAT1)
IBZ R0 ECOPAT2 ; .OR. OFLG(OPAT2) THEN
JMP ED6422 ; BEGIN
MOVC EDLLPN R2 ; LPN:=PID_EDL_PROCESS
MOV ECOAFP.X6 R5 ; FQE:=AFP.ECRP
MON DFTA ; DEACTIVATE_FTMO(LPN,FQE)
INC ECOXAT.X6 ; -DEAC, INC OXAT.ECRP
ED6422: ; END
MOVC NT(1<ECOPAT1+% ;
1<ECOPAT2+1<ECOATO) R0 ;
AND R0 ECOFLG.X6 ; CLEAR OFLG(OPAT1,OPAT2,OATO)
JMPI RL6420 ; RETURN
; END
;-----------------------------------------------------------------------
; PROCEDURE ED6430
; ACTIVATE(ACKLTO)
;
; REGISTERS ENTRY EXIT
; R0,R1,R2,R3 - DESTROYED
; R4 LINK DESTROYED
; R5 - FQE (ABS)
; R6 ECRP (REL) ECRP (REL)
; R7 - DESTROYED
;
; INPUTS: CSTPTR,CSTLAD,GSTPTA,ECRPTR
; OUTPUTS: ECOFLG,ECOLFP
;
; CALL BY: ED7120
; CALL TO: ED6440,RFTA
;-----------------------------------------------------------------------
ED6430: ; BEGIN ACTIVATE(ACKLTO)
MOV R4 RL6430 ;
JMP S4 ED6440 ; DEACTIVATE(ACKLTO)
MOVC EDLLPN R2 ; LPN:=PID_EDL_PROCESS
MOV CSTPTR R4 ;
MOV CSTCS1.X4 R3 ;
SWP R3 ;
XTR R3 CSTLAX ; DATA:=LCN
SETS R3 EOCLTF ; DATA:=DATA SET(ACKLTO_DESIGNATOR
MOD GSTPTA ;
MOVC GSTF5 R4 ; FQCB:=FIFO_QCB_ADDR (5SEC)
MON RFTA ; RESERVE_FTMO(LPN,DATA,FQCB,FQE)
NOP ;
MOV ECRPTR R6 ;
MOV R5 ECOLFP.X6 ; LFP.ECRP:=FQE
MOVC 1<ECOPALT R0 ;
IOR R0 ECOFLG.X6 ; SET(OFLG,OPTL)
JMPI RL6430 ; RETURN
; END
;-----------------------------------------------------------------------
; PROCEDURE ED6440
; DEACTIVATE(ACKLTO)
;
; REGISTERS ENTRY EXIT
; R0,R1,R3,R5,R7 - DESTROYED
; R2 - LPN
; R4 LINK DESTROYED
; R6 ECRP (REL) ECRP (REL)
;
; INPUTS: ECOFLG,ECOLFP
; OUTPUTS: -
;
; CALL BY: ED3301,ED3360,ED6430,ED7050
; CALL TO: DFTA
;-----------------------------------------------------------------------
ED6440: ; BEGIN DEACTIVATE(ACKLTO)
MOV R4 RL6440 ;
MOV ECOFLG.X6 R0 ;
IBZ R0 ECOPALT ; IF OFLG(OPALT) THEN
JMP ED6442 ; BEGIN
MOVC EDLLPN R2 ; LPN:=PID_EDL_PROCESS
MOV ECOLFP.X6 R5 ; FQE:=LFP.ECRP
MON DFTA ; DEACTIVATE_FTMO(LPN,FQE)
INC ECOXLT.X6 ; -DEACT. , OXLT:=OXLT+1
ED6442: ; END
MOVC NT% ;
1<ECOPALT+1<ECOALTO R0 ;
AND R0 ECOFLG.X6 ; CLAER OFLG(OPALT,OALT)
JMPI RL6440 ; RETURN
; END
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; PROCEDURE ED6520.
; REMOVE(OSTA,OEBA,X0,X1)
;
; REGISTERS: ENTRY EXIT
; R0 X0 DEST
; R1 X1 DEST
; R0,R3,R5,R7 - DEST
; R4 LINK DEST
; R6 ECRP (REL) UNCH
;
; CALL TO: ED6210,RNBN
; CALL BY: ED1260,ED7040
; RETURNS:
; LINK+0: DONE
;----------------------------------------------------------------------
ED6520: ; BEGIN REMOVE
MOV R4 RL6520 ;
SUB R0 R1 ; N:=(X1-X0)MOD OSAZ
;
; FOR J:=X0 UNTIL X0+N DO
ED6522: ; BEGIN
ADDC 1 R0 ; J:=J+1
JMP S4 ED6210 ; STATUS:=OSTA(J)
MOV X7 R4 ;
MOVC 1<ECOARQ R3 ; OSTA(J):=OSTA(J) AND (OARQ)
AND R3 0. X7 ;
IBZ R4 ECOFUL ; IF STATUS(OFUL) THEN
JMP ED6526 ; BEGIN
IBN R4 ECOITX ; IF STATUS(-OITX) THEN
JMP ED6524 ; BEGIN
MOV R0 EDWRK0 ;
MOV R1 EDWRK1 ;
MOV ECOEBA-ECOSTA.X7 R5 ; BUFP:=OEBA(J)
MOVC -1 R3 ; K:=00
MON RNBN ; RELEASE(BUFP,K)
MOV EDWRK0 R0 ;
MOV EDWRK1 R1 ;
MOV ECRPTR R6 ;
JMP ED6526 ; END
ED6524: ; ELSE
; BEGIN
MOV ECOEBA-ECOSTA.X7 R3 ;
MOVC EOCTDC R2 ; TYPE:=DISCARD
IBN R4 ECOTQS ; OTQI:=FUNC(OTQS)
MODC ECOTQI1-ECOTQI0 ; 0.OTQI:=TYPE
MOVL R23 ECOTQI.X6 ; 1.OTQI:=EBP
; END
ED6526: ; END
XTR R1 ECOADC ;
SOB R1 ED6522 ; END
JMPI RL6520 ; RETURN
; END REMOVE.
;----------------------------------------------------------------------
; PROCEDURE ED6810.
; BOOLEAN TX_OPEN.
;
; REGISTERS: ENTRY EXIT
; R0 - DEST
; R4 LINK UNCH
; R5 OFLG (REL) UNCH
; R6 ECRP (REL) UNCH
; R7 - DEST
;
; RETURNS:
; LINK+0: FALSE
; LINK+1: TRUE
;----------------------------------------------------------------------
ED6810: ; BEGIN TX_OPEN.
MOV CSTPTR R7 ;
MOV CSTCDT.X7 R7 ;
SUB XBASE R7 ;
MOV ECOTEC.X6 R0 ;
ILT R0 2 ; IF OTEC >=2
ION CDONEB.X7 ; .OR. ONEB<>0 THEN
JMP 0. X4 ; FALSE
; ELSE
JMP 1. X4 ; TRUE
; END TX_OPEN.
;----------------------------------------------------------------------
; PROCEDURE ED6820.
; PROCEDURE QUEUE(EBP,QID,EBP/OSTAX)
;
; REGISTERS ENTRY EXIT
; R0 - DEST
; R1 EBP DEST
; R2 QID DEST
; R3 EBP/OSTAX DEST
; R4 LINK DEST
; R5 - DEST
; R6 ECRP UNCH
; R7 - DEST
;----------------------------------------------------------------------
ED6820: ; BEGIN QUEUE.
MOV R4 RL6820 ;
MOV ECOFLG.X6 R5 ; IF OFLG(OTXO) THEN
IBZ R5 ECOTXO ; SIM QUEUED
MON EDOTST ; EDC_OUTPUT_TEST
JMP ED6824 ; X0: SIM_QUEUED,GOTO SIM_MQO.
MOV ECOTEC.X6 R0 ;
IGE R0 2 ; IF OTEC .GE. 2 THEN
JMPI S4 EI1990 ; CP_ERROR.
ION ECOISW.X6 ; ITQI:=FUNC(OISW)
MODC ECOTQI1-ECOTQI0 ; 1.OTQI:=QID
MOVL R23 ECOTQI.X6 ; 2.OTQI:=N/X
INV ECOISW.X6 ; SHIFT OISW
INC ECOTEC.X6 ; OTEC:=OTEC+1
MOV CSTPTR R6 ;
MON RS0CDT ; RESERVE_CDT(CSTP)
JMPI S4 EI19A0 ;
ION CDONEB.X5 ; IF CDONEB <> 0 THEN
JMPI S4 EI1990 ; CP_ERROR
MOV R1 CDONEB.X5 ; CDONEB:=EBP
MOV R5 R7 ;
IOZP CDOCEB.X5 ; IF OCEB = 0 I.E.
ADDC CDOEST R7 ; (LINE IDLE.) THEN
SETS X7 CDOEDS ; SETS CDOEST(EDS)
MOVC 0 R3 ; EST:=0
MOV CSTCS7.X6 R0 ;
IBNP R0 CSTEMM ; IF EDC_MONITORING_MODE THEN
MON EDCTMO ; EDC_MONITORING_OUTPUT
JMPI S4 EI1900 ;
MON RL1CDT ; RELEASE_CDT(CDTP)
NOP ;
MOV ECRPTR R6 ;
JMPI RL6820 ; RETURN
;
ED6824: ; SIM_MQO.
MOV R3 R1 ;
MOD R2 ;
JMPI S4 ED0500 ; MQO_SERVICE(EBP,QID,N/X)
MOV ECRPTR R6 ;
JMPI RL6820 ; RETURN
; END QUEUE.
;-----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; ED7040/ED7050/ED7060/ED7070/ED7080.
;
; MQI SERVICE PROCEDURES.
;
; REGISTERS: ENTRY EXIT
; R1,R2,R3,R5,R7 - DEST
; R4 LINK DEST
; R6 ECRP (REL) DEST
;
; ENTRY:
; ED7040: ACK_RX.
; ED7050: ACKL_RX.
; ED7060: NAK_RX.
; ED7070: NAK2_RX.
; ED7080: NAKF_RX.
; RETURNS:
; LINK+0: DONE
;
; CALL TO: ED6200,ED6210,ED6220,ED6230,ED6400,ED6420,
; ED6430,ED6520,ED7200.
; CALL BY: MAIN_INT.
;
;----------------------------------------------------------------------
ED7040: ; BEGIN ACK_RX.
;----------------------------------
MOV R4 RLMQIS ;
MOD R6 ;
MOVC ECOFLG R5 ;
IBN X5 ECOATO ; IF OFLG(OATO) THEN
JMP ED7099 ; GOTO RETURN (IGNORE_EB)
JMP S4 ED6400 ; IF NOT VALID(CRC,BID) THEN
JMP ED7088 ; REPORT(CRC_ERROR)
JMP S4 ED6210 ; STATUS:=OSTA(CIBID)
IEQ R0 ECOPSB.X6 ; IF CIBID<>OPSB
JMP ED7044 ; .AND. OFLG(-OTXD) THEN
IBZ X7 ECOTXD ; REPORT(UNEXP_ACK)
JMP ED7086 ; ELSE
IEQ R0 ECOFSB.X6 ; CASE OF CIBID
JMP ED7042 ; BEGIN
INE R0 ECOSSB.X6 ; 0. UNEXPECTED_ACK
JMP ED7086 ; REPORT(UNEXP_ACK)
;
; 1. CIBID:=OSSB
MOV R0 ECOFSB.X6 ; OFSB:=OSSB
MOV ECOS2S.X6 R1 ;
MOV R1 ECOS1S.X6 ; OS1S:=OS2S
CLR ECOS2S.X6 ; OS2S:=0
DEC ECOCSC.X6 ; OCSC:=OCSC-1
;
ED7042: ; 2. CIBID:=OFSB
MOVL ECOS1S.X6 R01 ;
MOV R1 ECOS1S.X6 ; OS1S:=OS2S
CLR ECOS2S.X6 ; OS2S:=0
DEC ECOCSC.X6 ; OCSC:=OCSC-1
MOD CSTPTR ; CSTLAS:=OS1S
MOV R0 CSTLAS ;
MOV ECOPSB.X6 R0 ; X0:=OPSB
MOVL ECOFSB.X6 R12 ; X1:=OFSB
MOVL R12 ECOPSB.X6 ; OPSB:=OFSB
; OFSB:=OSSB
JMP S4 ED6520 ; REMOVE(OSTA,OEBA,X0,X1)
MOVC NT% ;
(1<ECORAQ+1<ECOEAF) R0 ;
AND R0 ECOFLG.X6 ; CLEAR OFLG(ORAQ,OEAF)
MOD R6 ;
MOVC ECOFLG R5 ;
IBN X5 ECOPAT1 ;
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
JMP S4 ED7200 ; INSERT_EB(OEBA)
JMP ED7099 ; GOTO RETURN
; END 1/2.
ED7044: ; 3. CIBID:=OPSB
IBZ X5 ECORAQ ; IF OFLG(-ORAQ) THEN
JMP ED7086 ; REPORT(UNEXP_ACK)
IBZ X5 ECOSBM ; IF OFLG(OSBM) THEN
JMP ED7046 ; BEGIN
RELS X5 ECOALTO ; CLEAR OFLG(OALTO)
MOD CSTPTR ;
MOVC CSTVF4 R7 ;
RELS X7 EECSRA ; CLEAR VF4(EECSRA)
ED7046: ; END
MOVC NT% ;
(1<ECORAQ+1<ECOSBM) R0 ;
AND R0 ECOFLG.X6 ; CLEAR OFLG(ORAQ,OSBM)
MOVC 1<ECOPCQ R0 ;
IOR R0 ECOFLG.X6 ; SETS OFLG(OPCQ)
IBN X5 ECOPAT1 ;
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
JMP ED7099 ; GOTO RETURN
; END 3.
;----------------------------------------------------------------------
;
ED7050: ; BEGIN ACKL_RX.
;----------------------------------
MOV R4 RLMQIS ;
MOV ECOFLG.X6 R0 ;
IBN R0 ECOALTO ; IF OFLG(OALTO) THEN
JMP ED7099 ; GOTO RETURN (IGNORE EB)
MOD R6 ;
MOVC ECOQCW R5 ;
IBZ X5 ECOLTX ; IF OQCW(-OLTX) I.E. UNEXP.
JMP ED7087 ; .OR.
JMP S4 ED6400 ; CRC_ERROR
JMP ED7089 ; .OR.
INE R0 ECOCLB.X6 ; CIBID<>OCLB THEN
JMP ED7087 ; REPORT(ERROR)
; ELSE
; BEGIN
RELS X5 ECOLTX ; CLEAR OQCW(OLTX)
JMP S4 ED6440 ; DEACTIVATE(ACKLTO)
MOV ECOLER.X6 R5 ;
MOVC -1 R3 ;
MON RNBN ; RELEASE LCB
; END
JMP ED7099 ; GOTO RELEASE_IEB
;----------------------------------------------------------------------
;
ED7060: ; BEGIN NAK_RX.
;----------------------------------
MOV R4 RLMQIS ;
MOD R6 ;
MOVC ECOFLG R5 ;
IBZ X5 ECOATO ; IF OFLG(OATO)
IBN X5 ECOSBM ; .OR. OFLG(OSBM) THEN
JMP ED7099 ; GOTO RETURN
JMP S4 ED6400 ; IF NOT VALID(IEST,BID)
JMP ED7090 ; .OR.
JMP S4 ED6240 ; OUT_OF_RANGE(BID) THEN
JMP ED7096 ; GOTO REPORT
JMP S4 ED6220 ; UPDATE_ONTX
JMP S4 ED6210 ; STATUS:=OSTA(CIBID)
IBZ X7 ECOTXD ; IF STATUS(-OTXD)THEN
JMP ED7096 ; REPORT
IBN X7 ECOITX ; IF STATUS(OITX) THEN
JMP ED7099 ; IGNORE BLOCK
MOD ECFPTR ;
MOV ECGRCL R4 ;
SLL R4 ECONCT ;
IHS X7 R4 ; IF NAK COUNT LIMIT EXCEEDED THEN
JMP ED7093 ; GOTO REPORT
SETS X7 ECONKD ; SETS OSTA(CIBID,ONKD)
RELS X5 ECORAQ ; CLEAR OFLG(ORAQ)
IBN X5 ECOPAT1 ;
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
JMPI S4 EI1600 ; SCHEDULE(D_TX)
JMP ED7099 ; GOTO RETURN
;----------------------------------------------------------------------
;
ED7070: ; BEGIN NAK2_RX.
;----------------------------------
MOV R4 RLMQIS ;
MOD R6 ;
MOVC ECOFLG R5 ;
IBZ X5 ECOATO ; IF OFLG(OATO)
IBN X5 ECOSBM ; .OR. OFLG(OSBM) THEN
JMP ED7099 ; GOTO RETURN
MOV CIBUF R5 ; BUFP:=CIBUF
MOVC EBBD2X R0 ; OFFS:=BD2X
JMP S4 ED6200 ; READBUF(BUFP,OFFS,BID)
XTR R1 EOCBDX ;
MOV R1 CIBID2 ; CIBID2:=BID
MOV CIBID2 R0 ;
IBN R0 BIT7 ; IF BID2 PARITY_ERROR
JMP ED7091 ; .OR.
JMP S4 ED6240 ; OUT_OF_RANGE(BID2)
JMP ED7097 ; .OR.
JMP S4 ED6400 ; NOT VALID(IEST,BID1)
JMP ED7091 ; .OR.
JMP S4 ED6240 ; OUT_OF_RANGE(BID1)
JMP ED7097 ; .OR.
MOV CIBID2 R1 ; NBID1,BID2 NOT IN CORRECT
SUB R0 R1 ; ORDER I.E.
XTR R1 EOCBDX ; (BID2-BID1)MOD128<OSAZ )
IHS R1 ECOSAZ ; THEN
JMP ED7097 ; GOTO REPORT
JMP S4 ED6220 ; UPDATE_ONTX
;
ADDC 1 R1 ; FOR N:=BID1 UNTIL BID2 DO
ED7072: ; BEGIN
JMP S4 ED6210 ; STATUS:=OSTA(N)
MOD ECFPTR ;
MOV ECGRCL R4 ;
SLL R4 ECONCT ;
IHS X7 R4 ; IF COUNT_LIMIT_EXCEEDED
JMP ED7094 ; .OR.
IBZ X7 ECOTXD ; EB NOT AVAILABLE THEN
JMP ED7097 ; GOTO REPORT
; ELSE
SETS X7 ECONKD ; SETS STATUS(ONKD)
ADDC 1 R0 ;
SOB R1 ED7072 ; END
MOD R6 ;
MOVC ECOFLG R5 ;
RELS X5 ECORAQ ; CLEAR OFLG(ORAQ)
IBN X5 ECOPAT1 ;
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
JMPI S4 EI1600 ; SCHEDULE(D_TX)
JMP ED7099 ; GOTO RETURN
;----------------------------------------------------------------------
;
ED7080: ; BEGIN NAKF_RX.
;----------------------------------
MOV R4 RLMQIS ;
MOD R6 ;
MOVC ECOFLG R5 ;
IBZ X5 ECOATO ; IF OFLG(OATO)
IBN X5 ECOSBM ; .OR. OFLG(OSBM) THEN
JMP ED7099 ; GOTO RETURN
JMP S4 ED6400 ; IF NOT VALID(IEST,BID) THEN
JMP ED7092 ; GOTO REPORT
JMP S4 ED6240 ; IF NOT OUT_OF_RANGE(BID) THEN
JMP ED7082 ; BEGIN
JMP S4 ED6210 ; STATUS:=OSTA(CIBID)
IBZ X7 ECOTXD ; IF STATUS(-OTXD) THEN
JMP ED7098 ; GOTO REPORT
; ELSE
ADDC 1 R0 ; N:=CIBID+1
JMP ED7083 ; END
ED7082: ; ELSE
; BEGIN
INE R0 ECOPSB.X6 ; IF CIBID <> OPSB THEN
JMP ED7098 ; GOTO REPORT
; ELSE
; BEGIN
ADDC 1 R0 ; N:=CIBID+1
JMP S4 ED6210 ; STATUS:=OSTA(N)
IBZ X7 ECOTXD ; IF STATUS(-OTXD) THEN
JMP ED7098 ; GOTO REPORT
; END
ED7083: ; END
JMP S4 ED6220 ; UPDATE_ONTX
;
; REPEAT
ED7084: ; BEGIN
JMP S4 ED6210 ; STATUS:=OSTA(N)
IBZ X7 ECOITX ;
IBN X7 ECOTXD ;
IBN X7 ECOARQ ;
JMP ED7085 ;
MOD ECFPTR ;
MOV ECGRCL R4 ;
SLL R4 ECONCT ;
IHS X7 R4 ; IF NAK LIMIT EXCEEDED THEN
JMP ED7095 ; GOTO REPORT
SETS X7 ECONKD ; SETS STATUS(ONKD)
ADDC 1 R0 ; N:=N+1
JMP ED7084 ; UNTIL ((-OTXD.AND.-OITX)
; .OR.ORAQ)
ED7085: ;
RELS X5 ECORAQ ; CLEAR OFLG(ORAQ)
IBN X5 ECOPAT1 ;
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
JMPI S4 EI1600 ; SCHEDULE(D_TX)
JMP ED7099 ; GOTO RETURN
;----------------------------------------------------------------------
;
; REPORT.
;----------------------------------
; UNEXPECTED BLOCKS.
ED7086: MODC EEC014-EEC015 ; ACK
ED7087: MODC EEC015-EEC004 ; ACKL
; EB_CRC_ERROR.
ED7088: MODC EEC004-EEC005 ; ACK
ED7089: MODC EEC005-EEC006 ; ACKL
ED7090: MODC EEC006-EEC007 ; NAK
ED7091: MODC EEC007-EEC008 ; NAK2
ED7092: MODC EEC008-EEC106 ; NAKF
; RE_TX COUNT EXCESS.
ED7093: MODC EEC106-EEC107 ; NAK
ED7094: MODC EEC107-EEC108 ; NAK2
ED7095: MODC EEC108-EEC116 ; NAKF
; BLOCK NOT AVAILABLE.
ED7096: MODC EEC116-EEC117 ; NAK
ED7097: MODC EEC117-EEC118 ; NAK2
ED7098: MODC EEC118 ; NAKF
MOVC 0 R0 ;
JMPI S4 EI1800 ; REPORT(ERROR_CODE)
NOP ;
ED7099: ; RETURN.
JMP S4 ED6230 ; RELEASE_IEB
JMPI RLMQIS ; RETURN LINK+0
; END ACK/ACKL/NAK/NAK2/NAKF_RX.
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; ED7110/ED7120/ED7130/ED7140/ED7150/ED7160/ED7170/ED7190.
;
; MQO_SERVICE_PROCEDURES.
;
; REGISTERS: ENTRY EXIT
; R0 TQI DEST
; R1 EBP/OSTAX DEST
; R3 EBR(MQO) DEST
; R4 LINK DEST
; R2,R5,R6,R7 - DEST
; ENTRY:
; ED7110: D_TX_DONE.
; ED7120: LCB_TX_DONE
; ED7130: ACK_TX_DONE.
; ED7140: NAK_TX_DONE.
; ED7150: ACKL_TX_DONE.
; ED7160: RR_TX_DONE.
; ED7170: SETB_TX_DONE.
; ED7190: RELEASE_EB.
;
; RETURNS:
; LINK+0: DONE.
;
; CALL TO: ED6410,ED6430
; CALL BY: MAIN_INT.,ED6820
;----------------------------------------------------------------------
ED7110: ; BEGIN D_TX_DONE.
;----------------------------------
;
RELS X1 ECOITX ; CLEAR OSTA(X)(OITX)
SETS X1 ECOTXD ; SETS OSTA(X)(OTXD)
JMP 0. X4 ; RETURN LINK+0
; END D_TX_DONE.
;----------------------------------------------------------------------
ED7120: ; BEGIN LCB_TX_DONE.
;----------------------------------
MOV R4 RLMQOS ;
MOVC NT(1<ECOLIT) R4 ; CLEAR OQCW(OLIT)
AND R4 ECOQCW.X6 ;
INC ECOLCT.X6 ; OLCT:=OLCT+1
JMP S4 ED6430 ; ACTIVATE(ACKLTO)
JMPI RLMQOS ; RETURN LINK+0
; END LCB_TX_DONE.
;----------------------------------------------------------------------
ED7130: ; BEGIN ACK_TX_DONE.
;----------------------------------
;
ED7140: ; BEGIN NAK_TX_DONE.
;----------------------------------
;
ED7150: ; BEGIN ACKL_TX_DONE.
;----------------------------------
;
JMP ED7190 ; GOTO RELEASE_BUFFER.
;
ED7160: ; BEGIN RR_TX_DONE.
;----------------------------------
MOV R4 RL7160 ;
MOVC NT(1<ECORRP) R0 ;
AND R0 ECOFLG.X6 ; CLEAR OFLG(ORRP)
INC ECORCT.X6 ; ORCT:=ORCT+1
JMP S4 ED7190 ; RELEASE_EB
JMP S4 ED6410 ; ACTIVATE(ACKTO-TYP1)
JMPI RL7160 ; RETURN
;
ED7170: ; BEGIN SETB_TX_DONE.
;----------------------------------
;
ED7190: ; RELEASE_EB:
MOV R4 RLMQOS ;
INE R1 R3 ; IF EBR(MQO)<>EBP THEN
JMPI S4 EI1900 ;E ERROR0(TQI-MISMATCH)
MOVC -1 R3 ;
MOV R1 R5 ; BUFP:=EBP
MON RNBN ; RELEASE BINS
JMPI RLMQOS ; RETURN LINK+0
; END ACK/NAK/ACKL/RR/SETB_TX_DONE.
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; PROCEDURE ED7200.
; INSERT_EB(OEBA,OLER).
;
; REGISTERS: ENTRY EXIT
; R0,R1,R2,R3,R5,R7 - DEST
; R4 LINK DEST
; R6 ECRP (REL) UNCH
;
; CALL TO: ED6210,ED8400
; CALL BY: ED3600,ED7040
; ENTRIES:
; ED7200
; RETURNS:
; LINK+0: DONE
;----------------------------------------------------------------------
ED7200: ;BEGIN INSERT_EB.
MOV R4 RL7200 ;
ED7210: ;
MOV ECOFLG.X6 R0 ;WHILE OFLG(-OEMP) I.E.
IBN R0 ECOEMP ; (OBQ NOT EMPTY) DO
JMP ED7240 ;
IBN R0 ECOEAF ; IF OFLG(-OEAF) THEN
JMP ED7220 ; BEGIN
JMPI S4 EI8400 ; COMPOSE_OEB
MOV ECRPTR R6 ;
MOV COEBBT R0 ;
IEQ R0 BTLCB ; IF LCB COMPOSED THEN
JMP ED7224 ; GOTO INSERT_LCB
IEQ R0 0 ; IF NO EB COMPOSED THEN
JMP ED7230 ; GOTO UPDATE_OFLG
ED7214: ; ELSE
MOV ECONIX.X6 R0 ; BEGIN
JMP S4 ED6210 ; X:=INDEX(ONIX)
IBN X7 ECOFUL ; IF OSTA(X)(OFUL)) THEN
JMPI S4 EI1990 ; CP_ERROR
MOV COSMSK R1 ;
MOV R1 0. X7 ; OSTA(X):=COSMSK
MOV COEBPT R2 ;
MOV R2 ECOEBA-ECOSTA.X7 ; OEBA(X):=EBP
MOVC 1<ECODTP R0 ;
IOR R0 ECOQCW.X6 ; SETS OQCW(ODTP)
INC ECONIX.X6 ; ONIX:=ONIX+1
MOV ECONIX.X6 R0 ;
JMP S4 ED6210 ; X:=INDEX(ONIX)
IBN R1 ECOESM ; IF EOS/EOM_EB THEN
INC ECOCSC.X6 ; OCSC:=OCSC+1
MOV ECOCSC.X6 R0 ;
IGEP R0 2 ; IF OCSC .GE. 2 THEN
; BEGIN
SETS X7 ECOARQ ; SETS OSTA(X)(OARQ)
JMP ED7232 ; GOTO UPDATE_OFLG
; END
JMP ED7210 ; END
; END
ED7220: ; ELSE
MOV ECOQCW.X6 R0 ; BEGIN
IBZ R0 ECOLRX ; IF LCB_NOT_PENDING THEN
JMP ED7240 ; GOTO RETURN
JMPI S4 EI8400 ; COMPOSE_OEB
MOV ECRPTR R6 ;
MOV COEBBT R0 ;
INE R0 BTLCB ; IF EBBT <> BTLCB THEN
JMPI S4 EI1990 ; CP_ERROR
;
ED7224: ; INSERT_LCB:
MOD R6 ;
MOVC ECOQCW R5 ;
IBN X5 ECOLTX ; IF LCB_IN_PROCRESS THEN
JMPI S4 EI1990 ; CP_ERROR(ODP-FAILLURE)
RELS X5 ECOLRX ;
SETS X5 ECOLTX ; PUT OCQW(OLTX,-OLRX,OLCP)
SETS X5 ECOLCP ;
CLR ECOLCT.X6 ; OLCT:=0
MOV COEBPT R0 ;
MOV R0 ECOLER.X6 ; OLER:=EBP
MOV COBID R0 ;
MOV R0 ECOCLB.X6 ; OCLB:=COBOD
JMP ED7210 ; END
;
ED7230: MODC 1<ECOEMP-1<ECOEAF ; UPDATE_OFLG:
ED7232: MODC 1<ECOEAF ;
ED7234: MODC 1<ECOOEP+1<ECOEBP ;
MOVC 1<ECOPCQ R0 ;
IOR R0 ECOFLG.X6 ; UPDATE(OEMP/OEAF/OEBP/OOEP/OPCQ)
JMP ED7210 ;END_DO_WHILE.
ED7240: ;
JMPI RL7200 ; RETURN
;END INSERT_EB.
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; PROCEDURE ED7290.
;
; PROCESS_REQUEST.
;
; REGISTERS: ENTRY EXIT
; R0,R1,R2,R3,R5,R7 - DEST
; R4 LINK DEST
; R6 ECRP (REL) UNCH
;
; CALL BY: MAIN_INT.
; CALL TO: ED6410,ED6412,ED6420,ED7410,ED7420,ED7430
; ED7440,ED7450,ED7460,ED7470,ED7490
; RETURNS:
; LINK+0: DONE
;----------------------------------------------------------------------
;
; CASE_JUMP_TABLES:
;----------------------------------------------------------------------
ED7250:; CASE(SBM,ATO,RRP,RAQ) ; (SBM,ATO,RRP,RAQ)
ED7300,ED7310,ED7380,ED7380 ; 0000,0001,0010,0011
ED7320,ED7330,ED7340,ED7390 ; 0100,0101,0110,0111
ED7380,ED7310,ED7380,ED7380 ; 1000,1001,1010,1011
ED7320,ED7350,ED7340,ED7390 ; 1100,1101,1110,1111
;----------------------------------------------------------------------
ED7260:; CASE0(EBP,PAT2,PAT1) ; (EBP,PAT2,PAT1)
ED6412,ED7390,ED7390,ED7380 ; 000,001,010,011
ED7304,ED7304,ED7302,ED7380 ; 100,101,110,111
;----------------------------------------------------------------------
ED7270:; CASE1(EBP,PAT2,PAT1) ; (EBP,PAT2,PAT1)
ED6410,ED7390,ED7380,ED7380 ; 000,001,010,011
ED6410,ED7314,ED7380,ED7380 ; 100,101,110,111
;----------------------------------------------------------------------
ED7280:; CASE(ALP,LCP,NKP,ACP,DTP) ; (ALP,LCP,NKP,ACP,DTP)
ED7490 ; 00000
ED7410 ; 00001
ED7420,ED7420 ; 0001X
ED7430,ED7430,ED7430,ED7430 ; 001XX
ED7440,ED7440,ED7440,ED7440 ; 01XXX
ED7440,ED7440,ED7440,ED7440 ; 01XXX
ED7450,ED7450,ED7450,ED7450 ; 1XXXX
ED7450,ED7450,ED7450,ED7450 ; 1XXXX
ED7450,ED7450,ED7450,ED7450 ; 1XXXX
ED7450,ED7450,ED7450,ED7450 ; 1XXXX
;----------------------------------------------------------------------
;
ED7290: ; BEGIN PROCESS_REQUEST.
MOV R4 RL7290 ;
ED7292: ; REPEAT
MOD R6 ;
MOVC ECOFLG R5 ;
IBN X5 ECOSCQ ; IF OFLG(OSCQ) THEN
JMP ED7314 ; GOTO INPUT CONTROL BLOCK TX
MOV X5 R0 ;
XTR R0 ECOSBM+1 ;
SRL R0 ECORAQ ;
MOD R0 ;
JMPI S4 ED7250 ; CASE_ACTION(SBM,ATO,RRP,RAQ)
JMP ED7292 ; UNTIL EXIT
; END
;----------------------------------------------------------------------
ED7300: ; 1.(SBM,ATO,RRP,RAQ):=0000
MOV ECOFLG.X6 R0 ; REPEAT
XTR R0 ECOEBP+1 ;
SRL R0 ECOPAT1 ;
MOD R0 ;
JMPI S4 ED7260 ; CASE0(EBP,PAT2,PAT1)
JMP ED7300 ; UNTIL EXIT
;
ED7302: ; DEACTIVATE(ACKTO-TYP2)
MOV R4 RL7300 ;
MOV ECOFLG.X6 R0 ;
IBN R0 ECOOEP ; IF OUTBOUND_EB PENDING THEN
JMP S4 ED6420 ; DEACTIVATE(ACKTO)
JMP ED7306 ; GOTO TX_PENDING EB.
;
ED7304: ; PROCESS(EBP)
MOV R4 RL7300 ;
ED7306: ; REPEAT
MOD R6 ;
MOVC ECOFLG R5 ;
JMP S4 ED6810 ; IF TX_NOT_POSSIBLE THEN
JMP ED7390 ; EXIT
ADDC ECOQCW-ECOFLG R5 ; ELSE
MOV X5 R0 ;
XTR R0 ECOALP+1 ;
SRL R0 ECODTP ;
MOD R0 ;
JMPI S4 ED7280 ; CASE(ALP,LCP,NKP,ACP,DTP)
JMP ED7306 ; X0: GOTO REPEAT
JMPI RL7300 ; X1: IDLE,RETURN
JMP ED7390 ; X2: BUSY,GOTO EXIT
; UNTIL EXIT/IDLE.
; END PROCESS(EBP)
;----------------------------------------------------------------------
ED7310: ; 2.(SBM,ATO,RRP,RAQ):=0001
MOV ECOFLG.X6 R0 ; REPEAT
XTR R0 ECOEBP+1 ;
SRL R0 ECOPAT1 ;
MOD R0 ;
JMPI S4 ED7270 ; CASE1(EBP,PAT2,PAT1)
JMP ED7310 ; UNTIL EXIT
;
ED7314: ; REPEAT
MOD R6 ;
MOVC ECOFLG R5 ;
JMP S4 ED6810 ; IF TX_NOT_POSSIBLE THEN
JMP ED7390 ; EXIT
ADDC ECOQCW-ECOFLG R5 ; ELSE
MOV X5 R0 ;
MOVC NT(1<ECOLCP+1<ECODTP)%;
R1 ;
AND R1 R0 ;
XTR R0 ECOALP+1 ;
SRL R0 ECODTP ;
IEQ R0 0 ; IF NO NAK/ACK/ACKL THEN
JMP ED7390 ; GOTO EXIT
MOD R0 ;
JMPI S4 ED7280 ; CASE(ALP, 0 ,NKP,ACP, 0 )
JMP ED7314 ; WHILE INPUT CONTROL BLOCKS/
; IS PENDING.
;----------------------------------------------------------------------
ED7320: ; 3.(SBM,ATO,RRP,RAQ):=0100/1100
SETS X5 ECORAQ ; SETS OFLG(ORAQ)
CLR ECORCT.X6 ; ORCT:=0
JMP 0. X4 ; RETURN
;----------------------------------------------------------------------
ED7330: ; 4.(SBM,ATO,RRP,RAQ):=0101
MOV ECORCT.X6 R0 ;
MOD ECFPTR ;
MOV ECGRCL R1 ;
IGE R0 R1 ; IF RR RE_TX EXCEEDED THEN
JMP ED7385 ; GOTO REPORT(URE)
RELS X5 ECORAQ ; CLEAR OFLG(ORAQ)
SETS X5 ECORRP ; SETS OFLG(ORRP)
JMP 0. X4 ; RETURN
;----------------------------------------------------------------------
ED7340: ; 5.(SBM,ATO,RRP,RAQ):=0110/1110
MOV R4 RL7300 ;
JMP S4 ED6810 ; IF TX_NOT_POSSIBLE THEN
JMP ED7390 ; GOTO EXIT
SETS X5 ECORAQ ; SETS OFLG(ORAQ)
JMP S4 ED7470 ; RR_TX
JMPI RL7300 ; RETURN
;----------------------------------------------------------------------
ED7350: ; 6.(SBM,ATO,RRP,RAQ):=1101
MOV R4 RL7300 ;
MOV ECORCT.X6 R0 ;
MOD ECFPTR ;
MOV ECGRCL R1 ;
IGE R0 R1 ; IF RR_RE_TX EXCEEDED THEN
JMP ED7386 ; GOTO REPORT(URE)
JMP S4 ED6810 ; IF TX_NOT_POSSIBLE THEN
JMP ED7390 ; GOTO EXIT
SETS X5 ECORRP ;
RELS X5 ECORAQ ; PUT OFLG(ORRP,-ORAQ)
JMP S4 ED7460 ; SETB_TX
JMPI RL7300 ; RETURN
;----------------------------------------------------------------------
ED7380: ; 7.(SBM,ATO,RRP,RAQ):=ELSE
JMPI EI1990 ; CP_ERROR
JMP ED7390 ;
ED7385: ; REPORT.
MODC EEC10A-EEC10B ;
ED7386: MOVC EEC10B R0 ;
JMPI S4 EI1800 ;
NOP ;
ED7390: ; EXIT.
JMPI RL7290 ; RETURN LINK+0
; END PROCESS_REQUEST.
;----------------------------------------------------------------------
;FF\f
;----------------------------------------------------------------------
; PROCEDURE ED7400.
; PROCEDURE TRANSMIT.
;
; REGISTERS: ENTRY EXIT
; R0,R1,R2,R3 - DEST
; R4 LINK DEST
; R5 OQCW.ECR DEST
; R6 ECRP (REL) UNCH
; R7 - DEST
;
; CALL BY: ED7290
; CALL TO: ED6200,ED6210,ED6410,ED6820
; ENTRIES:
; ED7410: DATA_TX
; ED7420: ACK_TX
; ED7430: NAK_TX
; ED7440: LCB_TX
; ED7450: ACKL_TX
; ED7460: SETB_TX
; ED7470: RR_TX
; ED7490: TX_QUEUE'S_EMPTY
; RETURNS:
; LINK+0: DONE
; LINK+1: IDLE
; LINK+2: BUSY/ERROR
;----------------------------------------------------------------------
; DATA_TX_JUMP_TABLE: CASE_OSTA(ARQ,NKD,ITX,TXD,FUL)
;-----------------------------------------------------------------------
ED7400: ;
ED7414,ED7418,ED741E,ED7412,ED741E,ED7412,ED741E,ED7412; 00000-00111
ED741E,ED741E,ED741E,ED741A,ED741E,ED741E,ED741E,ED741C; 01000-01111
ED7416,ED7418,ED741E,ED7416,ED741E,ED7416,ED741E,ED7416; 10000-10111
ED741E,ED741E,ED741E,ED741A,ED741E,ED741E,ED741E,ED741C; 11000-11111
;----------------------------------------------------------------------
ED7410: ; BEGIN DATA_TX.
;----------------------------------
MOV R4 RL7400 ;
ED7411: ; INSPECT_NEXT.
MOV ECONTX.X6 R0 ;
JMP S4 ED6210 ; STATUS:=OSTA(ONTX)
MOV X7 R0 ;
XTR R0 ECOARQ+1 ;
SRL R0 ECOFUL ;
MOD R0 ; CASE_OSTA(ARQ,NKD,ITX,TXD,FUL)
JMPI ED7400 ;
ED7412: ; 1. (00011/00101/00111)
INC ECONTX.X6 ; ONTX:=ONTX+1
JMP ED7411 ; GOTO INSPECT_NEXT.
;
ED7414: ; 2. (00000)
RELS X5 ECODTP ; CLEAR OQCW(ODTP)
JMPI RL7400 ; RETURN LINK+0
;
ED7416: ; 3. (10000/10011/10101/10111)
RELS X5 ECODTP ; CLEAR OQCW(ODTP)
JMP S4 ED6410 ; ACTIVATE(ACKTO-TYPE1)
JMPI RL7400 ; RETURN LINK+0
;
ED7418: ; 4. (00001/10001)
IBZ X7 ECOESM ; IF EOS/EOM-EB THEN
JMP ED7419 ; BEGIN
MOV ECONTX.X6 R0 ;
XTR R0 EOCBDX ; BID:=(ONTX)MOD128
MOV R0 ECOSSB.X6 ; OSSB:=BID
MOV ECOPSB.X6 R1 ; IF OPSB=OFSB I.E.
IEQ R1 ECOFSB.X6 ; (FIRST EOS TO TX) THEN
MOV R0 ECOFSB.X6 ; OFSB:=BID
ED7419: ; END
;
MOV ECOEBA-ECOSTA.X7 R5 ; BUFP:=EBP
MOV R7 R2 ;
MOVC EBCNTX R0 ; OFFS:=EBCNTX
JMP S4 ED6200 ; READBUF(BUFP,OFFS,WORD)
MOVC EDWRK7 R7 ;
MOV R1 X7 ;
SRL R1 1 ;
MODC 2#111<7 ; COUNT:=FUNC(WORD)
PUT R1 X7 ;
MOV X7 R0 ;
XTR R0 10 ;
NEG R0 ;
MOV CSTPTR R7 ;
ADD R0 CSTNOC.X7 ; CSTNOC:=CSTNOC-COUNT
MOV R2 R7 ;
ED741A: ; 5. (01011/11011)
ION ECOISW.X6 ;
MODC 1<ECOTQS ;
MOVC 1<ECOITX R0 ;
MODC 1<ECOTQS+1<ECOITX+% ;
1<ECONKD ; PUT_OSTA(OTQS,OITX,-ONKD)
PUT R0 X7 ;
MOD X7 ;
MOVC 1<ECONCT X7 ; ONCT:=ONCT+1
MOV ECOEBA-ECOSTA.X7 R1 ; EBP:=OEBA(ONTX)
MOVC EOCTDT R2 ; QID:=D
MOV R7 R3 ; X:=INDEX(OSTA(ONTX))
JMP S4 ED6820 ; QUEUE(EBP,QID,X)
INC ECONTX.X6 ; ONTX:=ONTX+1
JMPI RL7400 ; RETURN LINK+0
;
ED741C: ; 6. (01111/1111)
MOV RL7400 R4 ; BUSY_LINE
JMP 2. X4 ; RETURN LINK+2
;
ED741E: ; 7. ( ELSE )
JMPI S4 EI1990 ; CP_ERROR(INVALID OSTA)
MOV RL7400 R4 ;
JMP 2. X4 ; RETURN LINK+2
; END DATA_TX.
;-----------------------------------------------------------------------
ED7420: ; BEGIN ACK_TX.
;----------------------------------
IOZP ECCAQH+QCCQE.X6 ; IF ACK_QUEUE EMPTY THEN
RELS X5 ECOAKP ; CLEAR(OQCW.OACP)
JMP 0. X4 ; RETURN LINK+0
MOV R4 RL7400 ; ELSE
MOD ECRPTA ; BEGIN
MOVC ECCAQH R4 ; Q:=CAQH
MOVC 1 R3 ; N:=1
MON LNOQ ; DEQUEUE(Q,N,FBUF,LBUF)
NOP ;
MOV ECRPTR R6 ;
MOV R5 R3 ;
MOV R5 R1 ; EBP:=FBUF
MOVC EOCTAC R2 ; QID:=ACK
JMP S4 ED6820 ; QUEUE(EBP,QID,EBP)
JMPI RL7400 ; RETURN LINK+0
; END
; END ACK_TX.
;-----------------------------------------------------------------------
ED7430: ; BEGIN NAK_TX.
;----------------------------------
IOZP ECCNQH+QCCQE.X6 ; IF NAK_QUEUE EMPTY THEN
RELS X5 ECONKP ; CLEAR(OQCW.ONKP)
JMP 0. X4 ; RETURN LINK+0
MOV R4 RL7400 ; ELSE
MOD ECRPTA ; BEGIN
MOVC ECCNQH R4 ; Q:=CNQH
MOVC 1 R3 ; N:=1
MON LNOQ ; DEQUEUE(Q,N,FBUF,LBUF)
NOP ;
MOV ECRPTR R6 ;
MOV R5 R3 ;
MOV R5 R1 ; EBP:=FBUF
MOVC EOCTNK R2 ; QID:=NAK
JMP S4 ED6820 ; QUEUE(EBP,QID,EBP)
JMPI RL7400 ; RETURN LINK+0
; END
; END NAK_TX
;-----------------------------------------------------------------------
ED7440: ; BEGIN LCB_TX.
;----------------------------------
IBZ X5 ECOLTX ; IF LCB_NOT_AVAILABLE THEN
JMPI S4 EI1990 ; GOTO CP_ERROR.
MOV R4 RL7400 ; ELSE
; BEGIN
RELS X5 ECOLCP ; CLEAR(OQCW.OLCP)
SETS X5 ECOLIT ; SETS OQCW(OLIT)
MOV ECOLER.X6 R1 ; EBP:=OLER
MOVC EOCTLC R2 ; QID:=LCB
MOVC 0 R3 ;
JMP S4 ED6820 ; QUEUE(EBP,QID,0)
JMPI RL7400 ; RETURN LINK+0
; END
; END LCB_TX.
;-----------------------------------------------------------------------
ED7450: ; BEGIN ACKL_TX.
;----------------------------------
IOZP ECCALQH+QCCQE.X6 ; IF ACKL_QUEUE EMPTY THEN
RELS X5 ECOALP ; CLEAR(OQCW,OALP)
JMP 0. X4 ; RETURN LINK+0
MOV R4 RL7400 ; ELSE
MOD ECRPTA ; BEGIN
MOVC ECCALQH R4 ; Q:=CALQH
MOVC 1 R3 ; N:=1
MON LNOQ ; DEQUEUE(Q,N,FBUF,LBUF)
NOP ;
MOV ECRPTR R6 ;
MOV R5 R3 ;
MOV R5 R1 ; EBP:=FBUF
MOVC EOCTAL R2 ; QID:=ACKL
JMP S4 ED6820 ; QUEUE(EBP,QID,EBP)
JMPI RL7400 ; RETURN LINK+0
; END
; END ACKL_TX.
;----------------------------------------------------------------------
ED7460: ; BEGIN SETB_TX.
;----------------------------------
MOV R4 RL7400 ;
MOVC COEBCC R7 ;
MOVC 4 X7 ; COEBCC:=4
MOV ECOPSB.X6 R0 ;
MOV R0 COBID ; COBID:=OPSB
JMP S4 ED6322 ; GENERATE_SETB(COBID,BUFP)
JMPI RL7400 ; NO BINS - DON'T TRANSMIT
MOV ECRPTR R6 ;
MOV R5 R3 ;
MOV R5 R1 ; EBP:=BUFP
MOVC EOCTSB R2 ; QID:=SETB
JMP S4 ED6820 ; QUEUE(EBP,QID,EBP)
JMPI RL7400 ; RETURN LINK+0
; END SETB_TX
;----------------------------------------------------------------------
ED7470: ; BEGIN RR_TX.
;----------------------------------
MOV R4 RL7400 ;
MOVC COEBCC R7 ;
MOVC 4 X7 ; COEBCC:=4
MOD ECOCSC.X6 ;
MOV ECOPSB.X6 R0 ; COBID:='LAST EOS/EOM-BID'
MOV R0 COBID ;
JMP S4 ED6320 ; GENERATE_RR(0,BUFP)
JMPI RL7400 ; NO BINS - DON'T TRANSMIT
MOV ECRPTR R6 ;
MOV R5 R3 ;
MOV R5 R1 ; EBP:=BUFP
MOVC EOCTRR R2 ; QID:=RR
JMP S4 ED6820 ; QUEUE(EBP,QID,EBP)
JMPI RL7400 ; RETURN LINK+0
; END RR_TX.
;----------------------------------------------------------------------
ED7490: ; BEGIN TX_QUEUE'S_EMPTY.
;----------------------------------
MOVC NT% ;
(1<ECOOEP+1<ECOEBP) R0 ;
AND R0 ECOFLG.X6 ; CLEAR OFLG(OEBP)
JMP 1. X4 ; RETURN LINK+1
; END EMPTY_TX_QUEUES.
;----------------------------------------------------------------------"
;FF\f
;-----------------------------------------------------------------------
; PROCEDURE ED8100
; WRITE_OEB
;
; REGISTERS ENTRY EXIT
; R0 - EB_COUNT
; R1 - EB_TYPE/BID
; R2,R3 - DESTROYED
; R4 LINK DESTROYED
; R5 - EB_ADDR (ABS)
; R6 ECRP (REL) ECRP (REL)
; R7 - DESTROYED
;
; INPUTS: COEBCC,COEBBT,COEBPT,COEBPW
; OUTPUTS: EB (COUNT,TYPE,BID)
;
; CALL BY: ED8400
; CALL TO: ED6200
;-----------------------------------------------------------------------
ED8100: ; BEGIN WRITE_OEB
MOV R4 RL8100 ;
MOVC COEBCC R7 ;
MOV X7 R1 ;
XTR R1 7 ; COUNT:=CHA_COUNT EXTRACT 7
SLL X7 1 ;
MODC #00FF ; CHA_COUNT:=
PUT R1 X7 ; 2*CHA_COUNT AND #00FF+COUNT
MOV COEBPT R5 ; BUFP:=EB_ADDR
MOV COEBBT R2 ; TYPE:=EB_TYPE
INEP R2 BTLCB ; IF TYPE<>LCB_TYPE THEN
MOV ECONIX.X6 R1 ; BID:=ONIX
JMP ED8102 ; ELSE
; BEGIN
MOVC EBBIDX R0 ; OFFS:=EBBIDX
JMP S4 ED6200 ; READBUF(BUFP,OFFS,WORD)
SWP R1 ;
XTR R1 EOCBDX ; BID:=WORD
MOV R1 COBID ; COBID:=BID
; END
ED8102: ;
XTR R1 EOCBDX ; BID:=(BID)MOD128
SWP R1 ;
IOR R2 R1 ;
MOV COEBCC R0 ;
MOV COEBPW R3 ;
SUB XBASE R5 ;
SVS R7 ; MASK:=PSW
LDS R3 ; PSW:=EB_MASK
MOV R0 EBCNTX.X5 ; EB_COUNT:=COUNT
MOV R1 EBTABX.X5 ; EB_TYPE/BID:=TYPE/BID
LDS R7 ; PSW:=MASK
JMPI RL8100 ;
; END
;-----------------------------------------------------------------------
; PROCEDURE ED8400
; COMPOSE_OEB
;
; REGISTERS ENTRY EXIT
; R0,R1,R2,R3 - DESTROYED
; R4 LINK DESTROYED
; R5,R6,R7 - DESTROYED
;
; INPUTS: CSTPTA,CSTPTR,CSTOBQ
; OUTPUTS: COEBBC,COEBCC,COEBBT,COSMSK
;
; CALL BY: ED8500
; CALL TO: ED6200,ED8100,ED1900,GBSM,GNBA
;
; RETURNS:
; LINK - DONE
;-----------------------------------------------------------------------
; JUMP TABLE FOR EB TYPES:
;-----------------------------------------------------------------------
ED8350: ;
ED8410, ED8440, ED8430, ED8450 ;
ED8460, ED8470, ED8470, ED8420 ;
;-----------------------------------------------------------------------
ED8400: ; BEGIN COMPOSE_OEB
MOV R4 RL8400 ;
MOVC 0 R0 ;
MOV R0 COEBBT ; EB_TYPE:=UNDEF
MOV R0 COEBBC ; BUF_COUNT:=0
MOV R0 COEBCC ; CHA_COUNT:=0
MOV R0 COSMSK ; CUR_MASK:= 0
MOV CSTPTR R7 ;
MOV CSTOBQ+QCCQE.X7 R3 ;
IEQ R3 0 ; IF NOB.OBQ=0
JMPI RL8400 ; THEN RETURN
MOV CSTOBQ+QCFQE.X7 R5 ; BUFP:=FQE.OBQ
MOV R5 COEBPT ; EB_POINTER:=BUFP
MOVC BINSTA R0 ; OFFS:=BINSTA
MOVC 2#11<BINETC R1 ; MASK:=BINETC_MASK
MOVC 0 R2 ; WORD:=0
MON PUTBUF ; PUT_BUFFER(BUFP,OFFS,MASK,WORD)
MOV R3 COEBPW ; EB_PSW:=BMSA
MOVC EBCNTX R0 ; OFFS:=EBCNTX
JMP S4 ED6200 ; READBUF(BUFP,OFFS,WORD)
MOV R1 EDWRK1 ;
ED8402: ; REPEAT
MOV R5 EDWRK5 ; CURR-LAST-BUF:=BUFP
MOVC BINSTA R0 ; OFFS:=BINSTA
JMP S4 ED6200 ; READBUF(BUFP,OFFS,WORD)
MOV R1 R2 ;
MOV R1 R0 ; CAUSE:=WORD
XTR R1 BINCNX ;
MOVC COEBCC R4 ;
ADD R1 X4 ; CHA_COUNT:=CHA_COUNT+COUNT
MOVC COEBBC R4 ;
INC 0. X4 ; BUF_COUNT:=BUF_COUNT+1
SRL R0 BINTCS ;
XTR R0 BINTCX ; CAUSE:=BUF_TCS RIGHT_ADJUST
MOD R0 ;
JMPI S4 ED8350 ; CASE CAUSE OF
; NO_EOB:
ED8410: ; BEGIN
MON GNBA ; GET_NEXT(BUFP,MASK)
JMPI RL8400 &; NO_NEXT, RETURN
JMP ED8402 ; GOTO REPEAT
; END
; EOB:
ED8420: ; BEGIN
MOVC BTD R0 ; TYPE:=D_TYPE
MOVC 1<ECOFUL R1 ; TERM:=EOB
JMP ED8480 ; GOTO EXIT_REPEAT
; END
; EOS:
ED8430: ; BEGIN
MOVC BTEOS R0 ; TYPE:=EOS_TYPE
MODC 1<ECOFUL ;
MOVC 1<ECOEOS+1<ECOESM R1 ; TERM:=EOS
JMP ED8480 ; GOTO EXIT_REPEAT
; END
; EOM:
ED8440: ; BEGIN
MOVC BTEOM R0 ; TYPE:=EOM_TYPE
MOVC 1<ECOFUL+% ; TERM:=EOM
1<ECOEOM+1<ECOESM R1 ;
JMP ED8480 ; GOTO EXIT_REPEAT
; END
; EOS+EOM:
ED8450: ; BEGIN
MOVC BTEOM R0 ; TYPE:=EOM_TYPE
MOVC 1<ECOEOS+1<ECOFUL+% ; TERM:=EOS+EOM
1<ECOEOM+1<ECOESM R1 ;
JMP ED8480 ; GOTO EXIT_REPEAT
; END
; LCB:
ED8460: ; BEGIN
MOVC BTLCB R0 ; TYPE:=LCB_TYPE
MOVC 1<EOCLCB R1 ; TERM:=LCB
JMP ED8480 ; GOTO EXIT_REPEAT
; END
; UNDEFINED:
ED8470: ; BEGIN
JMPI S4 EI1990 &;E ERROR9(CPF)
JMP ED8480 ; GOTO EXIT_REPEAT
; END
; END CASE
ED8480: ; EXIT_REPEAT:
MOV ECRPTR R6 ;
MOV R0 COEBBT ; BLOCK_TYPE:=TYPE
MOV R1 COSMSK ; TERM_MASK:=TERM
IBZ R1 ECOESM ; IF EOS/EOM BLOCK THEN
JMP ED8484 ; BEGIN
MOV EDWRK1 R1 ;
MOV R1 R0 ;
XTR R1 MSSEQX ; SEQN:=FRAME_FIELD_SEQ_NO
SWP R0 ;
XTR R0 CSTBLX ;
MOV R0 ECOCCB.X6 ; OCCB.ECRP:=BUF_BLK_SIZE
MOV COEBBC R3 ;
IEQ R3 1 ; IF BUF_COUNT<>1 THEN
JMP ED8482 ; BEGIN
MOV EDWRK5 R5 ; BUFP:=LAST-BUF
MOVC BINOSQ R0 ; OFFS:=BINOSQ
JMP S4 ED6200 ; READBUF(BUFP,OFFS,WORD)
XTR R1 MSSEQX ; SEQN:=WORD EXTR MSSEQX
; END
ED8482: ;
MOD ECOCSC.X6 ;
MOV R1 ECOS1S.X6 ; (OS1S+(OCSC)).ECRP:=SEQN
; END
ED8484: ; TERMINATE_EB:
JMP S4 ED8100 ; WRITE_OEB(COUNT,TYPE,BID)
MOV COEBBC R3 ; N:=BUF_COUNT
MOD CSTPTA ;
MOVC CSTOBQ R4 ; QCB:=OBQ
MON LNOQ ; DEQUEUE(QCB,N,FBUF,LBUF)
JMPI S4 EI1990 &;E ERROR9(CPF)
JMPI RL8400 ; RETURN
; END
;----------------------------------------------------------------------
; EXTERNAL NAMES
;
;-----------------------------------------------------------------------
BEGIN
EXTERNAL ED6420,ED6440,ED6520
EXTERNAL ED7040,ED7050,ED7060,ED7070,ED7080
EXTERNAL ED7110,ED7120,ED7130,ED7140,ED7150,ED7160,ED7170,ED7190
EXTERNAL ED7200,ED7290
EXTERNAL ED8400
NAMES
END
;-----------------------------------------------------------------------
;
; END OF EDC OUTPUT PROGRAM SECTION
;
;-----------------------------------------------------------------------
END
«eof»