ASMB,R,L,C HED D.65 91703-16101 * (C) HEWLETT PACKARD CO. 1976 NAM D.65 91703-16101 REV A 760308 SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. 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 3 * *********************************************** * *D.65 COMMUNICATIONS DRIVER FOR DS-1 BCS SYSTEMS * *SOURCE PART # 91703-18101 REV A * *REL PART # 91703-16101 REV A * *WRITTEN BY: LARRY POMATTO * *DATE WRITTEN: 9-18-74 * *MODIFIED BY: CHUCK WHELAN * *DATE MODIFIED: 01-07-76 * SPC 3 * * DEFINE ENTRY POINTS * ENT D.65,I.65 ENT LINK?,WAITF ENT INT? * SPC 3 * * DEFINE EXTERNALS * EXT DMAC1,DMAC2 EXT INT65 * SPC 3 * * DEFINE A AND B REG * A EQU 0 B EQU 1 SKP * * CALLING SEQUENCES * SPC 3 * TRANSMIT REQUEST AND DATA SPC 2 * JSB .IOC. * OCT XX1YY * JMP REJECT ADDRESS * DEF PRAM BUFFER * DEC 4 (LENGTH OF PARM BUFFER) * * *PBUF IRBUF (REQUEST BUFFER ADDRESS) * IRBFL (REQUEST BUFFER LENGTH) * IDBUF (DATA BUFFER ADDRESS) * IDBFL (DATA BUFFER LENGTH) * SPC 3 * RECEIVE OR TRANSMIT DATA SPC 2 * JSB .IOC. * OCT XX2YY * JMP REJECT ADDRERSS * DEF DATA BUFFER ADDRESS * DEC DATA BUFFER LENGTH * SPC 3 * RECEIVE OR SEND REQUEST SPC 2 * JSB .IOC. * OCT XX3YY * JMP REJECT ADDRESS * DEF BUFFER ADDRESS * DEC BUFFER LENGTH * SPC 4 * ENABLE LISTEN (SPECIAL "READ REQUEST") SPC 3 * JSB .IOC. * OCT 113YY * JMP REJECT ADDRESS * DEF BUFFER ADDRESS * DEC BUFFER LENGTH * SPC 3 * CLEAR REQUEST SPC 2 * JSB .IOC. * OCT 000YY * SPC 3 * SEND STOP SPC 2 * JSB .IOC. * OCT 304YY * JMP REJECT ADDRESS * SPC 3 * * YY=LU XX=10 READ =20 WRITE * * * NOTE: * * * ERROR BIT DISCRIPTION * * ERROR BIT ERROR * 0 REQUEST COMPLETED SUCCESSFULLY * 1 LENGTH ERRROR ON REQUEST * 2 NO DATA TO READ OR WRITE * 3 RRECEIVED A STOP (-1 LENGTH OK OTHERWISE ERROR) * 4 REQUEST REJECTED...DRIVER ACTIVE * 5 PARITY ERROR * 6 NO REQUEST PENDING (ONLY ON READ REQUEST) * 7 BROKEN LINE (CARD DEACTIVATED) * * * WHENEVER YOU DON'T KNOW WHAT TO DO, ISSUE A CLEAR REQUEST * THIS COMMAND WILL CLEAR THE DRIVER, THE CARD, AND THE * OTHER CARD AND DRIVER AS WELL (OR IT SHOULD???) * SKP * HERE IS THE INITIALIZATION SECTION * SPC 3 D.65 NOP CLE SFC 0 IS INTERRUPT SYSTEM ON? CCE NO CLF 0 TURN OFF INTERRUPTS STA EQTA SAVE A REG CLA STA EXIT0 STA EXIT2 STA CKFLG CLEAR PARITY ERROR FLAG! STA INT? CLEAR LISTEN FLAG CPA LINK? IS LINK ENABLED? JMP D.65,I NO--EXIT AS DUMMY * ERA STA IFLAG SAVE INTERRUPT ON FLAG STB REQA SAVE REQUEST WORD 2 ADDRESS LDB DBUSY GET DRIVER BUSY FLAG STB DBUSX SAVE ORIGINAL STATE SZB,RSS IS DRIVER BUSY? JMP D.652 NO LDA REQA,I GET REQUEST AND C700 GET FUNCTION CODE SZA IS IT A CLEAR REQ? JMP RREQ NO...REJECT REQUEST LDA EQTA,I GET SELECT CODE AND C77 MASK ALL BT SELECT CODE CPA LU IS SAME LU? RSS YES JMP RREQ NO...BUSY...REJECT REQUEST D.652 ISZ DBUSY SET DRIVER BUSY FLAG JSB INTON TURN ON INTERRUPT SYSTEM JSB SETIO WELL NOW WE CAN SET THE I/O INSTRUCTIONS LDA REQC GET REQUEST CODE LDB REQC ADB CM5 SSA,RSS SSB,RSS FUNCTION WITHIN RANGE JMP SFERR NO...SUB FUNCTION ERROR ADA BTABA GET ENTRY INTO BRANCH TABLE LDB A,I GET ADRESS JMP B,I GO TO ROUTINE * * HERE FOR REQUEST ERROR * SFERR LDA DBUSX GET OLD BUSY FLAG STA DBUSY RESET FLAG TO ITS OLD STATE JMP ENRQ1 AND GO OUT ERROR EXIT RREQ JSB INTON TURN ON INTERRUPT SYSTEM LDB DBBIT SET REQUEST ERROR BIT JMP ENRQ1+1 EXIT SPC 3 IFLAG NOP LU NOP REQC NOP EQTA NOP REQA NOP DBUSY NOP DBUSX NOP C700 OCT 700 C77 OCT 77 CM5 OCT -5 LINK? OCT 1 LINK ENABLED FLAG--SET ENABLED * BTABA DEF *+1 DEF CLREQ DEF RQ.DT DEF TRDTA DEF TRREQ DEF STREQ SKP * * HERE FOR CLEAR REQUEST * CLREQ LDA DBUSX IS THE CONTINUATOR BUSY? SZA JMP STREQ YES JSB OFDMA YES...CLEAR DMA CLB,CLE,INB,RSS SET FOR REQUEST COMPLETE ENDRQ CCE SET ERROR CONDITION JSB STAT UPDATE STATUS JSB CLEAR CLEAR DRIVER AND CARD STA WAITF AND WAIT FOR DATA FLAG SEZ,RSS ERROR CONDITION? JMP EXIT0 NO - NORMAL RETURN * ENRQ1 CLB CLA,INA JMP D.65,I ERROR RETURN * DMAC NOP WAITF NOP DATFG NOP IJMP NOP EQTW2 NOP C374K OCT 37400 * * * DRIVER AND CARD CLEAR ROUTINE * CLEAR NOP STB DMAC SAVE B REGISTER JSB RDD.C CLEAR CARD LDB DMAC GET B REGISTER AGAIN STA DMAC STA DBUSY STA DBUSX STA IJMP STA OUTFG JMP CLEAR,I SKP * * HERE FOR TRANSMIT REQUEST AND DATA * RQ.DT LDA WAITF GET WAITING FOR DATA FLAG LDB C20 GET ERROR CODE...IF REQUIRED SZA WAITING FOR DATA? JMP ENDRQ YES...ERRORR LDA RWFLG GET READ/WRITE FLAG STA DRWFG SAVE AS DATA READ WRITE FLAG CLA,INA GET A 1 STA RWFLG SET FOR TRANSMIT REQUEST LDA REQW4,I GET LENGTH WORD LDB C2 GET ERROR CODE CPA C4 IS IT LENGTH OF 4? RSS YES JMP ENDRQ NO...ERROR LDA REQW3,I GET ADDRESS JSB INDCK GO CHASE DOWN THOSE LITTLE BITS STA REQW3 SET FOR TRANSMISSION ADDRESS INA GET DISPLACEMENT TO LENGTH STA REQW4 SAVE LENGTH WORD STA DATFG SET REQUEST AND DATA FLAG CLA GET A ZERO FOR PARITY CLEAR JMP TRRQ7 TREAT AS A STANDARD REQUEST * C4 OCT 4 C20 OCT 20 RWFLG NOP DRWFG NOP REQW3 NOP REQW4 NOP * SKP * * HERE FOR SEND OR RECEIVE DATA * TRDTA LDA WAITF GET WAITING FOR DATA FLAG LDB C4 GET ERROR CODE...IF REQUIRED SZA,RSS WAITING? JMP ENDRQ NO...ERROR....NO DATA LDA REQW4,I GET LENGTH SZA ZERO OR SSA NEGITIVE? JMP ENDRQ YES...ERROR STA RBUFL SAVE LENGTH WORD FOR DATA LDA REQW3,I GET DATA ADDRESS JSB INDCK STA RBUFA JSB ITRAN SET UP INCASE INTERRUPT TRANSFER LDA RWFLG READ OR WRITE ? LDB NTWDI GET WRITE DATA INTERRUPT SZA READ OR WRITE? JMP TREQ3 WRITE JSB DMA GET DMA (IF WE HAVE ONE) LDA DMAF GET DMA FLAG LDB NDMAI GET CORRRECT INTERRUPT DEPENDING ON DMA SZA DMA? LDB NTRDI YES JMP TREQ3 TELL OTHER SIDE TO CONTINUE * C2 OCT 2 NTWDI DEF INTWD DMAF NOP NDMAI DEF INDMA NTRDI DEF INTRD SKP * * HERE FOR SEND OR RECEIVE REQUEST * TRREQ LDA WAITF GET WAITING FOR DATA FLAG LDB C20 GET ERROR CODE...IF REQUIRED SZA WAITING FOR DATA? JMP ENDRQ YES...ERROR STA DATFG SET REQ. ONLY IN FLAG LDB REQA,I CHECK TO SEE IF LISTEN MODE BLF COMMAND RBL,RBL SSB JMP LSTEN YES! * TRRQ7 STA PARCT CLEAR PARITY ERROR COUNT LDB RWFLG GET READ WRITE FLAG SZB READ OR WRITE JMP TREQ1 WRITE LDB LSTNI GET REQUEST COMING INTERRUPT RSS TREQ3 JSB STNW TELL OTHER SIDE TO CONTINUE JMP TREQ2 EXIT TREQ1 JSB SRC SEND REQUEST COMING...WAKE UP OTHER SIDE LDB SLWI GET SEND LENGTH WORD INTERRUPT TREQ2 STB IJMP SAVE FOR INTERRUPT JMP ADDRESS LDA REQW3,I GET REQUEST BUFFER ADDRESS JSB INDCK STA RBUFA SAVE BUFFER ADDRESS LDA REQW4,I GET LENGTH STA RBUFL SAVE LENGTH LDB DBBIT GET EQT BUSY BIT JSB STAT AND PUT IT INTO STATUS LDA OUTFG GET OUTPUT FLAG SZA,RSS IS IT ZERO? JMP STC1 YES - DON'T OUTPUT ANYTHING LDA OTWRD GET WORD TO OUTPUT OTA2 OTA 0 CLA STC1 STC 0,C JMP EXIT0 AND RETURN * LSTEN STA PARCT CLEAR PARITY ERROR COUNT CLA,INA STA INT? SET LISTEN FLAG CLA STA OUTFG CLEAR OUTPUT FLAG LDA LSTNI STA IJMP SETUP IJMP LDA REQW3,I JSB INDCK STA RBUFA SAVE BUFFER ADDRESS LDA REQW4,I STA RBUFL SAVE BUFFER LENTH CLB,INB JSB STAT CLEAR STATUS CLA STA DBUSY JMP STC1 AND EXIT, SETTING CARD IN LISTEN MODE * * PARCT NOP C100 OCT 100 LNCI DEF ILNC SLWI DEF ISLW LSTNI DEF ILSTN RBUFA NOP RBUFL NOP DBBIT OCT 100000 SKP * * HERE FOR STOP REQUEST * STREQ JSB SSTOP SEND STOP LDB SSTPI GET DEF TO STOP COMPLETION POINT STB IJMP AND STORE IT IN JUMP POINT LDB DBBIT SET EQT BUSY JSB STAT LDA OTWRD GET OUTPUT WORD OTA3 OTA 0 OUTPUT IT TO CARD CLA STC2 STC 0 TURN BOARD ON IN TRANSMIT MODE JMP EXIT0 * * SKP * * SUBROUTINE TO GET A DMA CHANNEL IF PRESENT * E REG SET...DMA AVAILABLE * GTDMA NOP CLF 0 TURN OFF INTERRUPT SYSTEM LDA EQTA,I SSA,RSS JMP NODMA LDA DMAC1 GET CHANNEL #1 CCE,SZA,RSS IS THERE DMA IN THE SYSTEM? JMP NODMA NO SSA IS CHANNEL #1 BUSY? JMP C1BSY YES...TRY CHANNEL 2 ELA,RAR SET CHANNEL 1 BUSY...WE HAVE IT! STA DMAC1 SAVE CHANNEL # JMP GDMA1 C1BSY LDA DMAC2 GET CHANNEL #2 SZA IS IT NOT THERE SSA OR BUSY? JMP NODMA YES...NOT THERE OR BUSY ELA,RAR SET DMA BUSY STA DMAC2 GDMA1 CLE,RSS CLEAR E REG NODMA CLA,CLE NO DMA...CLEAR DMA CHANNEL ELA,RAR MASK OFF DMA BUSY BIT STA DMAF SAVE DMA CHANNEL # JSB INTON TURN ON INTERRUP SYSTEM JMP GTDMA,I RETURN...E REG SET...THERE IS DMA * SKP * * SUBROUTINE TO SEND A STOP * SSTOP NOP LDA CC GET STOP WORD JSB OUTPA SEND STOP JMP SSTOP,I RETURN SPC 3 * * SEND REQUEST COMING * SRC NOP LDA CA GET REQUEST COMING WORD JSB OUTPA SEND WORD JMP SRC,I RETURN SPC 3 * * SEND TNW * STNW NOP LDA CB GET NEXT WORD JSB OUTPA JMP STNW,I RETURN SPC 3 * * RETRANSMIT LAST WORD * SRLW NOP LDA CD GET RETRANSMIT LAST WORD JSB OUTPA JMP SRLW,I RETURN SPC 3 * * SUBROUTINE TO SEND A WORD * OUTPA NOP STA OTWRD SET UP TO OUTPUT A ISZ OUTFG SET UP FLAG TO SAY TO OUTPUT JMP OUTPA,I RETURN SPC 3 * * SUBROUTINE TO READ CARD DATA AND STATUS * RDD.S NOP JSB RDD.D READ DATA AND STATUS STA TEMP2 SAVE DATA WORD RBR,SLB MISSED RECEPTION? RSS YES JMP *+3 NO JSB SRLW TELL OTHER SIDE TO TRY AGAIN LIA1 LIA 0 CLEAR THE CARD LDA TEMP2 GET DATA WORD AGAIN RBL GET BIT SET CORRECT JMP RDD.S,I AND RETURN * TEMP2 NOP CA OCT 170017 REQUEST COMING CB OCT 170360 TRANSMIT NEXT WORD CC OCT 7760 SEND STOP CD OCT 7417 RETRANSMIT LAST WORD * * RDD.D NOP ROUTINE TO READ DATA AND STATUS LIA2 LIA 0 READ DATA LIBC1 LIB 0,C READ STATUS JMP RDD.D,I * * RDD.C NOP ROUTINE TO CLEAR CARD BY READING IT CLCC3 CLC 0,C PUT CARD INTO RECEIVE MODE JSB RDD.D READ CARD TO CLEAR IT CLA JMP RDD.C,I * * * SUBROUTINE TO CHASE DOWN INDIRECTS * INDCK NOP RSS LDA A,I RAL,CLE,SLA,ERA JMP *-2 JMP INDCK,I * * * INTON NOP ROUTINE TO TURN ON INTERRUPT SYSTEM LDB IFLAG GET INTSYS STATE FLAG SSB WAS INTSYS ON? STF 0 YES - TURN IT BACK ON, ELSE DON'T JMP INTON,I * SKP * * SUBROUTINE TO START DMA * DMA NOP LDA DMAF SZA,RSS DO WE HAVE A DMA? JMP DMA,I NO IOR STCC GET STC 0,C COMMAND STA STCD2 SET FOR ACTIVE DMA XOR C504K CHANGE TO CLC 2 OR 3 STA CLCD1 XOR C4K CONVERT TO STC 0 COMMAND STA STCD1 XOR C100 CONVERT TO OTA 2 OR 3 STA OTAD2 STA OTAD3 XOR C4 CONVERT TO OTA 6 OR 7 STA OTAD1 XOR C4.1K CONVERT TO CLC 6 OR 7 COMMAND STA CLCD2 LDA RWFLG GET READ WRITE FLAG CCE,SZA READ OR WRITE? CLE WRITE LDA LU GET SELECT CODE SEZ,RSS OUTPUT? IOR C20K MASK IN FOR OUTPUT OTAD1 OTA 0 OUPUT CONTROL WORD #1 CLCD1 CLC 0 LDA RBUFA GET BUFFER ADDRESS ELA,RAR SET INPUT/OUPUT BIT OTAD2 OTA 0 OUPUT CONTROL WORD #2 STCD1 STC 0 LDA RBUFL GET LENGTH CMA,INA NEGATE LENGTH OTAD3 OTA 0 STCD2 STC 0,C LDA DMAF GET DMA FLAG STA DMAA SET IF FOR DMA ACTIVE LDB LU,I GET INTERRUPT JSB INSTRUCTION STB A,I SAVE FOR DMA INTERRUPT INSTURCTION JMP DMA,I RETURN * STCC STC 0,C DMAA NOP C4K OCT 4000 C504K OCT 5004 C20K OCT 20000 C4.1K OCT 4100 * SKP * * SUBROUTINE TO TURN OFF DMA CHANNEL AND DEALOCATE WHEN * DMA COMPLETED * OFDMA NOP LDB DMAF SZB,RSS DO WE HAVE A DMA? JMP OFDMA,I NO CLF 0 TURN OFF INTERRUPT SYSTEM JSB CLDMA CLEAR DMA CHANNEL SLB,RSS IS IT 6 OR 7 STB DMAC1 6...DEALOCATE DMA CHANNEL 6 SLB STB DMAC2 7...DEALOCATE DMA CHANNEL 7 LDA HLTI GET HALT INSTRUCTION IOR B SET IN HALT 6 OR 7 STA B,I STORE HALT INSTURCTION IN DMA CHANNEL CLA GET A ZERO STA DMAF CLEAR DMA ALOCATED FLAG STA DMAA CLEAR DMA ACTIVE FLAG JSB INTON TURN INTSYS BACK ON JMP OFDMA,I RETURN * HLTI HLT 0 * SPC 3 * * SUBROUTINE TO CLEAR DMA CHANNEL...IF ASSIGNED * CLDMA NOP LDA DMAA GET DMA ACTIVE FLAG SZA DMA ACTIVE? CLCD2 CLC 0 YES...CLEAR IT CLA GET A ZERO STA DMAA CLEAR DMA ACTIVE FLAG JMP CLDMA,I RETURN SKP * * SUBROUTINE TO SET I/O INSTRUCTIONS * SETIO NOP CLA STA OUTFG LDA EQTA,I GET SELECT CODE AND C77 STA LU LDA EQTA GET ADDRESS OF STATUS WORD INA STA EQTW2 INA GET ADDRESS OF LENGTH WORD STA EQTW3 LDA REQA,I GET SUB MODE RAL,RAL ALF,ALF AND C7 STA REQC LDA REQA,I GET READ WRITE FLAG ALF,RAR AND C7 STA RWFLG LDA REQA GET REQUEST BUFFER ADDRESS ADA C2 STA REQW3 INA GET REQUEST LENGTH ADDRESS STA REQW4 * * HERE WE CONFIGURE ALL THE I/O INSTRUCTIONS * LDA STCC GET STC 0,C INSTUCTION IOR LU MASK IN SELECT CODE STA LSCMD STA STC1 XOR C4K CONVERT TO CLC 0,C INSTUCTION STA CLCC1 STA CLCC2 STA CLCC3 XOR C5K CONVERT TO STC 0 COMMAND STA TRCMD STA STC2 XOR C100 CONVERT TO AN OTA 0 COMMAND STA OTA1 STA OTA2 STA OTA3 XOR C300 CONVERT TO LIA COMMAND STA LIA1 STA LIA2 XOR C5K CONVERT TO LIB 0,C COMMAND STA LIBC1 * * DONE WITH I/O CONFIGURATION * CLCC1 CLC 0,C TURN CARD OFF JMP SETIO,I RETURN * C5K OCT 5000 C300 OCT 300 C7 OCT 7 EQTW3 NOP * SKP * * CONTINUATOR SECTION * I.65 NOP CLCC2 CLC 0,C TURN OFF CARD STA A1 SAVE A CLA CPA LINK? IS LINK DISABLED? JMP DUMMY YES * STB RB1 B ERA,ALS SOC INA STA A2 E AND O REG LDB DBBIT CLA,INA CPA INT? IF IN LISTEN MODE (OCT 113YY), ISZ DBUSY SET D.65 BUSY, CPA INT? AND JSB STAT SET EQT ENTRY BUSY * CLA STA OUTFG AND CLEAR TRANSMIT FLAG LDB IJMP GET ADDRESS OF ROUTINE TO GO TO SZB IF ZERO TREAT AS UNKNOWN INTERRUPT JMP B,I OTHERWISE GO TO CORRECT ROUTINE JSB RDD.C CLEAR THE CARD JMP CEXT3 EXIT AS IF NOTHING HAD HAPPENED * DUMMY LDA A1 EXIT I.65 JMP I.65,I * SKP * * HERE FOR REQUEST COMING INTERRUPT * ILSTN JSB CHECK CHECK DATA JMP RETRY PARITY ERROR-TRY AGAIN! JMP ILSN1 STOP RECEIVED - IGNORE CPA CA WAS IT REQUEST COMING? RSS JMP LNRC3 NO - SIMULATE PARITY ERROR JSB STNW REQUEST COMING - SEND TNW LDB LNCI SET CO-ROUTINE POINTER TO ILNC RSS AND RETURN ILSN1 LDB IJMP SET UP TO IGNORE STOP RECEIVED JMP CEXIT AND RETURN * RETRY ISZ CKFLG LDA CKFLG PARITY COUNTER> PRESET LIMIT (=8)? CPA YDSA? JMP LNRC3 YES,HAVE NO CHOICE BUT TO SET PARITY! LDB DBBIT JSB STAT SET DRIVER BUSY LDA RSS MODIFY DRIVER INITIATOR SECTION FOR RE-TRY. STA EXIT0 STA EXIT2 JSB SSTOP LDB SSTPI BUT 1ST,STOP ALL KNOWN TRANSMISSIONS! JMP CEXT1 EXIT0 NOP ENTERED HERE FROM D.65 INITIATOR. JMP D.65,I NORMALLY THIS CODE EXECUTED!!!! CLA STA EXIT0 HERE ONLY IF PARITY OCCURED. STA CMD JMP OTA1+1 YDSA? DEC 8 CKFLG NOP RSS RSS * SKP * * HERE FOR LENGTH WORD COMING INTERRUPT * ILNC JSB CCHCK CHECK FOR PARITY ERROR OR STOP INA SET FOR CORRECT NEGITIVE COUNT ADA RBUFL GREATER THAN MAX? SSA JMP LNRC4 YES...ERROR LDA TEMP2 GET LENGTH AGAIN CMA MAKE COUNT POSITIVE STA RBUFL STA EQTW3,I SAVE LENGTH JSB STNW TELL OTHER SIDE TO CONTINUE JSB CEXT2 DO CONTINUATION EXIT * SKP * * HERE ON A MODE WORD COMING INTERRUPT * JSB CCHCK CHECK FOR STOP AND PARITY RAL,CLE,ERA STA OMODE SAVE OTHER SIDES MODE CLA,SEZ REQUEST AND DATA? CCA YES STA WAITF SET OR CLEAR DATA FLAG IMOD9 JSB ITRAN SET UP INCASE OF INTERRUPT TRANSFER LDA OMODE GET OTHER SIDES MODE SZA,RSS DMA SPECIAL? JSB GTDMA NO...DMA OPEN...SEE IF WE GOT DMA LDA RBUFL GET REQUEST BUFFER LENGTH SZA,RSS ZERO LENGTH REQUEST JMP ERQ1 YES...GO DO COMPLETION LDA PARCT GET PARITY COUNT CPA YDSA? MAX NUMBER OF TIMES? JMP LNRC3 YES...PARITY ERROR JSB DMA YES...TURN IT ON LDA PARCT GET PARITY COUNT ISZ PARCT INCREMENT PARITY COUNT SZA FIRST TIME? JMP ILNC3 NO LDA OMODE GET OTHER MODE SZA IS OTHER MODE DMA? JMP ILNC2 NO LDA DMAF DO WE HAVE DMA? SZA JMP ILNC4 YES ISZ OMODE SET OTHER MODE NON ZERO JMP ILNC2 SET FOR NON DMA TRANSFER ILNC4 LDA GDMAW GET WE HAVE DMA WORD JSB OUTPA SEND IT RSS ILNC2 JSB STNW YES...TELL THEM TO CONTINUE RSS ILNC3 JSB SRLW NO LDB IRTNS INTERRUPT DATA TRANSFER? LDA OMODE GET OTHER SIDE MODE SZA DMA OPEN? JMP CEXIT NO JSB CEXT2 YES * * SKP * * HERE FOR REQUEST COMPLETE...DMA * JSB CLDMA CLEAR DMA ACTIVE...IF SET JSB CHECK CHECK FOR PARITY ERRORS AND STOP JMP IMOD9 PARITY ERROR...RETRY JMP LNRC5 STOP WAS RECEIVED ERQ1 LDA WAITF REQUEST AND DATA SZA,RSS REQUEST & DATA? JSB OFDMA TURN OFF DMA...REQUEST ONLY JSB STNW TELL OTHER SIDE ALL IS WELL JSB CEXT2 SET RECEIVE MODE TO GET REPLY * * HERE WHEN HANDSHAKING IS OVER * ICREQ JSB RDD.C CLEAR CARD JMP REQDN TERMINATE * A1 NOP A2 NOP RB1 NOP TEMPB NOP TEMPC NOP OMODE NOP GDMAW OCT 67 IRTNS DEF TRNSI C10 OCT 10 C40 OCT 40 C200 OCT 200 TEMPD NOP CREQI DEF ICREQ * SKP * * HERE ON RETURN FROM SENDING STOP * SSTPI DEF *+1 JSB RDD.C READ CARD TO CLEAR IT JSB OFDMA TURN OFF DMA CLA STA WAITF AND WAITING FOR DATA FLAGS * EXIT2 NOP "RSS" ONLY IF IN PARITY MODE. JMP REQDN STA EXIT2 LDB DBBIT JSB STAT JSB CLEAR JMP D.652 RE-INITIATE DRIVER CALL IF PARITY OCCURED. * * SKP * * HERE FOR REQUEST DATA COMING VIA INTERRUPTS * TRNSI JSB CHECK READ CARD JMP TRNS1 PARITY ERROR JMP LNRC5 STOP RECEIVED STA TEMPB,I SAVE VALUE ISZ TEMPB GET NEXT ADDRESS JMP *+3 TRNS1 STA TEMPB,I SAVE VALUE ISZ TEMPD INCREMENT PARITY COUNT ISZ TEMPC DONE? JMP ILNC2 NO LDB TEMPD GET PARITY ERRORS SZB ANY ERRORS? JMP IMOD9 YES...TRY AGAIN JMP ERQ1 NO...TERMINATE * SKP * * HERE FOR START OF DATA WRITE * INTWD JSB CCHCK CHECK FOR STOP OR PARITY ERROR CPA CB TRANSMIT NEXT WORD? RSS YES JMP LNRC3 NO...ERROR * * OTHER SIDE READ TO RECEIVE DATA * IWD1 JSB DMA GET DMA JSB ITRAN SET UP INCASE OF INTERRUPT TRANSFER LDB DDATI DMA DATA COMPLETE INTERRUPT LDA DMAF SZA DMA? JMP CEXT1 YES * * FALL THRU TO OUTDI IF NOT DMA TRANSFER * SKP * * HERE TO OUTPUT DATA ON INTERRUPT * OUTDI LDA TEMPB,I GET WORD JSB OUTPA OUTPUT WORD ISZ TEMPB GET NEXT ADDRESS LDB IOUTD GET CONTINUATION INTERRUPT ISZ TEMPC DONE? JMP CEXT1 NO...CONTINUE..LEAVE IN TRANSMIT MOD IWTRD JSB CEXT2 YES...SET FOR WAITING FOR STATUS * SKP * * HERE FOR STATUS ON DATA WRITE * JSB CHECK GO READ STATUS OF LAST TRANSFER JMP IWD1 PARITY ERROR...RETRY JMP LNRC5 STOP...ERROR CPA CB TNW? RSS ALL OK...TERMINATE JMP LNRC3 NO...TREATE AS A PARITY ERROR JSB OFDMA RESET DMA CLA GET A ZERO STA WAITF CLEAR WAITING FOR DATA INTERRUPT REQDN CLB,INB SET FOR ALL OK JMP CEND TERMINATE * DDATI DEF IDDAT IOUTD DEF OUTDI * SKP * * HERE FOR DMA COMPLETION...WRITE DATA * IDDAT JSB CLDMA TURN OFF DMA JSB CCHCK GO CHECK DATA QUALITY JMP IWTRD SET STATUS INTERRUPT * SKP * * HERE FOR LENGTH WORD TRANSMIT INTERRUPT * ISLW JSB CCHCK CHECK OF STOP OR PARITY ERROR CPA CB IS IT TNW? JMP ITWR2 YES CPA CD IS IT RLW? RSS YES JMP LNRC3 NO...ERROR CLA GET A ZERO INA,SZA HERE WE SIT AWHILE BEFORE TRYING AGAIN JMP *-1 JSB SRC TRY AGAIN LDB SLWI SET FOR SAME INTERRUPT JMP CEXIT DO CONTINUATION EXIT ITWR2 LDA RBUFL GET LENGTH CMA NEGATE COUNT JSB OUTPA OUTPUT LENGTH WORD JSB CEXT2 DO CONTINUATION EXIT * SPC 4 * * HERE TO SEND MODE WORD * JSB CCHCK STOP OR PARITY ERROR JSB GTDMA SEE IF WE CAN GET DMA CLA,SEZ,RSS YES INA NO LDB DATFG GET FLAG CLE,SZB REQUEST AND DATA? CCE YES ELA,RAR SET IN DATA FLAG JSB OUTPA OUTPUT WORD JSB CEXT2 DO CONTINUATION EXIT *