ASMB,Q,C HED DVG67 RTE 12889 BISYNC DRIVER * (C) HEWLETT-PACKARD NAM DVG67,0,0 91750-16108 REV.2013 800519 MEF: 3000 HSI LINK SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 ENT IG67,CG67 EXT $CGRN SPC 1 UNL NEXT 5 LINES ARE FOR PRODUCTION ENGINEERING * NAME: DVG67 *SOURCE: 91750-18108 * RELOC: 91750-16108 * PGMR: DMT LST ************************** DVG67 ************************** * * * SOURCE: 91750-18108 * * * * BINARY: 91750-16108 * * * * TOM KEANE * * * * JUNE 24, 1976 * * * *********************************************************** * * * MODIFIED BY DMT BEGINNING 5/29/79 TO REMOVE UNUSED CODE * * AND MAKE THE COMMENTS READABLE. * * * *********************************************************** SPC 2 A EQU 0 B EQU 1 SC EQU 0 CHAN EQU 1673B SPC 1 * THE FOLLOWING DRIVER WAS WRITTEN FOR A DOS III * * PHYSICAL LEVEL DRIVER. * * RTE EQT TABLE AND INTERNAL STORAGE NAME EQT01 EQU 1660B EQT04 EQU 1663B STAT1 EQT05 EQU 1664B STAT2 EQT06 EQU 1665B CONWD EQT07 EQU 1666B PARM1 EQT08 EQU 1667B PARM2 EQT09 EQU 1670B EQT13 EQU 1772B TRLOG EQT15 EQU 1774B SKP **************************************************** * * * CONTINUATOR SECTION * * * **************************************************** * MODIFIED TO CHECK FOR SPURIOUS INTERRUPT BY DMT (7/11/78) CG67 NOP LDB EQT01,I SPURIOUS SZB,RSS INTERRUPT? JMP SPURI YES--IGNORE. SPRTN CLB ZERO RETURN STB SAVA CODE. STA SCODE SAVE SELECT CODE. JSB INTON TEST INTERRUPT SYSTEM. CLA,INA SET RETURN STA RTX FLAG. LDA EQT04,I WAS IT ALF TIMER SSA,RSS INTERRUPT? JMP WEND NO. LDA EQT04,I YES. RESET AND PAROF TIMER STA EQT04,I BIT. JMP LTIM JUMP TO TIMER ROUTINE. * WEND LDB LSIT GET TABLE BASE. JMP LSWCH GO PROCESS. SPC 2 * SPURIOUS INTERRUPT-- SPURI LDB SWORD IF WE'RE EXPECTING SZB AN ENQ, JMP SPRTN NOT SPURIOUS. SPUR2 STB EQT15,I ZERO TIME-OUT CLOCK WORD. * * KEEP LONG-TERM COUNT FOR # OF SPURIOUS INTERRUPTS * IN UNUSED "# ERROR-FREE MSGS RECEIVED" EQT EXTENSION WORD. * LDB P03$ BUMP JSB BUMP STATISTIC. ISZ CG67 MAKE A JMP CG67,I CONTINUATION RETURN. SKP **************************************************** * * * INITIATOR SECTION * * * **************************************************** IG67 NOP CLB STB RTX CLEAR RETURN FLAG. STB SAVA ZERO RETURN CODE. STA SCODE SAVE SELECT CODE. JSB INTON TEST INTERRUPT SYSTEM. LDA EQT09,I GET REQUEST. AND MASK1 ISOLATE FUNCTION AND REQUEST. CPA INCD INITIALIZE REQUEST? JMP I.67B YES. AND MASK2 CPA B4400 CLEAR REQUEST? JMP I.67A YES. LDB EXTSN SZB LOGICAL LINKAGE PRESENT? JMP I.67A YES. CLA,INA NO. INVALID REQUEST. STA SAVA RETURN TO JMP RTRN SYSTEM. * * HANDLE INITIALIZE REQUEST I.67B LDB EQT07,I GET EXTENSION ADDRESS. STB EXTSN LINK WITH LOGICAL. * SET UP POINTERS INTO EQT EXTENSION LDA B,I GET CONTENTS OF D$EQT STA TRLWA & STORE AS LAST TRACE ENTRY. INB STB TSBTS TEST BITS LDA B,I GET CONTENTS. AND N64$ MASK OUT PARITY & CHAR SIZE. IOR P08$ SPEC NO PARITY & 8-BIT BYTE. STA B,I STORE. ADB P02$ STB NTRY NUMBER OF RETRIES INB STB NLTO # OF 3-SECS IN LONG T/O INB STB PRVAC PREV & CURRENT ACTIONS INB STB PRVST PREV-1 & PREV STATES INB STB ENVIR ENVIRONMENT LDA B,I GET CONTENTS. IOR BIT14 SET "ASCII" BIT. STA B,I STORE. INB STB LTCS LONG-TERM COMM STATISTCS ADB P11$ STB TRNEW ADDR OF NEWST TRACE NTRY INB STB TROLD ADDR OF OLDST TRACE NTRY INB STB TRFWA TRACE TABLE 1ST WORD STB TROLD,I INITIALIZE OLDEST AND STB TRNEW,I NEWEST ADDRESSES. INB STB TRFWA,I START FIRST ENTRY. * CLA STA STAT2 CLEAR LINE STATE STA CONWD AND TEST BITS. * I.67A LDB EQT05,I SET UP STB STAT1 INTERNAL LDB EQT07,I EQT STB PARM1 VALUES. LDB EQT08,I STB PARM2 LDB EQT13,I STB TRLOG LDA CONWD GET DMA AND DMAMF CHANNEL IOR DMAA AND LDB CHAN SET SLB ALLOCATED IOR DMAM FLAG. STA CONWD LDA STAT1 SET AND LBYT$ STATUS STA STAT1 TO ZERO. LDA SCODE GET SELECT CODE. JSB SETIO SET I/O INSTRUCTIONS. LDA EQT09,I GET CONTROL WORD. AND MASK2 ISOLATE FUNCTION CODE. CPA B4400 CLEAR REQUEST? JMP C0 YES. LDA EQT06,I GET CURRENT I/O WORD. AND B17$ ISOLATE BITS 0-3. CPA P02$ WRITE OR CONTROL REQUEST? JMP TWOPR YES. CHECK OPTIONAL PARAM. * CPA P01$ READ REQUEST? JMP READR YES. ISZ SAVA INDICATE ERROR JMP RTRN AND RETURN TO SYSTEM. * * BECAUSE RTE CONTROL REQUESTS CANNOT PASS ENOUGH PARAMETERS, * SOME WRITE REQUESTS MAY ACTUALLY BE CONTROL REQUESTS. * TWOPR LDA EQT09,I GET OPTIONAL PARAMETER. AND N64$ REMOVE LOGICAL UNIT. IOR P02$ INSERT REQUEST CODE. STA EQT06,I STORE IN CONTROL WORD. AND BIT14 IF BIT 14 IS SET, SZA IT'S A CONTROL JMP CONTL REQUEST. SPC 2 **************************************************** * * * WRITE REQUEST INITIATION * * * **************************************************** STA SWORD CLEAR "WAITING FOR ENQ" FLAG. JSB SLCW CALL LOGICAL WRITE (HSLC). JMP DONE COMPLETION RETURN. JSB SETMR CONTINUATION RETURN. JMP RTRN RETURN TO SYSTEM. SPC 4 **************************************************** * * * READ REQUEST INITIATION * * * **************************************************** READR LDA EQT09,I GET CONTROL WORD. AND N64$ REMOVE LOGICAL UNIT. IOR P01$ INSERT REQUEST CODE. STA EQT06,I STORE CONROL WORD TO SYSTEM. AND MASK2 IS IT THE CPA B4500 SPECIAL READ? JMP SPECR YES. * CLA,INA JSB SLCR CALL LOGICAL READ (HSLC). JMP DONE COMPLETION RETURN. JSB SETMR CONTINUATION RETURN. JMP RTRN RETURN TO SYSTEM. * SPECR STA SWORD SET SPECIAL CASE. LDA PARM1,I GET RN PARAMETER. STA RNUMB STORE. JSB RDMA INHIBIT DMA INTERRUPTS. LDA IO05A START STA STDMA INSTRUCTION. LDA RECV LINE STATE STA STAT2 EQUALS RECEIVE. JSB READP ENABLE INTERFACE. JMP DONE1 IMMEDIATE COMPLETION. SKP **************************************************** * * * CONTROL REQUEST INITIATION * * * **************************************************** CONTL LDA EQT06,I CURRENT I/O WORD. XOR CONOF SET BIT 14 OFF, 1 ON. STA EQT06,I RESTORE SYSTEM CONTROL WORD. CLA JSB SLCC CALL LOGICAL CONTROL (HSLC). JMP DONE1 COMPLETION RETURN. LDA EQT06,I GET CONTROL WORD. ALF,ALF ISOLATE RAL,RAL FUNCTION AND B77$ CODE. ADA N04$ FUNCTION LESS SSA,RSS THAN FIVE? JMP CNTL1 NO. INVALID. ADA CNTLT YES. CALCULATE LDA A,I TABLE ADDRESS. JMP A,I PROCESS BY FUNCTION CODE. SPC 1 * INVALID REQUEST CNTL1 ISZ STAT1 INDICATE INVALID JMP DONE1 REQUEST AND RETURN. SPC 3 *--------------------------------------------------+ * CONTROL TRANSFER TABLE ! *--------------------------------------------------+ DEF C0 CLEAR DEF DONE1 INITIALIZE(NO ADDITIONAL PROCESS) DEF C2 LINE OPEN DEF C3 LINE CLOSE CNTLT DEF * SPC 1 *--------------------------------------------------+ * CLEAR REQUEST ! *--------------------------------------------------+ C0 JSB CLC.C CLEAR INTERFACE. JSB RDMA RELEASE DMA. CLA BREAK STA EXTSN LINKAGE. LDA IDLE LINE STATE STA STAT2 EQUALS IDLE. JMP DONE1 RETURN. SPC 1 *--------------------------------------------------+ * LINE OPEN REQUEST ! *--------------------------------------------------+ C2 LDA TSBTS,I GET TEST BITS. RAL PRIMARY SSA STATION? JSB SETBT YES. SET INDICATOR. LDA AOPEN LINE STATE STA STAT2 EQUALS OPEN. JMP DONE1 RETURN. * SETBT NOP LDA CONWD GET TEST BITS. IOR BIT10 SET PRIMARY STATION. STA CONWD STORE WORD. JMP SETBT,I SPC 1 *--------------------------------------------------+ * LINE CLOSE REQUEST ! *--------------------------------------------------+ C3 JSB CLC.C CLEAR INTERFACE. JSB RDMA RELEASE DMA. LDA CLOSE LINE STATE STA STAT2 EQUALS CLOSED. JMP DONE1 RETURN. SPC 3 ******************************************************** * * * ENTER HERE IF HSLC INDICATED COMPLETION FROM READ, * * WRITE, OR CONTROL INITIATION. (P+1 RETURN) * * * ******************************************************** * DONE LDA IDLE SET LINE STATE STA STAT2 TO IDLE. LDA RTX IF FROM INITIATOR, SZA DO IMMEDIATE COMPLETION. JMP RTRN * DONE1 LDA P04$ INDICATE IMMEDIATE STA SAVA COMPLETION. JMP RTRN RETURN TO SYSTEM. SKP ************************************************ * * * LOGICAL TIMER * * * ************************************************ LTIM LDB LSTT GET TABLE BASE. * LSWCH ADB STAT2 PROCESS LDB B,I BY LINE JMP B,I STATE. SPC 2 *--------------------------------------------------+ * LOGICAL STATE TABLE FOR TIMER ! *--------------------------------------------------+ LSTT DEF *+1 DEF RTRN 0-CLOSED DEF RTRN 1-AWAITING OPEN DEF RTRN 2-IDLE DEF LSTC 3-RECEIVE DEF LSTD 4-CONTROL DEF LSTE 5-SEND DEF LSTE 6-SEND TO RECEIVE SPC 2 *--------------------------------------------------+ * LOGICAL STATE TABLE FOR CONTINUATION ! *--------------------------------------------------+ LSIT DEF *+1 DEF RTRN 0-CLOSED DEF RTRN 1-AWAITING OPEN DEF RTRN 2-IDLE DEF LSIC 3-RECEIVE DEF LSID 4-CONTROL DEF LSIE 5-SEND DEF LSIF 6-SEND TO RECEIVE SKP **************************************************** * * * SET UP I/O INSTRUCTIONS * * * **************************************************** SETIO NOP ADA ISTCC FORM STC INSTRUCTION STA IO07 STA IO08 STA IO09 STA IO10 ADA ICLCC FORM CLC INSTRUCTION STA XIO02 ADA IOTA FORM OTA INSTRUCTION STA XIO03 ADA ILIA FORM LIA INSTRUCTION STA XIO05 ADA ISTF FORM STF INSTRUCTION STA IO06 * * CONFIGURE DMA LOW SC INSTRUCTIONS * LDB P02$ LDA CONWD AND DMAM SZA INB ADB ISTCC STB IO02 ADB ICLCC STB IO00 ADB IOTA STB IO01 STB IO03 ADB ILIA STB IO15 * * CONFIGURE DMA HI SC INSTRUCTIONS * ADB .ISTC STB IO05 ADB ICLCC STB IO05A STB IO05B ADB IOTA STB IO04 ADB ISTF0 STB IO13 STB IO14 JMP SETIO,I SKP **************************************************** * * * SET RTE TIMER * * * * B=TIME (CENTISECONDS) * * <0-INITIATE/UPDATE VALUE * * =0-NO REQUEST * * >0-CANCEL REQUEST * * * **************************************************** SETMR NOP STB EQT15,I STORE TIMER COUNT. LDA EQT04,I TELL SYSTEM IOR BIT12 WE WILL SERVICE STA EQT04,I TIMER INTERRUPTS. JMP SETMR,I RETURN. SPC 2 **************************************************** * * * START READ * * * * A-REG = ADDRESS, B-REG = BYTE COUNT * * * **************************************************** HREC NOP STA ADDR STORE OFF STB LNGTH PARAMETERS. LDB HREC,I GET TIMER PARAMETER. ISZ HREC IF TIMER REQUESTED, SZB JSB SETMR GO SET IT. LDA RECV LINE STATE STA STAT2 EQUALS RECEIVE. JSB RDMA RELEASE DMA. LDA ADDR GET BOTH LDB LNGTH PARAMETERS. BRS CHANGE BYTES TO WORDS. IOR BIT15 SET INPUT. JSB INDMA SET UP DMA. SZB,RSS DO NOT START JMP NONDM IF LENGTH = 0. LDA IO05 FOR DMA STA STDMA TRANSFER LDA CONWD SET BIT INDICATING IOR DMAA WE ARE USING STA CONWD DMA. LDA IO05A STA STDMA+1 JMP DMARD * NONDM JSB RDMA INHIBIT DMA INTERRUPTS. LDA IO05A START INSTRUCTION. STA STDMA * DMARD JSB READP LDA SWORD SPECIAL SZA,RSS CASE? JMP CRTN CONTINUATION RETURN TO SYSTEM. CLA RESET STA SWORD SPECIAL CASE FLAG. LDA EBIT EOT SZA,RSS RECEIVED? JMP ENQR NO. FAKE ENQ. CLA YES. CLEAR STA EBIT TEST WORD. JMP EOTR FAKE EOT. SPC 1 INDMA NOP IO00 CLC DMAL,C INITIALIZE DMA ROUTINE. IO01 OTA DMAL SET ADDRESS. IO02 STC DMAL,C LDA B SET COUNT. IO03 OTA DMAL LDA SCODE SET SELECT CODE. IO04 OTA DMAH JMP INDMA,I RETURN. SPC 2 **************************************************** * * * START WRITE * * * * A-REG = ADDRESS, B-REG = BYTE COUNT * * * **************************************************** HSND NOP STA ADDR STORE STB LNGTH PARAMETERS. LDB HSND,I TIMER ISZ HSND PARAMETER? SZB JSB SETMR YES. SET TIME. LDA SEND LINE STATE STA STAT2 EQUALS SEND. IO07 STC SC,C SET INTERFACE CONTROL WORD. LDA TCWD1 JSB OTA JSB RDMA RELEASE DMA. LDA ADDR INITIALIZE DMA LDB LNGTH AND SET STB TRLOG XLOG. BRS CHANGE BYTES TO WORDS. JSB INDMA INITIALIZE DMA. SZB,RSS DO NOT START JMP NODMW IF LENGTH = 0. LDA CONWD SET BIT INDICATING IOR DMAA WE ARE USING STA CONWD DMA. IO05 STC DMAH,C START DMA. IO05A CLC DMAH,C IO06 STF SC START TRANSFER. JMP CRTN CONTINUATION RETURN TO SYSTEM. * NODMW JSB RDMA INHIBIT DMA INTERRUPTS. JMP IO05A RETURN. SPC 3 **************************************************** * * * WRITE ONE WORD OUT * * CONTROL REQUEST * * * **************************************************** HCONT NOP STA ADDR STORE ISZ HCONT PARAMETER. LDA CNTRR LINE STATE STA STAT2 EQUALS CONTROL. JSB RDMA INHIBIT DMA INTERRUPTS. IO10 STC SC,C SET INTERFACE CONTROL WORD. LDA TCWD5 JSB OTA LDA ADDR,I GET CHARACTER. JSB OTA JMP CRTN CONTINUATION RETURN TO SYSTEM. SPC 2 *--------------------------------------------------+ * CONTROL INTERRUPT ! *--------------------------------------------------+ LSID CLA,RSS NORMAL COMPLETION. * LSTD LDA P15$ TIMEOUT. JMP HCONT,I RETURN TO LOGICAL. SPC 2 *--------------------------------------------------+ * SEND INTERRUPT ! * WRITE END OF TEXT ! *--------------------------------------------------+ LSIE JSB RDMA RELEASE DMA. LDA TCWD3 END OF TEXT. JSB CLC.C SEND ETX. JSB OTA LDA TRLOG MODIFY CMA,INA AND B17$ ETX ALF,ALF BY ALF BYTE IOR ETX COUNT. JSB OTA JSB WAIT LDA TCWD4 SEND CRC. JSB CLC.C JSB OTA JSB OTA DUMMY WORD. JSB WAIT LDA S2R LINE STATE EQUALS STA STAT2 SEND TO RECEIVE. LDA IO05A INHIBIT DMA. STA STDMA START INSTRUCTION. JSB READP READ GARBAGE CHARACTER. LSIF CLA RETURN TO CLB LOGICAL. JMP HSND,I COMPLETION. * LSTE LDA P15$ TIMEOUT. JMP HSND,I RETURN TO LOGICAL. SPC 1 * WAIT NOP SUBROUTINE TO WAIT LDA DELAY SEVERAL MICRO-SECONDS CHK SLA,RAR SO HP3000 WON'T JMP WAIT,I MISS ANY DATA. JMP *+1,I DEF CHK SPC 2 *--------------------------------------------------+ * ENABLE INTERFACE TO READ ! *--------------------------------------------------+ READP NOP LDA RCWD1 SET CONTROL WORD. JSB CLC.C JSB OTA JSB LIA READ 1 OR 2 JSB LIA DATA WORDS. IO08 STC SC,C SET CONTROL, CLEAR FLAG, JSB LIA AND CLEAR THE STATUS WORD. STDMA NOP [OVERLAY WITH START DMA INST.] NOP [OVERLAY WITH CLC DMAH.] CLA CLEAR THE START DMA INST. STA STDMA STA STDMA+1 JMP READP,I RETURN TO CALLER. SPC 2 *--------------------------------------------------+ * PROCESS END OF TEXT ! *--------------------------------------------------+ PETX EQU * IO14 STF DMAH INHIBIT DMA XFERS. IO15 LIA DMAL GET CHARACTER COUNT. STA MOD16 SAVE IT. JSB WAIT WAIT FOR HP 3000. JSB CLC.C READ STATUS JSB LIA WORD. JSB LIA READ CRC WORD. LDA TCWD4 TRANSMIT JSB CLC.C CRC JSB OTA TO JSB OTA CHECK IT. JSB WAIT JSB CLC.C READ STATUS & JSB LIA CHECK AND P02$ ERROR SZA BITS. JMP BTEXT CRC ERROR. LDA MOD16 CHECK MODULO COUNT. LDB LNGTH NEGATIVE BYTE COUNT. CMB,INB MAKE IT POSITIVE BRS WORDS. STB LNGTH ADA LNGTH ADD WORD COUNT. ALS MAKE POSITIVE BYTES. STA TRLOG STORE IN XMISSION LOG. ALF,ALF ALF XOR XTE AND NIB3 MASK FOR ERROR. SZA JMP BTEX1 JSB RDMA RELEASE DMA. LDA P10$ GOOD TEXT. JMP HREC,I RETURN TO LOGICAL. * BTEXT LDA P11$ CRC ERROR. JMP LRTN RETURN TO LOGICAL. * * BTEX1 LDA P12$ TEXT UNDERRUN. JMP LRTN RETURN TO LOGICAL. SPC 2 *-----------------------------------------------------+ * RECEIVE INTERRUPT ! *-----------------------------------------------------+ LSIC LDA SCODE ADA N08$ IGNORE SSA DMA JMP CRTN INTERRUPTS. JSB CLC.C READ INTERRUPT. JSB LIA TAG1 WORD? SLA NO, JUST DATA WORD. JMP RTAG1 YES. WENDC STC SC,C REENABLE INTERFACE. JSB LIA JSB LIA JMP CRTN CONTINUATION RETURN TO SYSTEM. * RTAG1 JSB LIA LOAD TAG1 WORD. STA XTE SAVE CHARACTER. AND MASK0 CLEAR HI-ORDER BIT. CPA ACK0 CHARACTER = JMP ACK0R ACK0 CPA ENQ CHARACTER = JMP ENQR ENQ CPA EOT CHARACTER = JMP EOTR EOT CPA ACK1 CHARACTER = JMP ACK1R ACK1 CPA WACK CHARACTER = JMP WACKR WACK CPA RVI CHARACTER = JMP RVIR RVI CPA NAK CHARACTER = JMP NAKR NAK CPA DEOT CHARACTERS = JMP DEOTR DLE EOT CPA TTD CHARACTERS = JMP TTDR STX ENQ/ABORTED TEXT AND MASK1 HI-ORDER BITS. CPA ETX CHARACTER = JMP PETX ETX/PROCESS CRC JMP BTEXT NO RECOGNIZABLE CHARACTERS. XTE OCT 0 IO09 EQU WENDC SPC 1 ACK0R CLA,INA JMP LRTN SPC 1 ACK1R LDA P02$ JMP LRTN SPC 1 WACKR LDB P10$ BUMP WACK/TTD JSB BUMP LONG-TERM STAT. LDA P03$ JMP LRTN SPC 1 RVIR LDA P04$ JMP LRTN SPC 1 ENQR LDA P05$ LDB SWORD WAITING FOR SZB,RSS LINE BID? JMP HREC,I NO. TAKE LOGICAL RETURN. JMP SCASE YES. SPECIAL CASE. SPC 1 NAKR LDB P05$ BUMP NAK JSB BUMP LONG-TERM STAT. LDA P06$ JMP LRTN SPC 1 EOTR LDA P07$ LDB SWORD WAITING FOR SZB,RSS LINE BID? JMP HREC,I NO. TAKE LOGICAL RETURN. STA EBIT SET EOT RECEIVED. * SCASE LDA RNUMB UNLOCK RN. JSB $CGRN CLA,INA STA TRLOG JMP CRTN CONTINUATION RETURN TO SYSTEM. SPC 1 DEOTR LDA P08$ JMP LRTN SPC 1 TTDR LDA P09$ JMP LRTN SPC 2 LSTC LDA P15$ TIMEOUT. JMP HREC,I RETURN TO LOGICAL. SPC 3 * IF DVG67 WAS IN "SPECIAL READ" STATE (WAITING FOR LINE BID) AND * SOMETHING OTHER THAN ENQ OR EOT CAME DOWN THE LINE, HANDLE AS A * SPURIOUS INTERRUPT. OTHERWISE RETURN TO LOGICAL DRIVER. * LRTN LDB SWORD WAS DRIVER WAITING SZB,RSS FOR LINE BID (ENQ)? JMP HREC,I NO. RETURN TO LOGICAL. CLB YES. TREAT AS A JMP SPUR2 SPURIOUS INTERRUPT. SKP ******************************************************* * * * INTERFACE COMMANDS * * * ******************************************************* CLC.C NOP XIO02 CLC SC,C JMP CLC.C,I SPC 1 OTA NOP XIO03 OTA SC JMP OTA,I SPC 1 LIA NOP XIO05 LIA SC JMP LIA,I SPC 4 **************************************************** * * * COMMON RETURN * * * **************************************************** * * CONTINUATION RETURN AT CRTN; COMPLETION AT RTRN * CRTN ISZ CG67 INCREMENT FOR CONTINUATION. * RTRN LDA STAT1 GET SLC STATUS. STA EQT05,I LDB TRLOG GET TRANSMISSION LOG. LDA RTX DETERMINE SZA,RSS RETURN TYPE. JMP RTRN1 IG67. * LDA SAVA COMPLETION STATUS. ISZ IFLAG IF INTERRUPT SYSTEM ON, STF 0 ENABLE INTERRUPTS. JMP CG67,I RETURN TO SYSTEM. * RTRN1 LDA SAVA ISZ IFLAG STF 0 JMP IG67,I SKP * SUBROUTINE TO BUMP LONG-TERM STATISTIC. * CALLING SEQUENCE: LDB * JSB BUMP * BUMP NOP ENTRY. ADB LTCS ADD BASE ADDRESS. ISZ B,I BUMP IT. NOP IN CASE OF ROLL-OVER. JMP BUMP,I RETURN. SPC 4 * * SET "INTERRUPT ON" FLAG * INTON NOP CCB ASSUME ON. SFC 0 IF NOT, CLB USE 0. STB IFLAG STORE INTERRUPT FLAG. JMP INTON,I SPC 2 * * DMA IS NOT REQUIRED. INHIBIT IT. * RDMA NOP LDA CONWD CLEAR DMA AND DMAA IF CHANNEL SZA,RSS IS JMP RDMA1 ALLOCATED. IO05B CLC DMAH,C IO13 STF DMAH RDMA1 LDA CONWD AND DMAMF STA CONWD JMP RDMA,I SKP **************************************************** * * * STORAGE & CONATANTS * * * **************************************************** SPC 1 * INTERNAL EQT VALUES. * STAT1 NOP STATUS STAT2 NOP LINE STATE CONWD NOP I/F CONTROL WORD PARM1 NOP PARAMETER 1 PARM2 NOP PARAMETER 2 TRLOG NOP TRANSMISSION LOG * EXTSN NOP EXTENSION LINK TSBTS NOP BOARD PARAMETERS ADDR NOP ADDR PARAMETER FOR HREC, HSND & HCONT LNGTH NOP LENGTH PARAMETER FOR HREC, HSND & GTEXT SPC 2 EBIT NOP IFLAG NOP MOD16 NOP RNUMB NOP RTX NOP SAVA NOP SCODE NOP SWORD NOP SPC 2 N04$ DEC -4 N08$ DEC -8 N64$ DEC -64 P00$ DEC 0 P01$ DEC 1 P02$ DEC 2 P03$ DEC 3 P04$ DEC 4 P05$ DEC 5 P06$ DEC 6 P07$ DEC 7 P08$ DEC 8 P09$ DEC 9 P10$ DEC 10 P11$ DEC 11 P12$ DEC 12 P15$ DEC 15 P67$ DEC 67 B17$ EQU P15$ B77$ OCT 77 B4400 OCT 4400 B4500 OCT 4500 LBYT$ OCT 177400 BIT15 OCT 100000 BIT14 OCT 40000 BIT12 OCT 10000 BIT11 OCT 4000 BIT10 OCT 2000 BIT9 OCT 1000 BIT6 OCT 100 AOPEN EQU P01$ CLOSE EQU P00$ CNTRR EQU P04$ CONOF OCT 40001 DELAY EQU BIT15 DMAA EQU BIT9 DMAMF OCT 172777 DMAM EQU BIT11 DMAL EQU 0 DMAH EQU 0 ETX OCT 1775 ICLCC EQU BIT11 IDLE EQU P02$ ILIA EQU N64$ IOTA OCT 172700 INCD EQU P67$ ISTCC OCT 103700 .ISTC OCT 1204 ISTF EQU LBYT$ ISTF0 OCT 177300 MASK0 OCT 77777 MASK1 OCT 7777 MASK2 OCT 7700 NIB3 OCT 170000 PAROF OCT 173777 RECV EQU P03$ RCWD1 OCT 2404 SEND EQU P05$ S2R EQU P06$ TCWD1 EQU P04$ TCWD3 EQU BIT6 TCWD4 EQU BIT11 TCWD5 EQU BIT6 SKP ******************************************************* * * * * * BEGINNING OF OLD HSLC CODE. * * * * MODIFIED BY DMT ON MAY 30, 1978 TO REMOVE UNUSED * * CODE, MOSTLY IN THESE AREAS * * EBCDIC CHARACTER HANDLING * * LCR BLOCK CHECK (CRC ONLY IS USED) * * ID SEQUENCE CHECKING/SENDING * * CHARACTER CHECK UPON RETURN FROM DRIVER * * * * FURTHER CLEANUP DONE ONE YEAR LATER. * * * ******************************************************* SPC 2 * * SLC (HSI VERSION) * TOM KEANE * JULY 1, 1975 * SKP * SLC CONTROL ROUTINE FOR LOGICAL DRIVER * SLCC NOP LDB SLCC GET RETURN ADDRESS JSB SETUP SET UP RETURN ADDR & PTRS LDB B300 SPECIFY CONTROL: REQ CODE OFFSET JSB TRAIN GET FUNCTION & INIT TRACE ENTRY CPA P01$ INITIALIZE? JMP CF01 YES CPA P02$ LINE OPEN? JMP CF02 YES CPA P03$ LINE CLOSE? JMP CF02 YES ADA M32 SUBTRACT OCT 40 FROM FUNCTION CPA P02$ CHANGE ERROR RECOVERY PARAMS? JMP CF42 YES CPA P03$ ZERO THE LONG TERM STATISTICS? JMP CF43 YES SSA,RSS FUNCTION BELOW 40? JMP SLCER NO,ERROR CLA YES CLB JMP PRET,I LET PHYSICAL (P+2) LOOK AT FUNCT * CF01 CLA SET STATE = 0 (UNOPENED) STA STATE * ------------------------------------------------- * COMPLETE "CONTINUATION" RETURN TO PHYSICAL * SLCPC LDA PRET SPECIFY CONTINUATION CLB & COMP STATUS = 0 = OK JMP SLCXT+2 * ------------------------------------------------- CF02 ADA M2 GET EVENT NO. (0 OR 1) JMP SEA GO TO STATE-EVENT-ACTION CIRCLE CF42 LDA EQT07,I GET SPECIFIED # LDA A,I CMA,INA MAKE NEGATIVE STA NTRY,I AND SAVE LDA EQT08,I GET # OF 3-SEC PERIODS IN LTO CMA,INA MAKE NEG STA NLTO,I & SAVE JMP SLCXT EXIT WITH STATUS =OK CF43 JSB ZSTAT ZERO THE LONG TERM STATISTICS JMP SLCXT EXIT WITH STATUS =OK * SLCER CLB,INB COMP STATUS =INVALID REQUEST =1 JMP SLCXT+1 * ------------------------------------------------- * COMPLETION RETURN TO PHYSICAL * SLCXT CLB COMPLETION STATUS =OK =0 LDA PRETF SPECIFY COMPLETION STA PRETV & SET UP RETURN LDA MPFLS AND M3 CLEAR SEND-CONTINUE FLAG (BIT 1) STA MPFLS LDA STAT1 AND HFF00 MASK OUT OLD COMP STATUS IOR B & PUT NEW ONE LDB BLKSP PLUS THE BLOCK SPEC BITS BLF (MOVED TO BITS 7-5) RBL,RBL SLB,RSS IS THIS A WRITE REQ? IOR B NO, PUT BLK SPEC INTO STATUS STA STAT1 RIGHT HALF OF EQT 4 * ------------------------------------------------- * ROUTINE TO COMPLETE TRACE TABLE ENTRY * AND B377 ALF,ALF MOVE COMPLETION STATUS TO LEFT LDB TRNEW,I B =ADDR OF CURRENT ENTRY WORD 1 JSB TRINC GET ADDR OF ENTRY WORD 2 IOR B,I MERGE IN REQUEST & FUNCTION CODE STA B,I & STORE BACK IN WORD 2 LDB TRNEW,I LDB B,I B = ADDR OF NEXT WORD TO BE FILLD STB TRTMP SAVE IT (NOW ADDR OF NEXT ENTRY) JSB TRINC GET ADDR OF WORD AFTER NEXT STB A JSB TRACE INIT WORD 1 FOR NEXT ENTRY LDB TRNEW,I B =ADDR OF CURRENT ENTRY WORD 1 LDA TRTMP A =ADDR OF NEXT ENTRY WORD 1 STA B,I RESTORE PTR TO NEXT ENTRY STA TRNEW,I & SET NEXT ENTRY =CURRENT ENTRY CLA CLB JMP PRETV,I RETURN TO PHYSICAL SPC 4 * SLC READ ROUTINE FOR LOGICAL DRIVER * SLCR NOP LDB SLCR GET RETURN ADDRESS JSB SETUP SET UP RETURN ADDR LDA NTRY,I STA RTCTR INIT RETRY CTR ISZ LTCS,I INC TOTAL # OF READ REQUESTS NOP NULL IN CASE OF ROLLOVER LDB B100 SPECIFY READ: REQ CODE OFFSET JSB TRAIN GET FUNCTION & INIT TRACE ENTRY SZA,RSS FUNCTION = 0? JMP SLCER YES,ERROR CPA P07$ FUNCTION = 7? JMP SLCER YES, ERROR INA GET EVENT NO. (2 THROUGH 7) STA CURRQ SAVE CURRENT READ REQ # JMP SEA GO TO STATE-EVENT-ACTION CIRCLE SPC 4 * SLC WRITE ROUTINE FOR LOGICAL DRIVER * SLCW NOP LDB SLCW GET RETURN ADDRESS JSB SETUP SET UP RETURN ADDR & PTRS LDA NTRY STA RTCTR INIT RETRY CTR CLB,INB B=ADDR OF WORD 1, LONG-TERM STAT JSB BUMP INC TOTAL # OF WRITE REQUESTS LDB B200 SPECIFY WRITE: REQ CODE OFFSET JSB TRAIN GET FUNCTION & INIT TRACE ENTRY ADB BIT10 SET BIT 10 TO IND WRITE STB BLKSP SAVE BLOCK SPEC BITS SLB,RSS TRANSPARENT TEXT TO BE SENT? JMP *+4 NO LDB ENVIR,I SSB LRC SPECIFIED? JMP SLCER YES, ERROR SZA,RSS FUNCTION = 0? JMP SLCER YES,ERROR ADA M7 SSA,RSS FUNCTION > 6? JMP SLCER YES, ERROR ADA P14$ GET EVENT NO. (8 THROUGH 13) JMP SEA GO TO STATE-EVENT-ACTION CIRCLE * HE000 OCT 160000 OCT 160000 SKP * STATE-EVENT-ACTION CIRCLE -- A STATE-TRANSITION PROCESSOR * * CALLING SEQUENCE: * (A) = EVENT # * (P) = JMP SEA * (A) = MESSAGE PROCESSOR FLAGS * SEA STA EVENT SAVE EVENT # LDA PRVST,I GET PREVIOUS STATES, AND B377 ISOLATE PREV-1, ALF,ALF & MOVE TO LEFT HALF LDB STATE GET CURRENT STATE (NOW PREV) IOR B MERGE IN PREV STATE STA PRVST,I ADB STADT ADD STATE TABLE BASE, GET ENTRY STB A INA LDA A,I GET ADDR OF NEXT STATE STA NEXST LDB B,I GET CLUSTER HEADER ADDR PCLUS LDA B,I GET CLUSTER HEADER INB STB CLUST SAVE ADDR OF 1ST CLUSTER WORD CLB RRR 8 A = 1ST EVENT IN CLUSTER BLF,BLF & B = -1 + LENGTH OF CLUSTER CMA,INA ADA EVENT COMPUTE REAL EVENT - 1ST EVENT SSA RESULTS NEG (EVENT BELOW CLUST)? JMP SEAER YES, ERROR STA EVOFF SAVE EVENT OFFSET CMA,INA ADA B COMPUTE CLUSTER LENGTH - OFFSET SSA RESULTS NEG (EVENT ABOVE CLUST)? JMP EVOUT YES LDB CLUST ADB EVOFF B = ADDR OF ACTION/NEXT STATE PR LDA B,I SEAF CLB RRR 8 A = ACTION INDEX BLF,BLF & B = NEXT STATE STB STATE STA CURAC SAVE ACTION LDA EVENT ALF,ALF GET WORD READY FOR TRACE TABLE: IOR B EVENT & RESULTANT STATE JSB TRACE LDA PRVAC,I AND B377 ISOLATE PREVIOUS ACTION ALF,ALF IOR CURAC MERGE IN CURRENT ACTION STA PRVAC,I & SAVE LDA CURAC ADA ACTAD A = ADDR OF APPROPRIATE ACTION: LDB A,I LDA MPFLS JMP B,I GO TO ACTION EVOUT ADB CLUST INB B = ADDR OF NEXT CLUSTER HEADER CPB NEXST ARE WE THROUGH WITH THIS STATE? JMP SEAER YES, ERROR SINCE EVENT NOT FOUND JMP PCLUS NO, PROCESS NEXT CLUSTER SEAER LDA BLOUT SET ACTION/NEXT STATE TO HANDLE JMP SEAF IMPROBABLE SITUATION * CLUST OCT 0 ADDR OF 1ST CLUSTER ENTRY CURAC OCT 0 CURRENT ACTION EVENT OCT 0 CURRENT EVENT # EVOFF OCT 0 OFFSET OF EVENT FROM CLUSTER NEXST OCT 0 ADDR OF ENTRY FOR NEXT STATE SPC 6 * SUBROUTINE SCM: SEND CONTROL MESSAGE (ID, IF ANY, HAS * BEEN SENT ALREADY) * (A) = INDEX OF MESSAGE TO BE SENT: * 0 = ENQ 5 = WACK * 1 = NAK 6 = RVI * 2 = EOT 7 = DLE EOT * 3 = ACK0 8 = TTD (STX ENQ) * 4 = ACK1 9 = SOH ENQ * SCM NOP STA SCMTP ADA ASCMA LDA A,I A = ADDR OF MESSAGE JSB HCONT NOP SZA SEND OK? JMP LOW NO, SET EVENT =LINE ERROR (LOW) LDA SCM GET RETURN FROM SCM JMP STXT4 INC # OF MESSAGES SENT SCMTP OCT 0 TEMP FOR SCM SKP * SUBROUTINE SETUP: SET UP RETURN ADDRESSES TO PHYSICAL * DRIVER & EQTX POINTERS * (A) = A-REG PASSED BY PHYSICAL * (B) = P+1 RETURN OF CURRENT SLC ROUTINE * (P) = JSB SETUP * SETUP NOP STB PRETF SAVE P+1 (COMPLETION) ADDR INB STB PRET SAVE P+2 (CONTINUATION) ADDR JMP SETUP,I RETURN SPC 4 * SUBROUTINE STXT: SEND TEXT * STXT NOP LDA MPFLS AND HFFBF CLEAR MP TIMEOUT FLAG (BIT 6) STA MPFLS CLA STA TLOG ZERO TRANSMISSION LOG LDA PARM1 A = BUFFER ADDR LDB PARM2 JSB HSND NOP NOP SZA SEND OK? JMP LOW NO, SET EVENT =LINE ERROR(LOW) LDA NLTO,I STA TOCTR RESET LONG-TIME-OUT CTR LDA MPFLS AND M3 CLEAR SEND-CONTINUE FLAG STA MPFLS LDA STXT GET RETURN FROM STXT STXT4 LDB P02$ INC # OF MESSAGES SENT; JSB BUMP WORD 3 OF LONG-TERM STAT JMP A,I RETURN HFFBF OCT 177677 REVERSE MASK BIT 6 SKP * SUBROUTINE STXCH: SEND TEXT CHARACTERS * (A) = INDEX OF MESSAGE TO BE SENT * 10 = SOH 11 = STX ) ONE CHAR * 12 = ETX 13 = ETB ) * 14 = DLE STX 15 = DLE ETX ) TWO CHAR * 16 = DLE ETB ) STXCH NOP STA SCMTP ADA ASCMA LDA A,I A = ADDR OF CHARS LDB SCMTP ADB M14 COMPUTE INDEX - 14 SSB INDEX 14 OR MORE? JMP *+3 NO LDB M3 YES: IN EITHER CASE, RSS LDB M2 B = - (1 + # OF CHARS) JMP STXCH,I RETURN SKP * SUBROUTINE TRACE: PUT WORD INTO TRACE TABLE * (A) = WORD TO BE STORED * TRACE NOP LDB TRNEW,I A =ADDR OF CURRENT ENTRY, WORD 1 LDB B,I B =ADDR OF NEXT WORD TO BE FILLD CPB TROLD,I MATCH ADDR OF OLDEST ENTRY? RSS YES JMP *+5 NO LDB B,I B =ADDR OF NEXT-TO-OLDEST ENTRY STB TROLD,I UPDATE PTR TO OLDEST ENTRY LDB TRNEW,I LDB B,I B=ADDR OF NEXT WORD TO BE FILLED STA B,I STORE WORD IN TRACE TABLE JSB TRINC GET ADDR OF NEXT WORD TO FILL LDA TRNEW,I CPB A IS NEXT WORD = CURRENT ENTRY? RSS YES, SET NEXT WORD = ENTRY START JMP *+3 JSB TRINC ADVANCE TO 2ND WORD OF ENTRY JSB TRINC ADVANCE TO 3RD WORD OF ENTRY STB A,I UPDATE WORD 1 OF CURRENT ENTRY JMP TRACE,I SPC 2 * SUBROUTINE TRAIN: GET FUNCTION & INITIALIZE TRACE ENTRY * (B) = REQUEST CODE (OFFSET 6 BITS TO LEFT) * (P) = JSB TRAIN * (A) = FUNCTION CODE * (B) = BLOCK SPEC BITS * TRAIN NOP LDA EQT06,I GET CONTROL WORD ALF,ALF & POSITION FUNCTION RAL,RAL CPB B300 IS THIS A CONTROL REQUEST? RSS YES AND P07$ ISOLATE READ/WRITE FUNCTION AND B77$ ISOLATE CONTROL FUNCTION STA TRTMP & SAVE IT IOR B MERGE IN REQUEST CODE (OFFSET) JSB TRACE STORE REQ & FUNCT IN TRACE TABLE CLA STA TLOG STA BLKSP LDA EQT06,I GET CONTROL WORD ALF POSITION BLOCK SPEC BITS AND HE000 & ISOLATE THEM RAL,RAL NOW IN BITS 1,0, & 15 STA B LDA TRTMP GET FUNCTION JMP TRAIN,I TRTMP OCT 0 TRACE TABLE TEMPORARY SKP * SUBROUTINE TRINC: INCREMENTS ADDRESS IN EVENT TRACE, * CHECKING FOR WRAPAROUND * (B) = ADDR TO BE INC * TRINC NOP CPB TRLWA IS IT LAST WORD OF TABLE? JMP *+3 YES INB JMP TRINC,I LDB TRFWA WRAPAROUND TO 1ST OF TABLE JMP TRINC,I SPC 3 * SUBROUTINE ZSTAT: ZERO LONG TERM COMM. STATISTICS * ZSTAT NOP LDA M11 STA MPCTR SET COUNTER = 11 LDA LTCS A=ADDR OF WORD 1, LONG-TERM STAT CLB ZLOOP STB A,I ZERO TABLE ENTRY INA ISZ MPCTR JMP ZLOOP JMP ZSTAT,I * MPCTR OCT 0 COUNTER SKP * CONSTANTS & STORAGE FOR MESSAGE PROCESSOR ONLY * .16 DEC 16 DEC 16, OCT 20 .20 DEC 20 DEC 20, OCT 24 .27 DEC 27 DEC 27, OCT 33 .29 DEC 29 DEC 29, OCT 35 .30 DEC 30 DEC 30, OCT 34 .31 DEC 31 DEC 31, OCT 37 .32 DEC 32 DEC 32, OCT 40, BIT 5 B200 OCT 200 OCT 200, DEC 128 B300 OCT 300 OCT 300, DEC 192 H1400 OCT 012000 LEFT HALF = DEC 20 BIT13 OCT 020000 HBFFF OCT 137777 OCT 137777, REVERSE BIT 14 HEFFF OCT 167777 OCT 167777, REVERSE BIT 12 HFF00 EQU LBYT$ M11 DEC -11 DEC -11, OCT 177765 M14 DEC -14 DEC -14, OCT 177762 M17 DEC -17 DEC -17, OCT 177757, REV BIT 4 M20 DEC -20 DEC -20, OCT 177754, OCT -24 M32 DEC -32 DEC -32, OCT 177740, OCT -40 * PRETV OCT 0 VARIABLE RETURN TO PHYSICAL * * EQT EXTENSION POINTERS * CONVL OCT 0 WRITE-CONV BUFFER LENGTH CURRQ OCT 0 CURRENT READ REQ # NLTO OCT 0 PTR TO # OF 3-SECS IN LONG TMOUT PRVAC OCT 0 PTR TO PREV ACTION: PREV,CURRENT PRVST OCT 0 PTR TO PREV STATES: PREV-1,PREV PVACK OCT 0 CODE FOR PREV ACK STATE OCT 0 MAIN SLC STATE NUMBER TOCTR OCT 0 LONG-TIMEOUT CTR CMBUF DEF *+1 ADDR OF CONTROL MESSAGE RECV BUF BSS 8 LTCS OCT 0 ADDR OF LONG-TERM COMM STATISTCS TRNEW OCT 0 ADDR OF NEWEST TRACE TABLE ENTRY TROLD OCT 0 ADDR OF OLDEST TRACE TABLE ENTRY TRFWA OCT 0 FIRST WORD ADDR OF TRACE TABLE TRLWA OCT 0 LAST WORD ADDR OF TRACE TABLE SKP * ASCII CONTROL MESSAGES -- WITH ODD PARITY * ASCM EQU * ENQ OCT 77776 ENQ 0 NAK OCT 000576 NAK 1 EOT OCT 001176 EOT 2 ACK0 OCT 002176 ACK0 3 OCT 77577 PAD PAD ACK1 OCT 004176 ACK1 4 OCT 77577 PAD PAD WACK OCT 003576 WACK 5 OCT 77577 PAD PAD RVI OCT 000376 RVI 6 OCT 77577 PAD PAD DEOT OCT 016177 EOT 7 OCT 77577 PAD PAD TTD OCT 007176 TTD 8 OCT 00605 SOH ENQ 9 OCT 00400 SOH 10 OCT 01000 STX 11 OCT 101400 ETX 12 OCT 113400 ETB 13 OCT 10002 DLE STX 14 OCT 010203 DLE ETX 15 OCT 010227 DLE ETB 16 * ASCMA DEF *+1 ASCII CONTROL MESSAGE ADDR PTR DEF ASCM ENQ 0 DEF ASCM+1 NAK DEF ASCM+2 EOT DEF ASCM+3 ACK0 DEF ASCM+5 ACK1 DEF ASCM+7 WACK DEF ASCM+9 RVI DEF ASCM+11 DLE EOT DEF ASCM+13 TTD DEF ASCM+14 SOH ENQ DEF ASCM+15 SOH 10 TEXT DEF ASCM+16 STX 11 DEF ASCM+17 ETX 12 DEF ASCM+18 ETB 13 DEF ASCM+19 DLE STX 14 DEF ASCM+20 DLE ETX 15 DEF ASCM+21 DLE ETB 16 SPC 2 SKP * ACTION DEFINITIONS * AC01 EQU 400B OPEN LINE AC02 EQU 1000B CLOSE LINE AC03 EQU 1400B SEND EOT AC04 EQU 2000B SEND EOT, RECV RESPONSE AC05 EQU 2400B SEND ENQ, RECV RESPONSE AC06 EQU 3000B SEND ENQ, RECV CONVERSATNAL TEXT AC07 EQU 3400B INC RETRY CTR & RESPONSE ERRORS AC08 EQU 4000B SEE IF PRIMARY OR SECONDARY AC09 EQU 4400B SET CONTACT FLG & POST NORM COMP AC10 EQU 5000B POST 0, NORMAL COMPLETION AC11 EQU 5400B POST 1, INVALID REQUEST AC12 EQU 6000B POST 2, REQ INCOMPATIBLE W STATE AC13 EQU 6400B POST 3, BAD ID SEQUENCE AC14 EQU 7000B POST 4, LINE ERROR AC15 EQU 7400B POST 5, EOT RECVD AC16 EQU 10000B POST 6, DLE EOT RECVD AC17 EQU 10400B POST 7, LONG TIMEOUT OCCURRED AC18 EQU 11000B POST 8, ENQ RECVD AFTER EOT SENT AC19 EQU 11400B POST 9, TEXT OVERRUN AC20 EQU 12000B POST 10, MAX # OF NAKS RECVD AC21 EQU 12400B POST 11, MAX # OF ENQS SENT AC22 EQU 13000B POST 12, RVI RECVD AC23 EQU 13400B POST 13, ENQ RECVD AFTER ENQ SENT AC24 EQU 14000B POST 14, NAK RECVD AFTER ENQ SENT AC25 EQU 14400B POST 15, MAX ENQS RECVD FRM CONV AC26 EQU 15000B POST 16, BAD RESPONSE TO TTD AC27 EQU 15400B SEND TTD, RECV RESPONSE AC28 EQU 16000B SEND TEXT, RECV RESPONSE AC29 EQU 16400B SEND TEXT, TEXT AC30 EQU 17000B CHECK RVI AC31 EQU 17400B PROCESS POSITIVE ACK AC32 EQU 20000B PROCESS SHORT TIMEOUT DURNG SEND AC33 EQU 20400B INC RETRY CTR AC34 EQU 21000B CHECK TIMEOUT & BAD RESPSE FLAGS AC35 EQU 21400B PROCESS ENQ RECVDIN WRITE STATE AC36 EQU 22000B PROCESS SHORT TIMEOUT DURNG RECV AC37 EQU 22400B CHECK READ REQUEST TYPE AC38 EQU 23000B SEND ACK, RECV TEXT AC39 EQU 23400B SEND PREV ACK, RECV TEXT AC40 EQU 24000B SEND NAK, REVV TEXT AC41 EQU 24400B RECV RESPONSE AC42 EQU 25000B RECV TEXT AC43 EQU 25400B SEND WACK, RECV RESPONSE AC44 EQU 26000B SEND RVI, RECV TEXT AC45 EQU 26400B POST 17, IMPOSSIBLE SITUATION AC46 EQU 27000B SEND DLE-EOT AC47 EQU 27400B INC MESSAGE ERRORS,RECV RESPONSE AC48 EQU 30000B TOGGLE RECV ACK FLAG AC49 EQU 30400B BCC ERROR: SEND NAK, RECV TEXT AC50 EQU 31000B SET RECV ACK, CLEAR SEND ACK FLG AC51 EQU 31400B TOGGLE SEND ACK FLAG AC52 EQU 32000B TOGGLE SEND ACK & RECV ACK FLAGS * * EVENT DEFINITIONS * EV00 EQU 0 EVENT 0: LINE OPEN REQUEST EV14 EQU AC14 EVENT 14: ACK0 RECVD EV18 EQU AC18 EVENT 18: ENQ RECEIVED EV29 EQU AC29 EVENT 29: LONG TIMEOUT EV30 EQU AC30 EVENT 30: LOW EV31 EQU AC31 EVENT 31: HIGH SPC 4 * LINE OPEN ACT1 JSB ZSTAT ZERO THE LONG TERM STATISTICS LDA M7 STA NTRY,I INIT # OF RETRIES = 7 LDA M20 STA NLTO,I INIT LONG TIMEOUT = 60 SEC CLA STA MPFLS INIT MESS PROC FLAGS JMP SLCPC CONT.RETURN TO PHYS, STATUS = OK SPC 2 * LINE CLOSE ACT2 JMP SLCPC CONT.RETURN TO PHYS, STATUS = OK SPC 2 * SEND EOT ACT3 LDA P02$ JSB SCM SEND EOT CONTROL MESSAGE LDA MPFLS AND P01$ EXCEPT FOR CONTACT-MADE FLAG, STA MPFLS INIT MESS PROC FLAGS JMP HIGH SET EVENT = HIGH (NORMAL COMPL) SPC 2 * SEND EOT, RECV RESPONSE ACT4 LDA P02$ JSB SCM SEND EOT CONTROL MESSAGE LDA MPFLS AND P01$ EXCEPT FOR CONTACT-MADE FLAG, STA MPFLS INIT MESS PROC FLAGS ACT4A LDA NLTO,I STA TOCTR RESET LONG-TIMEOUT CTR JMP ACT5B RECV RESPONSE (NO ID) SPC 2 * SEND ENQ, RECV RESPONSE ACT5 EQU * LDB ENVIR,I GET SPECIFIED ENVIRONMENT CLA SPECIFY ENQ MESSAGE BLF,SLB HASP WORKSTATION (BIT 12 =1)? LDA P09$ YES, SPECIFY SOH ENQ MESSAGE JSB SCM SEND CONTROL MESSAGE LDA PRVAC,I AND HFF00 ISOLATE PREV ACTION CPA BIT13 PREV ACTION = 32? JMP *+3 YES, BYPASS RESET LDA NLTO,I STA TOCTR RESET LONG-TIME-OUT CTR LDA ENVIR,I SLA,RSS IS STATION PRIMARY? JMP ACT5C NO LDA M270 STA NOM3 SET NOM 3-SEC TIMEOUT TO 2.7 SEC ACT5C LDA MPFLS AND M3 CLEAR SEND-CONTINUE FLAG (BIT 1) STA MPFLS ACT5A EQU * ACT5B CLE SET E = 0: DISCARD ID LDA CMBUF A = ADDR OF CONTRL MESS RECV BUF LDB M17 B = -(1 + BUF LENGTH) JSB BSCR RECEIVE CONTROL MESSAGE * ------------------------------------------------- STEM ADA .13 SET UP MOST EVENT NUMBERS CPA .27 LINE ERROR? ADA P03$ YES, CHANGE EVENT TO "LOW" JMP SEA GO TO STATE-EVENT-ACTION CIRCLE * M270 DEC -270 SPC 2 * SEND ENQ, RECEIVE CONVERSATIONAL TEXT ACT6 CLA CODE = 0 JSB SCM SEND CONTROL MESSAGE: ENQ LDA PRVAC,I AND HFF00 ISOLATE PREV ACTION CPA BIT13 PREV ACTION = 32? JMP *+3 YES, BYPASS RESET OF LTO CTR LDA NLTO,I STA TOCTR RESET LONG-TIMEOUT CTR CLA STA TLOG ZERO TRANS LOG LDA PARM1 GET REQ BUFFER ADDR LDA A,I GET LENGTH OF WRITE BUFFER ISZ PARM1 GET CORRECT POINTER LDB PARM2 GET READ BUFFER LENGTH JMP AC29A RECV CONV TEXT SPC 2 * INCREMENT RETRY CTR & NO. OF RESPONSE ERRORS ACT7 LDB P08$ SPECIFY THE 9TH LONG-TERM STAT JSB BUMP INCREMENT NO. OF RESPONSE ERRORS IOR .32 SET BAD-RESPONSE FLAG (BIT 5) STA MPFLS JMP INTRY INC RETRY CTR & GET EVENT SPC 2 * SEE IF PRIMARY OR SECONDARY ACT8 LDA ENVIR,I GET SPECIFIED ENVIRONMENT SLA,RSS IS STATION PRIMARY? JMP LOW NO, SECONDARY: SET EVENT = LOW LDA RTCTR SZA,RSS CTR =0? JMP LOW YES ISZ RTCTR YES; RETRY CTR OVERFLOW? JMP HIGH NO, SET EVENT =HIGH JMP LOW YES, REPORT ENQ-ENQ CONTENTION SPC 2 * SET CONTACT-MADE FLAG & POST NORMAL COMP ACT9 IOR P01$ SET CONTACT-MADE FLAG STA MPFLS SPC 2 * POST NORMAL COMPLETION ACT10 JMP SLCXT EXIT WITH COMP STATUS = 0 = OK SPC 2 * REPORT: ACT11 CLB,INB COMP STATUS = 1 =INVALID REQ JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT12 LDB P02$ STATUS =2 =REQ INCOMPATL W STATE JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT13 LDB P03$ STATUS =3 =BAD ID JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT14 LDB P04$ STATUS =4 =LINE ERROR LDA P04$ INC TOTAL # OF LINE ERRORS ACXIT ADA LTCS A=ADDR OF WORD 1, LONG-TERM STAT ISZ A,I UPDATE LONG-TERM STAT TABLE NOP NULL IN CASE OF ROLLOVER JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT15 LDB P05$ STATUS =5 =EOT RECVD AND P01$ EXCEPT FOR CONTACT-MADE FLAG, A15ST STA MPFLS INIT MESS-PROC FLAGS JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT16 LDB P06$ STATUS =6 =DLE EOT RECVD JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT17 LDB P07$ STATUS =7 =LONG TIMEOUT LDA P07$ INC TOTAL # OF LONG TIMEOUTS JMP ACXIT P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT18 LDB P08$ STATUS =8 =ENQ RECVD TO EOT SENT AND HBFFF CLEAR BIT 14 (SEND ACK FLAG) IOR BIT15 SET BIT 15 (RECV ACK FLAG) JMP A15ST STORE FLAGS & RETURN SPC 2 * REPORT: ACT19 LDB P09$ STATUS = 9 =DATA OVERRUN JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT20 LDB P10$ STATUS =10 =MAX # NAKS RECVD JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT21 LDB P11$ STATUS =11 =MAX # ENQS SENT AND HFFDF CLEAR BAD-RESPONSE FLAG JMP A15ST STORE FLAGS & RETURN HFFDF OCT 177737 REVERSE MASK BIT 5 SPC 2 * REPORT: ACT22 LDB P12$ STATUS =12 =RVI RECBD ADA BIT15 TOGGLE RECV ACK FLAG (BIT 15) JMP A15ST STORE FLAGS & RETURN SPC 2 * REPORT: ACT23 LDB .13 STATUS =13 =ENQ RECV TO ENQ SENT JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT24 LDB P14$ STATUS =14 =NAK RECV TO ENQ SENT JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT25 LDB .15 STATUS =15 =MAX ENQS FROM CONVER JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * REPORT: ACT26 LDB .16 STATUS =16 =BAD RESPONSE TO TTD JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * SEND TTD, RECEIVE RESPONSE ACT27 LDA P08$ JSB SCM SEND CONTROL MESSAGE: TTD JMP ACT4A RESET LTO CTR & RECV RESPONSE SPC 2 * SEND TEXT, READ RESPONSE ACT28 JSB STXT SEND TEXT JMP ACT4A RESET LTO CTR & RECV RESPONSE SPC 2 * SEND TEXT, RECEIVE TEXT ACT29 LDA PARM1 GET REQUEST BUFFER ADDR LDB PARM2 GET & STB CONVL SAVE REQUEST BUFFER LENGTH LDA A,I GET LENGTH OF WRITE BUFFER STA PARM2 & PUT INTO EQT 11 ISZ PARM1 ADVANCE TO WRITE BUFFER ADDR JSB STXT SEND TEXT IN THE WRITE BUFFER LDA NLTO,I STA TOCTR RESET LONG-TIMEOUT CTR CLA STA TLOG ZERO TRANSMISSION LOG LDA PARM2 GET WRITE BUFFER LENGTH IN BYTES LDB CONVL STB PARM2 PUT BACK ORIG :READ BUFFR LENGTH AC29A CMA,INA CLE,ERA CHANGE TO POSITIVE WORD COUNT SEZ BYTE LENGTH ODD? INA YES, ADD ONE TO WORD LENGTH ADA PARM1 A = RECV BUFFER ADDR STA SAVEA SAVE FOR WC NAK 10/16 ADB M1 B= -(1+RECV BUFFER LENGTH) STB SAVB SAVE FOR WC NAK 10/16 CLE E = 0: DISCARD ID OR LG JSB BSCR RECEIVE TEXT CCB ADB PARM1 RETURN POINTER STB PARM1 JMP STEM GET EVENT FROM COMPLETION CODE SPC 2 * SET RVI FLAG ACT30 STA B BLF,SLB RVI FLAG (BIT 12) SET? JMP LOW YES, SET EVENT =LOW(BAD RVI) IOR BIT12 NO, THEN SET RVI FLAG STA MPFLS JMP HIGH SET EVENT =HIGH (GOOD RVI) SPC 2 * PROCESS RECVD POSITIVE ACKNOWLEDGEMENT ACT31 AND HEFFF CLEAR RVI FLAG STA MPFLS CLE,ELA PUT ACK0/1 FLAG (BIT 15) INTO E LDA P14$ START WITH ACK0 IND LDB ENVIR,I BLF,SLB HASP WORKSTATION? JMP *+3 YES, ONLY ACK0 VALID SEZ CURRENT FLAG = ACK1? INA YES, CHANGE TO ACK1 IND CPA EVENT CURRENT EVENT = CORRECT ACK? JMP MID YES, SET EVENT = MID JMP LOW NO, SET EVENT = LOW SPC 2 * PROCESS SHORT TIMEOUT (SENDING) ACT32 IOR B100 & SET MP TIMEOUT FLAG (BIT 6) STA MPFLS LDA TOCTR SZA,RSS LTO CTR =0? JMP *+3 YES ISZ TOCTR LONG TIMEOUT CTR OVERFLOW? JMP INTRY NO LDA .29 SET EVENT =29 =LONG TIMEOUT JMP SEA GO TO STATE-EVENT-ACTION CIRCLE * ------------------------------------------------- * ROUTINE TO INCREMENT RETRY COUNTER * INTRY LDA RTCTR SZA,RSS RETRY CTR =0? JMP *+3 YES ISZ RTCTR RETRY CTR OVERFLOW? JMP MID+2 NO LDB EVENT LDA .30 START WITH NEXT EVENT = LOW CPB .27 CURRENT EVENT = BAD ID? MID LDA .32 YES, SET EVENT = MID JMP SEA GO TO STATE-EVENT-ACTION CIRCLE LDB PRVST,I GET PREV STATES CLA RRR 8 B = PREV -1, A = PREV (OFFSET) CPA H1400 PREV STATE = WRITE CONV (20)? JMP MID YES, SET EVENT = MID LDA .31 NO, START WITH EVENT = HIGH CPB .20 PREV -1 STATE = WRITE CONV? JMP MID YES, SET EVENT = MID JMP SEA GO TO STATE-EVENT-ACTION CIRCLE SPC 2 * INCREMENT RETRY COUNTER ACT33 JMP INTRY INCREMENT RETRY COUNTER SPC 2 * CHECK TIMEOUT & BAD RESPONSE FLAGS ACT34 ALF,ALF RAL,RAL SLA,RSS MP TIMEOUT FLAG SET (BIT 6 =1)? JMP LOW NO, SET EVENT =LOW SSA BAD RESPONSE FLAG SET (BIT 5 =1)? JMP LOW YES, SET EVENT =LOW LDA PRVST,I AND HFF00 ISOLATE PREV-1 STATE CPA H1400 PREV-1 STATE =WRITE CONV (20)? JMP MID YES, SET EVENT =MID JMP HIGH NO, SET EVENT =HIGH SPC 2 * PROCESS ENQ RECVD IN WRITE ACT35 LDB P09$ INC # OF PREV-RESP ENQS RECVD, JSB BUMP WORD 10 OF LONG-TERM STAT ALF,ALF SLA ENQ JUST SENT (BIT 8 =1)?? JMP MID YES, SET EVENT = MID SSA TEXT JUST RECVD (BIT 7 =1)? JMP HIGH YES, SET EVENT = HIGH JMP LOW NO, SET EVENT = LOW SPC 2 * PROCESS SHORT TIMEOUT, RECEIVING ACT36 LDA .29 START WITH EVENT = LONG TIMEOUT LDB TOCTR SZB,RSS LTO CTR =0? JMP SEA YES ISZ TOCTR INCREMENT TIMEOUT CTR RSS NO OVFLO JMP SEA OVFLO: STATE-EVENT-ACTION CIRCLE LDA STATE CPA P02$ CURRENT STATE = READ ENQ? JMP ACT5A YES, RECV RESPONSE & ID, IF ANY JMP AC38C NO, RECEIVE TEXT SPC 2 * CHECK READ REQUEST TYPE ACT37 AND HBFFF CLEAR BIT 14 (SEND ACK FLAG) IOR BIT15 SET BIT 15 (RECV ACK FLAG) STA MPFLS LDA CURRQ GET CURRENT READ REQUEST # CPA P03$ CURRENT REQ = 3 (READ INITIAL)? JMP HIGH YES, SET EVENT = HIGH LDA PRVST,I AND HFF00 ISOLATE PREV-1 STATE CPA BIT11 PREV-1 STATE =8 (RESTRCTED READ)? JMP MID YES, SET EVENT = MID LOW LDA .30 SET EVENT = LOW JMP SEA GO TO STATE-EVENT-ACTION CIRCLE HIGH LDA .31 SET EVENT = HIGH JMP SEA GO TO STATE-EVENT-ACTION CIRCLE SPC 2 * SEND ACK, RECV TEXT ACT38 EQU * LDA P03$ START WITH MESSAGE CODE FOR ACK0 LDB ENVIR,I GET SPECIFIED ENVIRONMENT BLF,SLB HASP WORKSTATION? JMP AC38A YES, SEND ONLY ACK0 LDB MPFLS GET SEND ACK FLAG (BIT 14) RBL SSB ACK0 TO BE SENT (BIT 14 =0)? INA NO AC38A STA PVACK SET UP PREV ACK AC38D JSB SCM SEND ACK LDA MPFLS AND M3 CLEAR SEND-CONTINUE FLAG (BIT 1) STA MPFLS LDA NLTO,I STA TOCTR RESET LONG-TIMEOUT CTR AC38C CLA STA TLOG ZERO TRANSMISSION LOG LDA EQT06,I GET CONTROL WORD 10/16 AND N64$ MASK OUT FUNCTION 10/16 CPA WCWRD WRITE CONVERSATIONAL 10/16 JMP WCNAK YES/GET ORIGINAL POINTERS 10/16 LDA PARM1 A = RECV BUFFER ADDR CCB ADB PARM2 CLRE CLE SET E =0: DISCARD ID OR LG JSB BSCR RECEIVE TEXT JMP STEM GET EVENT FROM COMPLETION CODE * WCNAK LDA SAVEA GET RECEIVE 10/16 LDB SAVB POINTERS 10/16 JMP CLRE RETURN * SAVEA NOP SAVB NOP WCWRD OCT 22300 SPC 2 * SEND PREV ACK, RECEIVE TEXT ACT39 EQU * LDB P09$ INC # OF PREV-RESP ENQS RECVD, JSB BUMP WORD 10 OF LONG-TERM STAT LDA PVACK GET MESSAGE CODE FOR PREV ACK JMP AC38D SEND CONTROL MESSAGE: PREV ACK SPC 2 * SEND NAK, RECEIVE TEXT ACT40 EQU * AC40A CLA,INA AC40B STA PVACK SET UP PREV ACK JMP AC38D SEND CONTROL MESSAGE: NAK SPC 2 * RECEIVE RESPONSE ACT41 LDA NLTO,I STA TOCTR RESET LONG-TIMEOUT CTR JMP ACT5A RECV RESPONSE, CHECK ID, IF ANY SPC 2 * INC MESSAGE ERRORS, RECV TEXT ACT42 LDB P06$ SPECIFY WORD 7,LONG-TERM STAT JSB BUMP UPDATE MESSAGE ERROR STAT JMP AC38C RECV TEXT BUT DONT RESET TIMER SPC 2 * SEND WACK, RECV RESPONSE ACT43 LDA P05$ JMP ACT27+1 SEND WACK, RESET LTO, RECV RESP SPC 2 * SEND RVI, RECV TEXT ACT44 LDA P06$ SET UP PREV ACK, SEND RVI, JMP AC40B SPC 2 * REPORT IMPOSSIBLE SITUATION ACT45 LDB .17 STATUS =17 =IMPOSSIBLE SITUATION JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL SPC 2 * SEND DLE-EOT (DISCONNECT) ACT46 LDA P07$ JMP ACT3+1 SEND DLE-EOT CONTROL MESSAGE SPC 2 * INC. MESSAGE ERRORS, READ RESPONSE ACT47 LDB P06$ SPECIFY WORD 7,LONG-TERM STAT JSB BUMP UPDATE MESSAGE ERROR STAT CLA SINCE READ ERROR, ALLOW TIMEOUT: STA NOM3 DONT RESTART 3-SEC TIMEOUT JMP ACT5A RECV RESPONSE SPC 2 * TOGGLE RECV ACK FLAG ACT48 ADA BIT15 TOGGLE RECV ACK FLAG (BIT 15) JMP ACT9 SET CNTACT-MADE FLG,STORE,& RETN SPC 2 * SEND NAK BECAUSE OF ERROR, RECEIVE TEXT ACT49 LDB P06$ SPECIFY WORD 7, LONG-TERM STAT JSB BUMP UPDATE MESSAGE-ERROR STAT RAR,RAR SLA,RSS NAK SENDING DISABLED (BIT 2 =1)? JMP AC40A NO SEND NAK, RECV TEXT LDB .18 YES; STATUS =18 =BAD BCC ETC. JMP SLCXT+1 P+1 (COMP) RETURN TO PHYSICAL .18 DEC 18 * * SET RECV ACK, CLEAR SEND ACK FLAG + ACT 9 ACT50 AND HBFFF CLEAR BIT 14 (SEND ACK FLAG) IOR BIT15 SET BIT 15 (RECV ACK FLAG) JMP ACT9 SET CNTACT-MADE FLG,STORE,& RETN SPC 2 * TOGGLE SEND ACK FLAG + ACT 9 ACT51 XOR BIT14 TOGGLE SEND ACK FLAG (BIT 14) JMP ACT9 SET CNTACT-MADE FLG,STORE,& RETN SPC 2 * TOGGLE SEND ACK & RECV ACK FLAGS + ACT 9 ACT52 ADA BIT15 TOGGLE RECV ACK FLAG (BIT 15) JMP ACT51 SKP * ACTION ADDRESS TABLE * ACTAD DEF * DEF ACT1 DEF ACT2 DEF ACT3 DEF ACT4 DEF ACT5 DEF ACT6 DEF ACT7 DEF ACT8 DEF ACT9 DEF ACT10 DEF ACT11 DEF ACT12 DEF ACT13 DEF ACT14 DEF ACT15 DEF ACT16 DEF ACT17 DEF ACT18 DEF ACT19 DEF ACT20 DEF ACT21 DEF ACT22 DEF ACT23 DEF ACT24 DEF ACT25 DEF ACT26 DEF ACT27 DEF ACT28 DEF ACT29 DEF ACT30 DEF ACT31 DEF ACT32 DEF ACT33 DEF ACT34 DEF ACT35 DEF ACT36 DEF ACT37 DEF ACT38 DEF ACT39 DEF ACT40 DEF ACT41 DEF ACT42 DEF ACT43 DEF ACT44 DEF ACT45 DEF ACT46 DEF ACT47 DEF ACT48 DEF ACT49 DEF ACT50 DEF ACT51 DEF ACT52 SKP * MESSAGE PROCESSOR STATE DEFINITIONS * UNOPN EQU 0 UNOPENED CNTRL EQU 1 CONTROL -- WAITING FOR USER REQ RENQ EQU 2 READ ENQ RERR EQU 3 "READ ENQ" ERROR RREQ EQU 4 CHECK READ REQUEST TYPE READ EQU 5 READ -- WAITING FOR READ REQ RTEXT EQU 6 READ TEXT RRVI EQU 7 READ RVI -- IS RVI VALID RREAD EQU 8 RESTRICTED READ -- ENQ AFTER EOT WENQ EQU 9 WRITE ENQ ERRWE EQU 10 "WRITE ENQ" ERROR EN.EN EQU 11 ENQ-ENQ CONTENTION WRITE EQU 12 WRITE -- WAITING FOR WRITE REQ WTEXT EQU 13 WRITE TEXT WPREV EQU 14 WRITE PREVIOUS RESPONSE ENQ CKRES EQU 15 CHECK RESPONSE BDACK EQU 16 BAD ACK RECEIVED WRTRY EQU 17 WRITE RETRY WRENQ EQU 18 ENQ RECEIVED IN WRITE OR CONV WRNQ2 EQU 19 2ND STATE, ENQ RECVD IN WRITE WCONV EQU 20 WRITE CONVERSATIONAL WEOT EQU 21 WRITE EOT REOTR EQU 22 READ EOT RESPONSE HNGUP EQU 23 HANG UP -- IDLE EOT RECEIVED WTTD EQU 24 WRITE TTD - WAITING FOR RESPONSE SPC 2 * STATE ADDRESS TABLE * STADT DEF *+1 DEF ST00 DEF ST01 DEF ST02 DEF ST03 DEF ST04 DEF ST05 DEF ST06 DEF ST07 DEF ST08 DEF ST09 DEF ST10 DEF ST11 DEF ST12 DEF ST13 DEF ST14 DEF ST15 DEF ST16 DEF ST17 DEF ST18 DEF ST19 DEF ST20 DEF ST21 DEF ST22 DEF ST23 DEF ST24 DEF ST25 SPC 4 * STATE TRANSITION TABLE * * STATE 0: UNOPN - UNOPENED * ST00 ABS EV00+13 -------------------- ABS AC01+CNTRL REQUEST: LINE OPEN ABS AC11+UNOPN REQUEST: LINE CLOSE ABS AC11+UNOPN REQUEST: READ ENQ ABS AC11+UNOPN REQUEST: READ INITIAL ABS AC11+UNOPN REQUEST: READ CONTINUE ABS AC11+UNOPN REQUEST: READ REPEAT ABS AC11+UNOPN REQUEST: READ WITH RVI ABS AC11+UNOPN REQUEST: DELAY READ ABS AC11+UNOPN REQUEST: WRITE ENQ ABS AC11+UNOPN REQUEST: WRITE CONTINUE ABS AC11+UNOPN REQUEST: WRITE CONVERSATNAL ABS AC11+UNOPN REQUEST: WRITE EOT ABS AC11+UNOPN REQUEST: WRITE DISCONNECT ABS AC11+UNOPN REQUEST: DELAY WRITE * * STATE 1: CNTRL - CONTROL * ST01 ABS EV00+13 -------------------- ABS AC12+CNTRL REQUEST: LINE OPEN ABS AC02+UNOPN REQUEST: LINE CLOSE ABS AC41+RENQ REQUEST: READ ENQ ABS AC41+RENQ REQUEST: READ INIT ABS AC12+CNTRL REQUEST: READ CONT ABS AC12+CNTRL REQUEST: READ REPEAT ABS AC12+CNTRL REQUEST: READ WITH RVI ABS AC12+CNTRL REQUEST: DELAY READ ABS AC05+WENQ REQUEST: WRITE ENQ ABS AC12+CNTRL REQUEST: WRITE CONTINUE ABS AC12+CNTRL REQUEST: WRITE CONV ABS AC03+WEOT REQUEST: WRITE EOT ABS AC46+WEOT REQUEST: WRITE DISCONNECT ABS AC12+CNTRL REQUEST: DELAY WRITE * * STATE 2: RENQ - READ ENQ * ST02 ABS EV14+16 -------------------- ABS AC47+RENQ ACK0 RECVD ABS AC47+RENQ ACK1 RECVD ABS AC47+RENQ WACK RECVD ABS AC47+RENQ RVI RECVD ABS AC37+RREQ ENQ RECVD ABS AC47+RENQ NAK RECVD ABS AC15+CNTRL EOT RECVD ABS AC16+HNGUP DLE EOT RECVD ABS AC47+RENQ TTD RECVD ABS AC47+RENQ TEXT RECVD ABS AC47+RENQ BAD TEXT RECVD ABS AC47+RENQ TEXT OVERRUN ABS AC47+RENQ GARBAGE RECVD ABS AC33+RERR BAD ID ABS AC36+RENQ SHORT TIMEOUT ABS AC17+CNTRL LONG TIMEOUT ABS AC14+CNTRL LOW (LINE ERROR) * * STATE 3: RERR - "READ ENQ" ERROR * ST03 ABS EV31+1 -------------------- ABS AC47+RENQ HIGH (NO OVERFLOW) ABS AC13+CNTRL MID (CTR OVERFLOW & BAD ID) * * STATE 4: RREQ - CHECK READ REQUEST TYPE * ST04 ABS EV30+2 -------------------- ABS AC10+READ LOW=READ ENQ OR DELAY, READ ABS AC38+RTEXT HIGH=READ INITIAL, READ ST ABS AC10+RREAD MID=READ DELAY, RESTCT READ * * STATE 5: READ - READ -- WAITING FOR READ REQ * ST05 ABS EV00+13 -------------------- ABS AC12+READ REQUEST: LINE OPEN ABS AC02+UNOPN REQUEST: LINE CLOSE ABS AC12+READ REQUEST: READ ENQ ABS AC12+READ REQUEST: READ INIT ABS AC38+RTEXT REQUEST: READ CONT ABS AC40+RTEXT REQUEST: READ REPEAT ABS AC30+RRVI REQUEST: READ WITH RVI ABS AC43+RENQ REQUEST: DELAY READ ABS AC12+READ REQUEST: WRITE ENQ ABS AC28+WTEXT REQUEST: WRITE CONTINUE ABS AC29+WCONV REQUEST: WRITE CONV ABS AC03+WEOT REQUEST: WRITE EOT ABS AC46+WEOT REQUEST: WRITE DISCONNECT ABS AC12+READ REQUEST: DELAY WRITE * * STATE 6: RTEXT - READ TEXT * ST06 ABS EV14+16 -------------------- ABS AC42+RTEXT ACK0 RECVD ABS AC42+RTEXT ACK1 RECVD ABS AC42+RTEXT WACK RECVD ABS AC42+RTEXT RVI RECVD ABS AC39+RTEXT ENQ ABS AC42+RTEXT NAK ABS AC15+CNTRL EOT ABS AC16+HNGUP DLE EOT RECVD ABS AC40+RTEXT TTD RECVD ABS AC51+READ TEXT RECVD ABS AC49+RTEXT BAD TEXT RECVD ABS AC19+READ TEXT OVERRUN ABS AC42+RTEXT GARBAGE RECVD ABS AC45+CNTRL BAD ID ABS AC36+RTEXT SHORT TIMEOUT ABS AC17+CNTRL LONG TIMEOUT ABS AC14+CNTRL LOW (LINE ERROR) * * STATE 7: RRVI - READ RVI -- IS RVI VALID * ST07 ABS EV30+1 -------------------- ABS AC12+READ LOW (2ND RVI REQUEST) ABS AC44+RTEXT HIGH (OK TO SEND RVI) * * STATE 8: RREAD - RESTRICTED READ * ST08 ABS EV00+13 -------------------- ABS AC12+RREAD REQUEST: LINE OPEN ABS AC02+UNOPN REQUEST: LINE CLOSE ABS AC12+RREAD REQUEST: READ ENQ ABS AC12+RREAD REQUEST: READ INIT ABS AC38+RTEXT REQUEST: READ CONT ABS AC40+RTEXT REQUEST: READ REPEAT ABS AC12+RREAD REQUEST: READ WITH RVI ABS AC43+RENQ REQUEST: DELAY READ ABS AC12+RREAD REQUEST: WRITE ENQ ABS AC12+RREAD REQUEST: WRITE CONTINUE ABS AC12+RREAD REQUEST: WRITE CONV ABS AC03+WEOT REQUEST: WRITE EOT ABS AC46+WEOT REQUEST: WRITE DISCONNECT ABS AC12+RREAD REQUEST: DELAY WRITE * * STATE 9: WENQ - WRITE ENQ * ST09 ABS EV14+16 -------------------- ABS AC50+WRITE ACK0 RECVD ABS AC07+ERRWE ACK1 RECVD ABS AC05+WENQ WACK RECVD ABS AC07+ERRWE RVI RECVD ABS AC08+EN.EN ENQ ABS AC24+CNTRL NAK ABS AC15+CNTRL EOT ABS AC16+HNGUP DLE EOT RECVD ABS AC07+ERRWE TTD RECVD ABS AC07+ERRWE TEXT RECVD ABS AC07+ERRWE BAD TEXT RECVD ABS AC07+ERRWE TEXT OVERRUN ABS AC07+ERRWE GARBAGE RECVD ABS AC07+ERRWE BAD ID ABS AC32+ERRWE SHORT TIMEOUT ABS AC45+CNTRL LONG TIMEOUT ABS AC14+CNTRL LOW (LINE ERROR) BLOUT EQU ST09+16 ACTION STATE FOR IMPROBABLE ERR * * STATE 10: ERRWE - "WRITE ENQ" ERROR * ST10 ABS EV29+3 -------------------- ABS AC17+CNTRL LONG TIMEOUT ABS AC21+CNTRL LOW (CTR OVFLO, NO BAD ID) ABS AC05+WENQ HIGH (NO OVFLO) ABS AC13+CNTRL MID (CTR OVFLO, BAD ID) * * STATE 11: EN.EN - ENQ-ENQ CONTENTION * ST11 ABS EV30+1 -------------------- ABS AC23+CNTRL LOW (SECONDARY OR CTR OFLOW) ABS AC05+WENQ HIGH (PRIMARY) * * STATE 12: WRITE - WRITE -- WAITING FOR WRITE REQ * ST12 ABS EV00+13 -------------------- ABS AC12+WRITE REQUEST: LINE OPEN ABS AC02+UNOPN REQUEST: LINE CLOSE ABS AC12+WRITE REQUEST: READ ENQ ABS AC12+WRITE REQUEST: READ INIT ABS AC12+WRITE REQUEST: READ CONT ABS AC12+WRITE REQUEST: READ REPEAT ABS AC12+WRITE REQUEST: READ WITH RVI ABS AC12+WRITE REQUEST: DELAY READ ABS AC12+WRITE REQUEST: WRITE ENQ ABS AC28+WTEXT REQUEST: WRITE CONTINUE ABS AC29+WCONV REQUEST: WRITE CONV ABS AC04+REOTR REQUEST: WRITE EOT ABS AC46+WEOT REQUEST: WRITE DISCONNECT ABS AC27+WTTD REQUEST: DELAY WRITE * * STATE 13: WTEXT - WRITE TEXT * ST13 ABS EV14+16 -------------------- ABS AC31+CKRES ACK0 RECVD ABS AC31+CKRES ACK1 RECVD ABS AC05+WTEXT WACK RECVD ABS AC30+CKRES RVI RECVD ABS AC35+WRENQ ENQ RECVD ABS AC33+WRTRY NAK RECVD ABS AC15+CNTRL EOT RECVD ABS AC16+HNGUP DLE EOT RECVD ABS AC07+WPREV TTD RECVD ABS AC07+WPREV TEXT RECVD ABS AC07+WPREV BAD TEXT RECVD ABS AC07+WPREV TEXT OVERRUN ABS AC07+WPREV GARBAGE RECVD ABS AC07+WPREV BAD ID ABS AC32+WPREV SHORT TIMEOUT ABS AC45+CNTRL LONG TIMEOUT (NOT EXECTED) ABS AC14+CNTRL LOW (LINE ERROR) * * STATE 14: WPREV - WRITE PREVIOUS RESPONSE ENQ * ST14 ABS EV29+3 ------------------- ABS AC17+CNTRL LONG TIMEOUT ABS AC21+CNTRL LOW: CTR OVERFLOW ABS AC05+WTEXT HIGH: WRITE, NO OVERFLOW ABS AC06+WCONV MID: WRITE CONV, NO OVFLOW * * STATE 15: CKRES - CHECK RESPONSE * ST15 ABS EV30+2 -------------------- ABS AC34+BDACK LOW (BAD ACK) ABS AC22+WRITE HIGH (RVI RECVD) ABS AC48+WRITE MID (GOOD ACK) * * STATE 16: BDACK - BAD ACK RECEIVED * ST16 ABS EV30+2 --------------------------- ABS AC07+WPREV LOW: T/O FLAG NOT SET OR * BR FLAG SET ABS AC28+WTEXT HIGH: WRITE, T/O FLAG SET & * BR FLAG NOT SET ABS AC29+WCONV MID: WRITE CONV, " " * * STATE 17: WRTRY - WRITE RETRY * ST17 ABS EV30+2 -------------------- ABS AC20+CNTRL LOW (CTR OVERFLOW) ABS AC28+WTEXT HIGH (WRITE, NO OVFLO) ABS AC29+WCONV MID (WRITE CONV, NO OVFLO) * * STATE 18: WRENQ - ENQ RECVD IN WRITE OR CONV * ST18 ABS EV30+2 --------------------------- ABS AC07+WPREV LOW (TEXT NOT JJUST RECVD) ABS AC07+WRNQ2 HIGH (TEXT RECVD,ENQ NOT X) ABS AC23+CNTRL MID (ENQ JUST SENT) * * STATE 19: WRNQ2 - 2ND STATE, ENQ RECVD IN WRITE * ST19 ABS EV30+2 --------------------------- ABS AC25+CNTRL LOW (CTR OVERFLOW) ABS AC28+WTEXT HIGH (NO OVFLO, WRITE) ABS AC29+WCONV MID (NO OVFLO, WRITE CONV) * * STATE 20: WCONV - WRITE CONVERSATIONAL * ST20 ABS EV14+16 -------------------- ABS AC31+CKRES ACK0 RECVD ABS AC31+CKRES ACK1 RECVD ABS AC06+WCONV WACK RECVD ABS AC30+CKRES RVI RECVD ABS AC35+WRENQ ENQ RECVD ABS AC33+WRTRY NAK RECVD ABS AC15+CNTRL EOT RECVD ABS AC16+HNGUP DLE EOT RECVD ABS AC40+WCONV TTD RECVD ABS AC52+READ TEXT RECVD ABS AC49+WCONV BAD TEXT RECVD ABS AC19+READ TEXT OVERRUN ABS AC07+WPREV GARBAGE RECVD ABS AC45+CNTRL BAD ID (NOT EXPECTED) ABS AC32+WPREV SHOFT TIMEOUT ABS AC45+CNTRL LONG TIMEOUT (NOT EXECTED) ABS AC14+CNTRL LOW (LINE ERROR) * * STATE 21: WEOT - WRITE EOT * ST21 ABS EV30+1 -------------------- ABS AC14+CNTRL LOW (LINE ERROR) ABS AC10+CNTRL HIGH (NORMAL COMPLETION * * STATE 22: REOTR - READ EOT RESPONSE * ST22 ABS EV18+12 -------------------- ABS AC18+RREAD ENQ RECVD ABS AC45+CNTRL NAK RECVD ABS AC15+CNTRL EOT RECVD ABS AC16+HNGUP DLE EOT RECVD ABS AC45+CNTRL TTD RECVD ABS AC45+CNTRL TEXT RECVD ABS AC47+REOTR DATA ERROR RECVD ABS AC47+REOTR DATA OVERRUN ABS AC47+REOTR GARBAGE RECVD ABS AC45+CNTRL BAD ID ABS AC10+CNTRL SHORT TIMEOUT ABS AC17+CNTRL LONG TIMEOUT ABS AC14+CNTRL LOW (LINE ERROR) * * STATE 23: HNGUP - HANG UP -- DLE EOT RECVD * ST23 ABS EV00+13 -------------------- ABS AC16+HNGUP REQUEST: LINE OPEN ABS AC02+UNOPN REQUEST: LINE CLOSE ABS AC16+HNGUP REQUEST: READ ENQ ABS AC16+HNGUP REQUEST: READ INIT ABS AC16+HNGUP REQUEST: READ CONT ABS AC16+HNGUP REQUEST: READ REPEAT ABS AC16+HNGUP REQUEST: READ WITH RVI ABS AC16+HNGUP REQUEST: DELAY READ ABS AC16+HNGUP REQUEST: WRITE ENQ ABS AC16+HNGUP REQUEST: WRITE CONTINUE ABS AC16+HNGUP REQUEST: WRITE CONV ABS AC16+HNGUP REQUEST: WRITE EOT ABS AC16+HNGUP REQUEST: WRITE DISCONNECT ABS AC16+HNGUP REQUEST: DELAY WRITE * * STATE 24: WTTD - WRITE TTD * ST24 ABS EV14+16 -------------------- ABS AC26+CNTRL ACK0 RECVD ABS AC26+CNTRL ACK1 RECVD ABS AC26+CNTRL WACK RECVD ABS AC26+CNTRL RVI RECVD ABS AC26+CNTRL ENQ RECVD ABS AC10+WRITE NAK RECVD ABS AC15+CNTRL EOT RECVD ABS AC16+CNTRL DLE EOT RECVD ABS AC26+CNTRL TTD RECVD ABS AC26+CNTRL TEXT RECVD ABS AC26+CNTRL BAD TEXT RECVD ABS AC26+CNTRL TEXT OVERRUN ABS AC10+WRITE GARBAGE RECVD ABS AC45+CNTRL BAD ID (NOT EXPECTED) ABS AC27+WTTD SHORT TIMEOUT ABS AC17+CNTRL LONG TIMEOUT (NOT EXECTED) ABS AC14+CNTRL LOW (LINE ERROR) * ST25 NOP LOGICAL END TO STATE-TRANS SKP * CONSTANTS & STORAGE SHARED BY MESSAGE PROC & CHARACTER PROC * .13 DEC 13 DEC 13, OCT 15 P14$ DEC 14 DEC 14, OCT 16 .15 DEC 15 DEC 15, OCT 17 .17 DEC 17 DEC 17 OCT 21 B100 DEC 64 DEC 64, OCT 100 B377 DEC 255 DEC 255, OCT 377 M1 DEC -1 DEC -1, OCT 177777 M2 DEC -2 DEC -2, OCT 177776 M3 DEC -3 DEC -3, OCT 177775 M7 DEC -7 DEC -7, OCT 177771 M300 DEC -300 NOM3 DEC -300 TICKS IN NOMINAL 3-SEC TIMEOUT PRET OCT 0 P+2 RETURN ADDRESS FOR PHYSICAL PRETF OCT 0 P+1 RETURN ADDRESS FOR PHYSICAL SPC 4 * EQT EXTENSION POINTERS * MPFLS OCT 0 MESSAGE PROCESSOR FLAGS NTRY OCT 0 PTR TO # OF RETRIES RTCTR OCT 0 RETRY CTR TLOG OCT 0 TRANSMISSION LOG ENVIR OCT 0 PTR TO SPECIFIED ENVIRONMENT SKP * SUBROUTINE BSCR: BSC RECEIVE * (A) = BUFFER ADDRESS * (B) = -(1 + BUFFER LENGTH IN BYTES) * (E) = INDICATOR: 1 =SAVE ID SEQ, 0 =DONT SAVE ID * (P) = JSB BSCR * (A) = COMPLETION STATUS * BSCR NOP RCVR ENTRY STA EBUFA SAVE BYTE ADDR STB EBUFL & BUFFER LENGTH LDB NOM3 SPECIFY NOMINAL 3-SEC TIMEOUT STB PTME THIRD PARAMETER LDA M300 STA NOM3 SET NOM 3-SEC TIMEOUT TO 3 SEC LDA EBUFA ADDRESS LDB EBUFL COUNT JSB HREC PTME NOP NOP JMP BSCR,I RETURN * * EQT EXTENSION POINTERS * BLKSP OCT 0 BLOCK SPEC BITS (15 - 13) EBUFA OCT 0 EDITOR BUFFER ADDR EBUFL OCT 0 EDITOR BUFFER LENGTH SPC 1 BSS 0 SIZE OF DVG67. SPC 1 END IG67