DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 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»