ASMB,R,L,C HED DVR65 91700-16100 REV.1728 * (C) HEWLETT-PACKARD CO. 1977 * NAM DVR65 91700-16100 REV.1728 770630 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 ENT I.65,C.65 EXT $LIST IFZ EXT $DDT XIF * * * DVR65 * SOURCE: 91700-18100 * BINARY: 91700-16100 * PRGMR: BOB SHATZER * DATE: 12 JAN 76 * * * * THIS IS THE COMMUNICATIONS DRIVER DESIGNED TO SUPPORT THE * DS1B DISTRIBUTED SYSTEMS NETWORK. THIS DRIVER IS NOT COM- * PATABLE WITH EARLIER VERSIONS OF DVR65, SCE/1, OR DS-1. * BOTH THE CALLING SEQUENCES AND THE LINE PROTOCOL HAVE BEEN * MODIFIED TO FACILITATE BETTER RESOURCE MANAGEMENT WITHIN * THE SYSTEM. THE DRIVER IS DESIGNED TO BE USED IN AN RTE-II * OR RTE-III SYSTEM. * * THIS DRIVER IS DESIGNED TO FUNCTION WITH EITHER THE HP 12665 * SERIAL DATA INTERFACE (SDI) CARD OR THE HP 12773 SERIAL * MODEM DATA INTERFACE (SMDI) CARD. THE DRIVER MAKES NO DIS- * TINCTION BETWEEN THE TWO BOARDS OR BETWEEN VARIOUS DATA * RATES. * * * ***** CAUTION ***** CAUTION ***** CAUTION ***** CAUTION ***** * * DO NOT ATTEMPT TO USE THIS DRIVER OUTSIDE OF THE DS-1 ENVIRON- * MENT WITHOUT THE PROPER SUPPORTING COMMUNICATIONS MANAGEMENT * STRUCTURE! THE DRIVER IS SPECIFICALLY DESIGNED TO INTERACT * WITH THE VARIOUS DS-1 MODULES SO AS TO PROVIDE PROPER RESOURCE * MANAGEMENT. * * ***** CAUTION ***** CAUTION ***** CAUTION ***** CAUTION ***** * SKP * * CALLING SEQUENCES * * *** NOTE: THESE CALLING SEQUENCES ARE SHOWN AS CLASS CALLS. * HOWEVER, THE DRIVER IS ABLE TO HANDLE NON-CLASS I/O AS WELL. * TO DO NON-CLASS I/O, SIMPLY CONVERT THE CALLS TO THEIR PROPER * FORMAT. *** SPC 2 * TRANSMIT REQUEST AND RECEIVE OR TRANSMIT DATA SPC 1 * JSB EXEC * DEF *+8 * DEF IRW REQUEST CODE = 20 (CLASS WRITE/READ) * DEF CONWD CONTROL WORD (SEE BELOW) * DEF RBUFR REQUEST BUFFER ADDRESS * DEF RBUFL REQUEST BUFFER LENGTH * DEF DBUFR DATA BUFFER ADDRESS * DEF DBUFL DATA BUFFER LENGTH * DEF CLASS * * * RECEIVE OR TRANSMIT REQUEST OR DATA ONLY SPC 1 * JSB EXEC * DEF *+8 * DEF IRW REQUEST CODE (17 = READ AND 18 = WRITE) * DEF CONWD CONTROL WORD (SEE BELOW) * DEF BUFFR REQUEST OR DATA BUFFER ADDRESS * DEF BUFFL REQUEST OR DATA BUFFER LENGTH * DEF TIME1 TIME TAG WORD 1 (DATA CALLS ONLY) * DEF TIME2 TIME TAG WORD 2 (DATA CALLS ONLY) * DEF CLASS * * * CONTROL REQUEST SPC 1 * JSB EXEC * DEF *+5 * DEF IRW REQUEST CODE = 19 (CLASS CONTROL) * DEF CONWD CONTROL WORD (SEE BELOW) * DEF BUFFR LRN/PRN BUFFER * DEF CLASS * SKP * * THE LRN/PRN BUFFER IS A SIX WORD BUFFER WHICH IS SUPPLIED BY * THE CALLER FOR AN ENABLE LISTEN MODE (MODE=3) CALL. THE DRIVER * PLACES THE FIRST THREE VALUES INTO THE EQT EXTENSION (WORDS 1, 2 * AND 3). THE REMAINING THREE WORDS ARE STORED IN THE DRIVER. * FOR A CLEAR REQUEST (MODES 2 AND 4), THE DRIVER WILL CLEAR * THE LRN/PRN VALUES BEING MAINTAINED IN EQT EXTENSION WORDS * 1 AND 2, AND WILL RETURN THEIR VALUES TO THE USER IN THE * BUFFER ADDRESS SUPPLIED. * * THE FORMAT FOR THE USER-SUPPLIED BUFFER IS AS FOLLOWS: * WORD 1 - LINE RESOURCE NUMBER * WORD 2 - PROGL RESOURCE NUMBER * WORD 3 - INTRA-REQUEST TIMEOUT (-10'S OF MILLISECONDS) * WORD 4 - ADDRESS OF #SBIT SUBROUTINE IN RES * WORD 5 - ADDRESS OF $CGRN ENTRY POINT IN THE SYSTEM * WORD 6 - #0 IF THIS IS A PRIMARY NETWORK NODE * =0 IF THIS IS A SECONDARY NODE * * NOTE: THE DISTINCTION BETWEEN PRIMARY AND SECONDARY IS NECESSARY * TO RESOLVE THE CONTENTION PROBLEM WHICH PERIODICALLY OCCURS * WHEN TWO REQUESTS ARE MADE SIMULTANEOUSLY, ONE FROM EITHER * END OF THE COMMUNICATIONS LINE. IN THIS CASE, THE SECONDARY * DRIVER YIELDS TO THE OTHER END AND RETURNS TO THE USER WITH * THE 'BR' AND THE 'RB' BITS SET TO INDICATE A SIMULTANEOUS * REQUEST CONDITION OCCURED. IN NORMAL USAGE, ALL SATELLITES * ARE PRIMARY AND CCE IS SECONDARY. A CCE MAY BE MADE PRIMARY IF * IT COMMUNICATES WITH ANOTHER CCE (VIA PTOP OR OPERATOR COMMANDS), * AND IT DOES NOT SUPPORT ANY SATELLITES. * * THE INTRA-REQUEST TIMEOUT IS USED TO PROVIDE A TIMEOUT COUNTER * WHICH RUNS IN THE INTERVAL BETWEEN REQUEST AND DATA PORTIONS OF * A I/O CALL. IN A CCE NODE, THE VALUE SHOULD BE ZERO, SINCE CCE * HAS A MECHANISM FOR PROVIDING AN ALL-ENCOMPASSING TRANSACTION * TIMEOUT. IN SCE/4 AND 5 NODES, A VALUE SHOULD BE SUPPLIED TO * PROVIDE SOME FORM OF TRANSACTION TIMEOUT, SINCE THAT IS NOT * SUPPLIED BY THE SUPPORTING SOFTWARE. * * IF #SBIT AND $CGRN DO NOT EXIST IN A PARTICULAR NODE, A ZERO * IS PASSED FOR EACH OF THESE ADDRESSES. THE DRIVER CHECKS FOR * A ZERO PRIOR TO EXECUTING A 'JSB' TO THAT LOCATION. * SKP * CONTROL WORD FORMAT SPC 1 * 15!14 13 12!11 10 9! 8 7 6! 5 4 3! 2 1 0 * ************************************************* * * * Z*NW*BR*MR* MODE * LOGICAL UNIT * * ************************************************* * * * WHERE: * * NW IS THE NO WAIT BIT WHICH IS USED BY A CALLER TO SPECIFY * THAT HE BE GIVEN CONTROL BACK IMMEDIATELY IF THE REMOTE * CANNOT SERVICE HIS REQUEST PROMPTLY. NOT USED BY THE DRIVER, * BUT IS SPECIFIED IN A DRIVER-LIKE CALLING SEQUENCE TO D65MS. * * BR IS THE BLIND REQUEST BIT WHICH IS USED BY A CALLER TO * SPECIFY THAT HE DOES NOT WANT TO WAIT FOR THE REPLY TO COME * BACK FROM THE REMOTE. NOT USED BY THE DRIVER, BUT IS SPECIFIED * IN A DRIVER-LIKE CALL TO D65MS. * * MR IS USED TO INDICATE A MASTER REQUEST TO THE DRIVER SO THAT * IT CAN SET THE I/O COMPLETION FLAG IN THE LIST ENTRY ASSOCIATED * WITH THE CURRENT REQUEST UPON I/O COMPLETION. * * MODE: READ-WRITE REQUESTS * 0 FOR SEND OR RECEIVE REQUEST ONLY * 1 FOR SEND REQUEST AND READ DATA * 2 FOR SEND REQUEST AND SEND DATA * 3 FOR SEND OR RECEIVE DATA ONLY * 4 FOR SEND DATA ONLY WITHOUT A PRE- * EXISTING DATA PENDING CONDITION * CONTROL REQUESTS * 0 FOR SEND STOP * 1 FOR ENABLE LISTEN MODE * 2 FOR CLEAR REQUEST * 3 FOR ENABLE LISTEN MODE AND SETUP LRN AND PRN * 4 FOR CLEAR AND SET EQT DOWN * * Z: REQUIRED BY RTE FOR REQUEST AND DATA CALLS TO FORCE * FORCE THE SYSTEM TO TRANSPORT BOTH REQUEST AND * DATA BUFFERS BEFORE AND AFTER THE I/O CALL. * * NOTE: MODE 4 IS A PRIVILEGED MODE DESIGNED FOR USE BY PROGL AND * OTHER USERS WHO HAVE NEED TO SEND BLOCKS OF PURE DATA AND, IN * DOING SO, MUST BYPASS THE NORMAL COMMUNICATIONS RESOURCE * MANAGEMENT AND TRANSACTION MANAGEMENT FUNCTIONS. THIS MODE * IS LEGAL FOR WRITING ONLY. * SKP * EQUIPMENT TABLE USAGE * ********************* * * EQT # USE * *************************** * 1 DEFINED * 2 DEFINED * 3 DEFINED * 4 DEFINED * 5 DEFINED * 6 DEFINED * 7 FIRST BUFFER ADDRESS * 8 FIRST BUFFER LENGTH * 9 DATA BUFFER ADDRESS (REQ AND DATA) * 10 DATA BUFFER LENGTH (REQ AND DATA) * 11 COROUTINE POINTER * 12 EXTENDED STATUS WORD * 13 EQT EXTENSION ADDRESS * 14 DEFINED TIMEOUT VALUE * 15 TIMEOUT COUNTER * EXT1 VALUE OF LINE RESOURCE NUMBER * EXT2 VALUE OF PROGL RESOURCE NUMBER * EXT3 INTRA-REQUEST TIMEOUT VALUE (- 10'S OF MSECS.) * EXT4 STREAM TYPE FROM CURRENT PARMB * EXT5 MASTER REQUESTOR CLASS NUMBER FROM CURRENT PARMB * EXT6 ID SEG. ADDR. OF PGM. TO BE INTERRUPT SCHEDULED * EXT7 1ST TIME TAG OF LAST RECEIVED REQUEST * EXT8 2ND TIME TAG OF LAST RECEIVED REQUEST * SKP * STATUS WORD FORMAT * * * 15!14 13 12!11 10 9! 8 7 6! 5 4 3! 2 1 0 * ************************************************* * * *BL*IR*IL*SR*TO*CL*BR*GC* EQT 5 * ************************************************* * *RW*OC*RD*DD*MM*LM*RP*DP*TP*SF*RB*RM*PE*PAR CNTR* EQT 12 * ************************************************* * * WHERE: * * BL - BROKEN LINE * IR - ILLEGAL REQUEST TYPE * IL - ILLEGAL LENGTH RECEIVED * SR - STOP RECEIVED (GC ALSO SET IF VALID DATA REJECT) * TO - TIME OUT * CL - ILLEGAL LENGTH SPECIFIED IN CALLING SEQUENCE * BR - BUSY REJECT (RP OR DP CONDITION EXISTS) * GC - GOOD COMPLETION * RW - READ/WRITE DIRECTION FOR CURRENT REQUEST SEGMENT * OC - OPEN/CLOSED LOOP TRANSMISSION MODE * RD - REQUEST AND DATA MODE * DD - DATA DIRECTION FOR REQ AND DATA (1 = WRITE) * MM - MASTER REQUEST MODE * LM - LISTEN MODE ENABLED * RP - REQUEST PENDING * DP - DATA PENDING * TP - TRANSACTION PENDING * SF - SYSTEM FAILURE * RB - REMOTE BUSY * RM - RECEIVED MODE (OPEN/CLOSED LOOP) * PE - PARITY ERROR * PAR CNTR - PARITY COUNTER * SKP I.65 NOP IFZ JMP *+3 NORMAL DRIVER ENTRY JSB $DDT SPECIAL ENTRY - CALL $DDT DEF *+1 XIF JSB SETIO CONFIGURE I/O INSTRUCTIONS LDA EQT13,I EXT. AREA ADDRESS SZA,RSS SKIP IF ONE SPECIFIED JMP GENER ELSE SYSTEM GENERATED INCORRECTLY LDA EQTX6,I FIRST ENTRY SZA FOR DEVICE? JMP NFIR NO. LDA EQT6,I GET EQT6 AND B377 ISOLATE REQUEST CODE AND MODE CPA B303 IS THIS AN INITIALIZE REQUEST? RSS YES - GO PROCESS IT JMP RQERR NO - REJECT REQUEST LDA EQT4,I FETCH SELECT CODE AND B77 ISOLATE ADA MN6 SUBTRACT 6 TO FIND ADA INTBA ENTRY IN INTERRUPT TABLE LDB A,I FETCH USER INTERRUPT LINK SSB,RSS IS IT POSITIVE? (EQT ADDRESS) JMP GENER YES - SYSTEM INCORRECTLY GENERATED CMB,INB GET INTERRUPT LINK STB EQTX6,I AND SAVE LDB EQT1 SET DRIVER STB A,I INTERRUPT LINK JSB RDD.C CLEAR RECEIVER AND STATUS WORDS LDA EQT4,I TELL RTE THAT I WANT CONTROL ON TIME OUTT IOR BIT12 IOR BIT13 AND ON POWER FAIL STA EQT4,I * NFIR LDA EQT5,I GET EQT WORD 5 SSA,RSS IS THE EQT ENTRY BUSY? JMP NFIR1 NO - NORMAL ENTRY LDA B103 WAS BUSY - SIMULATE LISTEN REQUEST STA EQT6,I (POWER FAIL CONDITION) NFIR1 LDA EQT12,I GET EQT 12 ALF,ALF ROTATE RP AND DP BITS TO LOWER BYTE AND B3 ISOLATE THEM STA STATE AND SAVE AS CURRENT DRIVER STATE LDA EQT6,I GET EQT6 AGAIN ALF,ALF ROTATE MODE TO LOWER BYTE RAL,RAL AND B7 MASK IT OFF STA MODE AND SAVE IT ADA M5 SSA,RSS MODE>4 IS AN ERROR JMP RQERR YES - MODE > 4 - ERROR LDA EQT6,I GET EQT6 AGAIN AND B3 ISOLATE REQUEST CODE SZA,RSS IS IT ZERO? JMP RQERR YES - ERROR CPA B3 IS IT A CONTROL REQUEST? JMP CNREQ YES - GO PROCESS ADA M1 MAKE REQUEST CODE 0 OR 1 MPY D15 MULTIPLY BY 15 FOR RQTBL INDEXING LDB MODE GET MODE BLS ADB MODE MODE * 3 ADB 0 ADD REQUEST TYPE ADB STATE AND STATE ADB RQTBL SET UP REQUEST TABLE INDEX LDA 1,I GET CONTENTS OF RQTBL AT INDEX AND MN400 CLEAR LOW HALF SZA,RSS IS IT ZERO? JMP ER.IR YES - ILLEGAL REQUEST SSA IS THE VALUE NEGATIVE? JMP ER.BR YES - DO A 'SOFT' REJECT LDA EQT6,I PICK UP EQT 6 AND BIT9 ISOLATE MASTER REQUEST BIT RAL,RAL ROTATE IT TO BIT 11 STA MSTR AND SAVE IT FOR LATER USAGE LDB 1,I GET ADDRESS FROM TABLE JMP 1,I JUMP TO PROCESSOR * B103 OCT 103 B377 OCT 377 MODE NOP STATE NOP MSTR NOP * SKP * * REQUEST PROCESSOR TABLE * * THIS TABLE IS ACTUALLY A THREE DIMENSIONAL ARRAY WHICH IS INDEXED * BY REQUEST CODE, MODE, AND DRIVER STATE. IF THE ENTRY WHICH IS * INDEXED BY A PARTICULAR REQUEST AT A SPECIFIC TIME IS ZERO, THE * REQUEST IS ILLEGAL AND WILL BE REJECTED BY THE DRIVER (THE SYSTEM * WILL RETURN AN 'IO07' TO THE REQUESTOR.) IF THE ENTRY IS NEGATIVE, * THE DRIVER WILL RETURN WITH AN IMMEDIATE COMPLETION RETURN AND * BIT 1 OF THE EQT5 STATUS AREA WILL BE SET TO INDICATE A DRIVER * BUSY REJECT. IF THE ENTRY IS POSITIVE, THE REQUEST IS VALID AND * THE ENTRY CONTAINS THE ADDRESS OF THE REQUEST PROCESSOR. * * RQTBL DEF *+1 RCODE MODE STATE REQ TYPE ****************************************************************************** B1 DEC 1 1 0 0 READ REQ MN6 OCT 177772 1 0 1 (DP) READ REQ DEF R.REQ 1 0 2 (RP) READ REQ DEF RQ.RD 1 1 0 REQ & RDATA BIT15 OCT 100000 1 1 1 (DP) REQ & RDATA MN3 OCT 177775 1 1 2 (RP) REQ & RDATA DEF RQ.SD 1 2 0 REQ & SDATA MN4 OCT -4 1 2 1 (DP) REQ & SDATA DCLCC CLC 7,C 1 2 2 (RP) REQ & SDATA B2 DEC 2 1 3 0 READ DATA DEF R.DTA 1 3 1 (DP) READ DATA B3 DEC 3 1 3 2 (RP) READ DATA B4 DEC 4 1 4 0 READ DATA BIT3 OCT 10 1 4 1 (DP) READ DATA BIT5 OCT 40 1 4 2 (RP) READ DATA DEF S.REQ 2 0 0 SEND REQ MN400 OCT 177400 2 0 1 (DP) SEND REQ M1 OCT -1 2 0 2 (RP) SEND REQ DEF RQ.RD 2 1 0 REQ & RDATA RC OCT 170017 2 1 1 (DP) REQ & RDATA TNW OCT 170360 2 1 2 (RP) REQ & RDATA DEF RQ.SD 2 2 0 REQ & SDATA M5 DEC -5 2 2 1 (DP) REQ & SDATA CLCC CLC 0,C 2 2 2 (RP) REQ & SDATA D15 DEC 15 2 3 0 SEND DATA DEF S.DTA 2 3 1 (DP) SEND DATA B77 OCT 77 2 3 2 (RP) SEND DATA DEF SP.DT 2 4 0 SEND DATA DEF SP.DT 2 4 1 (DP) SEND DATA DEF SP.DT 2 4 2 (RP) SEND DATA * SKP * * CONTROL REQUEST PROCESSOR * CNREQ LDA STATE TEST DATA PENDING CONDITION CPA B1 IS IT SET? JMP STPRQ YES - SEND STOP JSB CNPRC CALL CONTROL REQUEST PROCESSOR SUBROUTINE STA EQT12,I SAVE EQT12 STATUS JSB ICHAS SET UP COROUTINE POINTER CLB,INB SET B FOR GOOD COMPLETION JMP ER.BR+1 AND EXIT * SKP * CONTROL REQUEST PROCESSOR SUBROUTINE * CNPRC NOP LDB MODE GET MODE ADB CNTBL SET UP TO INDEX CONTROL TABLE JMP B,I AND JUMP TO PROCESSOR * CNTBL DEF *+1,I DEF STPRQ MODE 0 DEF LSN.1 MODE 1 DEF CLR.2 MODE 2 DEF LSN.3 MODE 3 DEF CLR.4 MODE 4 * CLR.2 CLB,RSS NORMAL CLEAR REQUEST CLR.4 LDB BIT14 CLEAR AND DOWN REQUEST JSB STAT SET EQT DOWN IF C AND D REQUEST LDB EQT7,I GET ADDRESS PROVIDED BY USER JSB ICHAS CHASE DOWN INDIRECTS LDA EQTX1,I GET LRN STA B,I AND RETURN TO USER INB BUMP USER BUFFER POINTER LDA EQTX2,I GET PRN STA B,I AND RETURN TO USER JSB RDD.C CLEAR THE CARD JSB CGRN CLA STA EQTX1,I CLEAR LRN VALUE IN EQT EXTENTION STA EQTX2,I CLEAR PRN VALUE IN EXTENSION LDB UNKNI GET UNKNOWN INTERRUPT POINTER JMP CNPRC,I AND EXIT * LSN.3 LDB EQT7,I LISTEN AND SETUP MODE JSB ICHAS GET USER BUFFER ADDRESS LDA B,I GET LRN STA EQTX1,I AND SAVE IT INB BUMP BUFFER POINTER LDA B,I GET PRN STA EQTX2,I AND SAVE THAT, TOO INB BUMP BUFFER POINTER LDA B,I GET INTRA-REQUEST TIMEOUT STA EQTX3,I AND SAVE IT INB BUMP BUFFER POINTER LDA B,I GET #SBIT ADDR. AND $CGRN ADDRESS STA #SBIT AND SAVE THEM INB LDA B,I IN BODY OF DRIVER STA $CGRN INB BUMP POINTER AGAIN LDA B,I GET PRIMARY FLAG STA PRIMY AND SAVE IT LSN.1 STC 0,C SET I/O CARD TO LISTEN MODE JSB CGRN LDB LSTNI GET LISTEN INTERRUPT POINT LDA BIT10 GET LISTEN STATUS BIT JMP CNPRC,I AND RETURN SKP * * HERE FOR IMMEDIATE COMPLETION RETURN * A REG SHOULD CONTAIN THE STATUS OF LAST REQUEST * * ER.BR LABEL IS USED FOR 'SOFT' REJECTS OF REQUESTS. * THAT IS, A REQUEST WHICH IS RECEIVED WHEN THERE IS * EITHER A REQUEST PENDING OR A DATA PENDING CONDITION IS * CURRENTLY EXISTING. * ER.BR LDB B2 GET BUSY BIT FOR IMMED COMPL REJECT JSB STAT PUT NEW STATUS IN EQT 5 LDA B4 SET FOR IMMEDIATE COMPLETION * * HERE FOR COMPLETION RETURN * EQT 11 WILL BE SET DEPENDING UPON LISTEN MODE STATUS * IDON STA TEMP2 SAVE COMPLETION STATUS LDA EQT12,I GET EQT12 AND BIT10 ISOLATE LISTEN MODE BIT LDB UNKNI SET FOR ILLEGAL INTERRUPT SZA IS THE DRIVER IN LISTEN MODE? LDB LSTNI YES - SET FOR LISTEN INTERRUPT LDA TEMP2 GET STATUS AGAIN IDON1 JSB ICHAS SAVE ROUTINE ADDRESS LDB EQT12,I GET EQT12 FOR RETURN TO CALLER JMP I.65,I RETURN TO RTE SYSTEM * ER.IR LDB BIT6 ILLEGAL REQUEST JSB STAT UPDATE EQT5'S STATUS CLA,INA,RSS SET FOR READ-WRITE ERROR RQERR LDA B2 REQUEST ERROR CODE JMP IDON AND EXIT * GENER LDA B3 SET A=3 FOR DEVICE NOT READY REJECT JMP IDON * SKP * * STOP REQUEST PROCESSOR * STPRQ JSB SSTOP SEND STOP LDB STPRA GET STOP REQUEST CONTINUATOR ADDRESS STRQ1 STC 0 PUT CARD IN TRANSMIT MODE JMP IEXIT+1 AND RETURN WITH OPERATION IN PROGRESS * * SUBROUTINE TO SEND A STOP * SSTOP NOP SAVE RETURN ADDRESS LDA STOP GET STOP WORD JSB OUTPA SEND STOP JMP SSTOP,I RETURN * * SUBROUTINE TO SEND TNW * STNW NOP LDA TNW GET TRANSMIT NEXT WORD JSB OUTPA OUTPUT WORD JMP STNW,I RETURN * * SUBROUTINE TO RETRANSMIT LAST WORD * SRLW NOP LDA RLW RETRANSMIT LAST WORD JSB OUTPA OUTPUT CHARACTER JMP SRLW,I RETURN * SKP * * HERE FOR RECEIVE OR TRANSMIT DATA ONLY * S.DTA CCE,RSS SET E=1 FOR SEND DATA REQUEST R.DTA CLE AND TO ZERO FOR RECEIVE DATA REQUEST JSB DLCHK CHECK DATA LENGTH * LDA EQTX4,I GET FRIENDLY BIT (11) ALF SSA,RSS IS IT FRIENDLY? JMP DTAGO NO, DON'T CHECK TIME-TAGS * LDB EQT10,I EQT10 HAS TAGS ADDR IF XSIO CALL LDA EQT6,I RAL,SLA TEST "T" FIELD SSA SKIP IF "SYSTEM" REQUEST LDB EQT9 NORMAL CALL, EQT 9 & 10 HAVE TAGS LDA 1,I GET 1ST TAG CPA EQTX7,I MATCH REQUEST'S TIME-TAG 1? INB,RSS YES JMP ER.IR NO, TREAT AS ILLEGAL REQUEST LDA 1,I GET 2ND TIME-TAG ISZ EQTX7 CPA EQTX7,I MATCH REQUEST'S TIME-TAG 2? RSS YES, DO THE TRANSFER JMP ER.IR REJECT REQUEST * DTAGO LDA EQT12,I GET EQT12 AND BIT4 ISOLATE REMOTE'S MODE ALF,ALF ROTATE TO BIT 14 TO SET OUR MODE RAL,RAL RAL,ERA SET BIT 15 TO REFLECT DATA DIRECTION IOR EQT12,I INCLUSIVE OR IN EQT12 AND NBIT8 CLEAR DATA PENDING CONDITION STA EQT12,I JSB CLPAR CLEAR PARITY COUNTER LDB WDINT SET FOR POSSIBLE WRITE INTERRUPT SSA READ OR WRITE? JMP TRDT3 WRITE...DO NOT SET FOR DMA TRANSFER UNTIL READY JSB GTDMA SET UP DMA LDB RDINT GET READ INTERRUPT TRDT3 JSB STNW TELL OTHER SIDE TO "LET HER GO" * * ALL NORMAL EXITS FROM INITIATOR COME THRU HERE * IEXIT STC 0,C SET FOR RECEIVE MODE CLA GET A ZERO JMP IDON1 RETURN * * B303 OCT 303 BIT8 OCT 400 NBIT8 OCT 177377 UNKNI DEF IUNKN LSTNI DEF ILSTN RDINT DEF INTRD WDINT DEF INTWD WR1IT DEF ITWR1 BIT10 OCT 2000 BIT9 OCT 1000 * SKP * * * REQUEST AND DATA TRANSMISSION MODE * RQ.RD CLA,RSS SEND REQUEST AND READ DATA RQ.SD LDA BIT12 REQ AND SEND DATA - SET DATA WRITE FLAG JSB DLCHK DO LENGTH CHECK IOR BIT13 SET REQUEST AND DATA MODE INTO STATUS * * HERE FOR STARTING OF A SEND REQUEST * SREQ1 IOR BIT15 SET FOR WRITING...BIT 15 IOR BIT10 MASK IN LISTEN ENABLED FLAG IOR MSTR STUFF IN MASTER REQUEST BIT STA EQT12,I SAVE IT AWAY LDA EQT7,I GET FIRST 2 WORDS OF REQUEST DLD A,I DST EQTX4,I AND PUT INTO EQT EXTENSION JSB CLPAR CLEAR PARITY COUNTER JSB SRC SEND REQUEST COMING LDB WR1IT JMP IEXIT DO A NORMAL CONTINUATION EXIT * BIT12 OCT 10000 BIT14 OCT 40000 * SKP * * HERE FOR RECEIVE OR TRANSMIT REQUEST ONLY * S.REQ CLA SEND REQUEST ONLY CALL JMP SREQ1 * R.REQ LDA BIT10 SET LISTEN FLAG..CURRENT STATUS OF DRIVER IOR MSTR STUFF IN MASTER REQUEST FLAG STA EQT12,I SAVE NEW STATUS JSB CLPAR CLEAR PARITY COUNTER LDB LNRCI GET READ REQ INTERRUPT JMP TRDT3 TELL OTHER SIDE TO CONTINUE * LNRCI DEF ILNRC * * ROUTINE TO CLEAR PARITY COUNTER * CLPAR NOP LDA PMSK GET MASK FOR PARITY COUNTER AND EQT12,I MASK OFF PARITY COUNT STA EQT12,I AND RESTORE EQT12 JMP CLPAR,I * * ROUTINE TO CHECK DATA LENGTH LEGALITY * DLCHK NOP LDB EQT8,I GET DATA BUFFER LENGTH SZB IS IT ZERO? JMP DLCHK,I NO - RETURN ON LEGAL LENGTH LDB B4 YES JMP ER.IR+1 TAKE ERROR EXIT * SKP * * SPECIAL DATA TRANSMISSION MODE * SP.DT JSB DLCHK CHECK DATA LENGTH LDA EQT12,I GET EQT 12 IOR BIT15 SET TRANSMIT MODE STA EQT12,I AND SAVE IT JSB CLPAR CLEAR PARITY COUNTER LDB DWDEF GET RETURN-POINTER ADDRESS. JSB SPECL GO TO START SPECIAL DMA TRANSMISSION. JMP IEXIT TAKE INITIATOR EXIT. * SP.EN CLE JSB PRIV DEALLOCATE DMA JSB CEXT2 AWAIT RESPONSE JSB TIMCK REENTERED, IS IT TIMEOUT? JMP LNRC2 YES JSB RDD.D GET SCE-1'S REPLY CPA RLW RETRY? RSS YES JMP REQDN NO, DONE WITH THIS RECORD LDB DWDEF JMP SPDMA RETRY * DWDEF DEF SP.EN * SPECL NOP ENTRY/EXIT: SPECIAL DMA START-UP LDA EQT7,I GET THE FIRST ELEMENT LDA A,I FROM THE CALLER'S DATA BUFFER. DST SPTMP SAVE FIRST WORD AND RETURN POINTER. ISZ EQT7,I ADVANCE BUFFER POINTER FOR DMA. LDB EQT8,I GET THE TRANSMISSION LENGTH. ADB M1 SUBTRACT ONE FOR FIRST WORD. STB EQT8,I SAVE DECREMENTED LENGTH FOR DMA. SZB ONE WORD TRANSMISSION? JSB GTDMA NO. PREPARE FOR DMA TRANSFER. DLD SPTMP GET FIRST DATA WORD & RETURN POINTER. JSB OUTPA OUTPUT IN RCV MODE--RESPONSE STARTS DMA. JMP SPECL,I RETURN: =RETURN-POINTER. * SPTMP OCT 0,0 TEMPORARY STORAGE.