ASMB,R,L,C HED DVR65 29001-60003 REV D 750730 NAM DVR65 29001-60003 REV D 750730 SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. 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 ****************************************************************** * * DVR65 COMMUNICATIONS DRIVER FOR DS/1 * * SOURCE PART # 29001-80003 REV D * * REL PART # 29001-60003 REV D * * WRITTEN BY: LARRY POMATTO * * DATE WRITTEN: DECEMBER 1973 * * MODIFIED BY: BOB SHATZER * * DATE MODIFIED: 30 JULY 1975 * ****************************************************************** SPC 3 * * DEFINE ENTRY POINTS * ENT I.65,C.65 SPC 3 * * DEFINE EXTERNALS * EXT $LIST SPC 3 * * DEFINE A AND B REG * A EQU 0 B EQU 1 * SKP * * CALLING SEQUENCES * SPC 2 * TRANSMIT REQUEST AND DATA SPC 1 * JSB EXEC * DEF *+6 * DEF IRW 1=READ 2=WRITE * DEF LU LOGICAL UNIT OF CARD * DEF PBUF PRAM BUFFER * DEF PBUFL PRAM BUFFER LENGTH (ALWAYS 4) * DEF IMODE 0=REQUEST AND DATA,1=DATA,2=REQUEST * *PBUF DEF DATA BUFFER ADDRESS * DEC DATA BUFFER LENGTH * DEF REQUEST BUFFER * DEC REQUEST LENGTH (IN WORDS) * *PBUFL DEC 4 * SPC 2 *RECEIVE OR TRANSMIT DATA ONLY SPC 1 * JSB EXEC * DEF *+6 * DEF IRW READ OR WRITE * DEF LU * DEF DATA BUFFER * DEF DATA BUFFER LENGTH * DEF MODE IN THIS CASE=1 * SPC 2 * RECEIVE OR TRANSMIT REQUEST ONLY SPC 1 * JSB EXEC * DEF *+6 * DEF IRW READ OR WRITE * DEF LU * DEF REQUEST BUFFER * DEF REQUEST BUFFER LENGTH * DEF MODE IN THIS CASE=2 SPC 2 * ENABLE LISTEN MODE SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE OCT 3 * DEF CONWD 100B+LU * *RCODE OCT 3 *CONWD OCT 100B+LU * SPC 2 * SEND STOP SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE * DEF CONWD * *RCODE OCT 3 *CONWD OCT 0+LU * SPC 2 * CLEAR REQUEST SPC 1 * JSB EXEC * DEF *+3 * DEF RCODE * DEF CONWD * *RCODE OCT 3 *CONWD OCT 200+LU SPC 3 * * ERROR CODES * * ERROR BIT ERROR * 0 REQUEST COMPLETED...NO ERRORS * 1 DRIVER BUSY OR READ REQUEST OR * DRIVER NOT BUSY ON A DATA REQUEST * 2 ZERO LENGTH DATA BUFFER OR * CALLING SEQUENCE WRONG ON REQ AND DATA * 3 TIME OUT * 4 STOP RECEIVED...IF LENGTH WORD=-1, OTHERWISE * NOT CORRECT INTERNAL HAND SHAKE * 5 REQUEST LENGTH OUT OF RANGE * DRIVER OUT OF SYNC REQUEST REJECTED * 6 PARITY ERROR * THIS CAN ALSO OCCUR ON OUT OF SYNC * 7 BROKEN LINE...DRIVER DISABLES THE CARD * SPC 4 * * EQT WORD USAGE BREAKDOWN * * EQT # USE * 1 DEFINED * 2 DEFINED * 3 DEFINED * 4 DEFINED * 5 DEFINED * 6 DEFINED * 7 DEFINED * 8 DATA BUFFER ADDRESS (REQ AND DATA) * 9 DATA BUFFER LENGTH (REQ AND DATA) * 10 CO-ROUTINE ENTRY POINT (DEFINED DYNAMICLY) * 11 PARITY COUNTER * 12 CURRENT STATUS TABLE (SEE BREAKDOWN) * 13 ADDRESS OF ID SEG TO RUN ON INTERRUPT * 14 DEFINED * 15 DEFINED SPC 2 * * BREAKDOWN OF EQT WORD 12 * * BIT USAGE * 0-7 NOT USED * 8 WAITING FOR DATA * 9 REQUEST PENDING * 10 LISTEN MODE ENABLED * 11 NOT USED * 12 READ/WRITE FLAG(FOR DATA ON REQ AND DATA) * 13 REQUEST AND DATA(1=YES,0=REQ ONLY) * 14 NO DMA,DMA (0=DMA,1=SPECIAL OPEN LOOP) * 15 READ/WRITE FLAG(ON CURRENT TRANSACTION) SKP I.65 NOP JSB SETIO CONFIGURE I/O INSTRUCTIONS LDA EQT13,I FIRST ENTRY SZA FOR DEVICE? JMP NFIR NO. 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 CMB,INB GET INTERRUPT LINK STB EQT13,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 .100 IOR .200 AND ON POWER FAIL STA EQT4,I * NFIR LDA EQT4,I GET EQT WORD 4 RAL ROTATE TO ISOLATE BUSY BIT SSA,RSS IS IT SET? JMP NFIR1 NO - NORMAL ENTRY CLA WAS BUSY - SIMULATE LISTEN REQUEST STA EQT6,I (POWER FAIL CONDITION) JMP STPRQ SEND STOP NFIR1 LDA EQT6,I GET REQUEST CODE AND B377 MASK OFF CODE STA EQT6,I AND SAVE IT CLE CLEAR E REG CPA B2 IS IT A WRITE? CCE,RSS YES...SET E REG CPA B1 IS IT A READ? JMP REQ YES...WRITE OR READ CPA B3 IS IT A STOP REQUEST? JMP STPRQ YES CPA B203 IS IT A CLEAR REQ? JMP LCREQ YES...CLEAR REQ. CPA B103 IS IT AN ENABLE LISTEN MODE JMP LCREQ YES RQERR LDA B2 CONTROL REQUEST ERROR RSS RWERR CLA,INA READ WRITE ERROR JMP IDON RETURN * B3 OCT 3 B377 OCT 377 SKP * * HERE FOR CLEAR REQUEST AND ENABLE LISTEN MODE * LCREQ LDA EQT12,I GET CURRENT STATUS OF CARD AND WTMSK MASK OFF WAITING FOR DATA FLAG SZA ARE WE WAITING FOR DATA? JMP STPRQ YES...SEND STOP LDA EQT6,I GET REQUEST TYPE CPA B103 WAS IT ENABLE LISTEN MODE? JSB LSREQ YES - GO ENABLE LISTEN JSB CLREQ NO - MUST BE CLEAR REQUEST STA EQT12,I SAVE STATUS JSB ICHAS SAVE COMPLETION RETURN POINT LDB B1 GET GOOD STATUS BIT JMP BUSY4 GO TO COMPLETION RETURN * * SUBROUTINE TO SET UP ENABL LSTN MODE * LSREQ NOP LISTI STC 0,C SET RECEIVE INTERRUPT MODE CLA STA EQT15,I DISABLE TIMEOUT LDB LSTNI GET ADDRESS OF LISTEN INTERRUPT LDA .020 SET LISTEN ENABLED STATUS ISZ LSREQ BUMP RETURN POINT JMP LSREQ,I RETURN * * SUBROUTINE TO ISSUE CLEAR REQUEST * CLREQ NOP JSB RDD.C READ DATA AND STATUS FROM CARD TO CLEAR IT LDB UNKNI GET UNKNOWN INTERRUPT ADDRESS CLA RESET STATUS JMP CLREQ,I RETURN * * HERE FOR SEND STOP REQUEST * 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 SKP * * SUBROUTINE TO SEND A STOP * SSTOP NOP SAVE RETURN ADDRESS LDA CC GET STOP WORD JSB OUTPA SEND STOP JMP SSTOP,I RETURN * * SUBROUTINE TO SEND REQUEST COMING * SRC NOP LDA CA GET REQUEST COMING WORD JSB OUTPA SEND WORD JMP SRC,I RETURN * * ALL NORMAL EXITS FROM INITIATOR COME THRU HERE * IEXIT STC 0,C SET FOR RECEIVE MODE CLA GET A ZERO JMP IDON1 RETURN * * * SUBROUTINE TO SEND TNW * STNW NOP LDA CB GET TRANSMIT NEXT WORD JSB OUTPA OUTPUT WORD JMP STNW,I RETURN * * SUBROUTINE TO RETRANSMIT LAST WORD * SRLW NOP LDA CD RETRANSMINT LAST WORD JSB OUTPA OUTPUT CHARACTER JMP SRLW,I RETURN * * ROUTINE TO SET ERROR FLAG IF DRIVER CURRENTLY BUSY * PROCESSING A REQUEST * BUSY1 LDB B2 GET ERROR CODE BUSY JSB STAT PUT NEW STATUS IN EQT 5 JMP RWERR EXIT AND REPORT ERROR * * HERE FOR IMMEDIATE COMPLETION RETURN * A REG SHOULD CONTAIN THE STATUS OF LAST REQUEST * * BUSY2 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 * CURRENTLY EXISTING. * BUSY2 LDB B2 GET BUSY BIT FOR IMMED COMPL REJECT BUSY4 JSB STAT PUT NEW STATUS IN EQT 5 LDA B4 SET FOR IMMEDIATE COMPLETION SPC 1 * * HERE FOR COMPLETION RETURN * EQT 10 WILL BE SET DEPENDING UPON LISTEN MODE * STATUS * IDON STA TEMP2 SAVE COMPLETION STATUS LDA EQT12,I GET CURRENT DRIVER STATUS AND .020 MASK OFF ALL BUT LISTEN ENABLE LDB LSTNI GET ADDRESS OF LISTEN ENABLED ROUTINE SZA,RSS LISTEN MODE ENABLED? LDB UNKNI NO LDA TEMP2 GET STATUS AGAIN IDON1 JSB ICHAS SAVE ROUTINE ADDRESS JMP I.65,I RETURN TO RTE SYSTEM * SKP * * COME HERE ON A READ OR WRITE * MUST DECIDE WHETHER OR NOT TO SEND OR RECEIVE * REQ CLA GET READ WRITE FLAG IN BIT 15 ERA STA RWFLG SAVE READ/WRITE FLAG LDA EQT12,I GET CURRENT STATUS AND WTMSK MASK FOR WAIT STA WAITF SAVE WAIT FLAG LDA EQT12,I GET CURRENT STATUS AND .010 GET REQUEST COMING FLAG STA RPFLG SAVE REQUEST COMING FLAG LDA EQT12,I GET STATUS WORD AND .020 MASK ALL BUT LISTEN ENABLED FLAG STA LSNFG SAVE LISTEN ENABLED FLAG LDA EQT9,I GET SUBMODE AGAIN AND B7 MASK OFF FOR SUBMODE STA B LEGAL SUBMODE...0-2 ADB MN3 SSB GREATER THAN 2? SSA OR NEGATIVE? JMP RQERR YES...ERROR ADA BRAD GET BRANCH ADDRESS ON SUBMODE LDB A,I GET ADDRESS JMP B,I GO TO CORRECT ROUTINE * SKP * * HERE FOR RECEIVE OR TRANSMIT DATA ONLY * TRDTA LDA WAITF GET WAITING FOR DATA FLAG SZA,RSS ARE WE WAITING? JMP BUSY1 NO...SET REQ NOT ACCEPTED...RETURN LDB B4 GET LENGTH ERROR BIT LDA EQT8,I GET LENGTH SZA,RSS ZERO LENGTH...ILLEGAL JMP BUSY ZERO LENGTH...ERROR BIT 2 LDB RWFLG GET READ WRITE FLAG CLE,SZB,RSS READ? JMP MODK1 YES LDA EQT11,I GET OTHER SIDES MODE AND B7 MASK OFF ALL BUT MODE CLE,SZA DMA OPEN? CCE NO...DMA SPECIAL MODK1 CLA GET A ZERO ERA,RAR SET DMA MODE IOR B SET IN READ WRITE FLAG IOR EQT12,I MASK INTO STATUS WORD AND MN401 MASK OFF DATA PENDING STA EQT12,I SAVE CURRENT STATUS LDB WDINT SET FOR POSSIBLE WRITE INTERRUPT SSA READ OR WRITE? JMP TRDT3 WRITE...DO NOT SET FOR DMA TRANSFER UNTIL READY LDA B77 GET MODE MASK...FOR CLEARING PARITY COUNT AND EQT11,I STA EQT11,I JSB GTDMA SET UP DMA LDB RDINT GET READ INTERRUPT TRDT3 JSB STNW TELL OTHER SIDE TO "LET HER GO" JMP IEXIT DO A CONTINUATION RETURN * B103 OCT 103 MN6 OCT 177772 B203 OCT 203 WTMSK OCT 400 RPFLG NOP LSNFG NOP UNKNI DEF IUNKN LSTNI DEF ILSTN RDINT DEF INTRD WDINT DEF INTWD WR1IT DEF ITWR1 BRAD DEF *+1 DEF RQ.DT DEF TRDTA DEF TRREQ RWFLG NOP WAITF NOP MN3 OCT -3 MN401 OCT 177377 B1 OCT 1 B10 OCT 10 .020 OCT 2000 .010 OCT 1000 * SKP * * *REQUEST AND DATA TRANSMISSION MODE * RQ.DT LDA EQT8,I FETCH BUFFER LENGTH LDB B4 GET LENGTH ERROR BIT CPA B4 LENGTH OF 4? RSS YES. JMP BUSY ERROR...THEY DONT KNOW WHAT THEY ARE DOING! LDA WAITF ARE WE WAITING FOR DATA LDB RPFLG GET REQUEST PENDING FLAG SZB,RSS REQUEST PENDING? SZA JMP BUSY2 YES...ILLEGAL REQUEST LDB EQT7,I GET BUFFER ADDRESS STB EQT9,I SAVE BUFFER ADDRESS INB INDEX TO DATA BUFFER LENGTH LDA B,I GET DATA BUFFER LENGTH LDB B4 GET LENGTH ERROR CODE JUST IN CASE SZA,RSS IS DATA LENGTH ZERO? JMP BUSY YES - REJECT THE CALL LDB EQT7,I GET EQT7 AGAIN ADB B2 GET DISPLACEMENT TO REQUEST BUFFER INFO LDA B,I GET REQUEST BUFFER ADDRESS STA EQT7,I SAVE REQUEST BUFFER ADDRESS INB GET NEXT ADDRESS LDA B,I GET REQUEST BUFFER LENGTH STA EQT8,I SAVE REQUEST LENGTH LDB RWFLG SET DATA DIRECTION FLAG LDA .100 GET BIT 12 SZB,RSS WRITE OR READ DATA? CLA READ DATA IOR .200 SET FOR REQUEST AND DATA * * HERE FOR STARTING OF A SEND REQUEST * SREQ1 IOR WTBIT SET FOR WRITING...BIT 15 IOR LSNFG MASK IN LISTEN ENABLED FLAG STA EQT12,I SET IT IN JSB SRC SEND REQUEST COMING LDB WR1IT JMP IEXIT DO A NORMAL CONTINUATION EXIT * B40 OCT 40 B77 OCT 77 .100 OCT 10000 .400 OCT 40000 WTBIT OCT 100000 * SKP * * HERE FOR RECEIVE OR TRANSMIT REQUEST ONLY * TRREQ LDA WAITF GET WAIT FLAG SZA ARE WE WAITING FOR DATA? JMP BUSY2 YES...REJECT REQUEST STA EQT11,I CLEAR PARITY AND MODE LDA RPFLG GET REQUEST PENDING FLAG SZA,RSS IS THERE A REQUEST PENDING? JMP TRROK NO - GO ON AND PROCESS ALF,ALF REQ PENDING - MOVE RPEND TO BIT 15 RAR,RAR XOR RWFLG XOR WITH READ/WRITE FLAG SZA,RSS IF ZERO, RPEND AND WRITE - ILLEGAL JMP BUSY1 REJECT REQUEST TRROK LDB RWFLG GET READ/WRITE FLAG CLA GET A ZERO SZB READ OR WRITE? JMP SREQ1 WRITE LDA LSNFG SET LISTEN FLAG..CURRENT STATUS OF DRIVER STA EQT12,I SAVE NEW STATUS LDB LNRCI GET READ REQ INTERRUPT JMP TRDT3 TELL OTHER SIDE TO CONTINUE * LNRCI DEF ILNRC * SKP * * CONTINUATION SECTION * C.65 NOP JSB SETIO CONFIGURE I/O INSTRUCTIONS LDA EQT1,I GET EQT WORD 1 SZA IS DRIVER BUSY? JMP C.651 YES - GO ON LDB EQT10,I DRIVER WAS NOT BUSY CPB LSTNI WAS IT IN LISTEN MODE? JMP C.651 YES - THAT'S OK CPB ILS4A WAS IT PROCESSING TRASH IN LSTN MODE? JMP C.651 YES - THAT'S OK, TOO STA EQT15,I SPURIOUS INTERRUPT - KILL TIMEOUT JSB RDD.C CLEAR CARD JMP CEXT4 AND EXIT C.651 LDB EQT10,I GET BRANCH ADDRESS FOR ROUTINE SZB,RSS MAKE SURE IT IS NOT ZERO JMP IUNKN GO TO UNKNOWN INTERRUPT PROCESSOR JSB TIMCK CHECK FOR TIMEOUT CPB INTTO WAS TIMEOUT EXPECTED? JMP B,I YES - GO AND PROCESS CPB LSTNI IN LISTEN MODE? JMP ILSN4 YES - IGNORE TIMEOUT CPB ILS4A PROCESSING TRASH IN LISTEN MODE? JMP ILSN4 YES - IGNORE TIMEOUT LDA .020 ELSE SET LISTEN MODE IN EQT 12 STA EQT12,I JMP LNRC2 AND GO SEND STOP * SKP * * UNKNOWN INTERRUPTS COME HERE * WE'RE IN TROUBLE IF WE EVER GET HERE!!!!! * IUNKN CLA GET A ZERO STA EQT12,I CLEAR ALL CARD STATUS JSB RDD.C CLEAR CARD BY READING IT LDB B77 SET ALL STATUS ERROR BITS ERB,CLE,ELB DROP OF 'OK' BIT JMP CEND GET OUT...NOW!!! * SKP * * HERE FOR FIRST INTERRUPT WHEN CARD IN LISTEN MODE * ILSTN JSB CHECK FIND OUT WHAT THEY SENT US JMP ILSN4 TIME OUT...IGNORE JMP ILSN3 PARITY ERROR...TELL THEM TO RETRY JMP ILSN5 STOP...IGNORE * * IF WE GET THIS FAR...CHECK RETURN A REG WITH DATA WORD * SZA,RSS MAKE SURE A BROKEN LINE DIDN'T SNEAK IN JMP CHCK2 BROKEN LINE...TURN OFF CARD CPA CA REQUEST COMING? JMP ILSN1 YES...PROCESS AS A REQUEST COMING LDB EQT1,I GET EQT 1 WORD SZB,RSS WAS DRIVER BUSY? JMP ILSN4 NO - JUST IGNORE INTERRUPT JSB SSTOP SEND STOP...UNKNOWN WORD LDB ILS4A SET CONTINUATOR ENTRY JMP CEXT1 EXIT CONTINUATOR WITH CARD IN XMIT MODE ILSN1 LDB EQT13,I GET I/O ADDRESS OF PROGRAM STB PROG SAVE ADDRESS ADB B17 GET TO STATUS LDA B,I GET STATUS AND B17 MASK OFF ALL BUT STATUS SZA BUSY? JMP ILSN3 YES...TELL OTHER SIDE TO RETRY LDB EQT13,I GET TO B REG ADB B12 GET TO B REG LDA EQT4 GET ADDRESS OF LU STA B,I SAVE ADDRESS JSB $LIST SCHEDULE PROGRAM OCT 101 PROG NOP LDA EQT12,I GET OLD STATUS AND .020 MASK OFF ALL BUT LISTEN ENABLED IOR .010 SET IN REQUEST PENDING STA EQT12,I AND SAVE IT ILSN4 CLA STA EQT15,I CLEAR TIMEOUT JSB RDD.C CLEAR CARD BY READING IT LDB LSTNI SET FOR LISTEN MODE INTERRUPT JMP CEXIT AND EXIT * * HERE IF WE GOT A PARITY ERROR * ILSN3 JSB SRLW RETRANSMIT LAST WORD JMP ILSN4 RESET AS THOUGH NOTHING HAPPENED * * HERE ON STOP...CLEAR STATUS * ILSN5 LDA EQT12,I AND MN1K MASK OF REQUEST PENDING FLAG STA EQT12,I JMP ILSN4 TERMINATE * ILS4A DEF ILSN4 SKP * * HERE FOR LENGTH COMING INTERRUPT * ILNRC JSB CCHCK CHECK FOR TIME OUT,PARITY ERROR,STOP INA NEGATE COUNT ADA EQT8,I IS IT WITHIN RANGE? LDB B40 GET ERROR CODE...INCASE OF ERROR SSA JMP LNRC4 SEND STOP AND TERMINATE LDA TEMP2 GET LENGTH AGAIN CMA GET COUNT POSITIVE STA EQT6,I SAVE LENGTH FOR RETURN STA EQT8,I SAVE FOR DMA TRANSFER JSB STNW TELL OTHER SIDE TO CONTINUE JSB CEXT2 DO CONTINUATION EXIT...GIVE NEXT INTERRUPT ADDRESS * SKP