ASMB,R,L,C * * NAME: ID.00 * SOURCE: 92070-18082 * RELOC: 92070-16082 * PGMR: T.A.L. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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. * * *************************************************************** * NAM ID.00,0 92070-16082 REV.1941 800228 * ENT ID.00 EXT $IFTX,$DV15,$DV16,$DV17,$DV18,$DV19 EXT $IF5,$IF6,$DIOC,$LUTA,$DMPR * GEN 6,EID.00,TX:17 * A EQU 0 B EQU 1 * ID.00 NOP LDB $IFTX GET INTERFACE DRIVER STORAGE ADDR STB DMAAD SAVE IT ADB D13 COMPUTE BREAK FLAG ADDR STB BRKFL SAVE IT INB COMPUTE PARITY CHECK FLAG ADDR STB PCHKB SAVE IT INB COMPUTE IGNORE INPUT FLAG ADDR STB IGNOR SAVE IT INB COMPUTE BIT BUCKET ADDR STB BITBK SAVE IT AND B7 LDB ABRTE DON'T DOWN/DO FLUSH, NO MESSAGE SZA,RSS ABORT? JMP ABORT YES * CPA B1 INITIATE? JMP INIT YES STA DIREC SAVE DIRECTIVE CLA,INA LDB $IF5,I GET DVT ADDRESS JSB $DIOC SET UP DVT POINTERS LDA DIREC RESTORE DIRECTIVE CPA B2 CONTINUATION? JMP CONT YES CPA B3 TIMEOUT? JMP TIMOT YES * * POWERFAIL * * JMP PWRFL POWERFAIL * ABRTE OCT 140077 ABORT ERROR CODE B1 OCT 1 B2 OCT 2 B7 OCT 7 B3000 OCT 3000 D13 DEC 13 DIREC NOP DIRECTIVE * * * INITIATION * * INIT CLA STA IGNOR,I ZERO IGNORE INPUT FLAG LDA $DV15,I GET RQ AND B3 CPA B3 CONTROL REQUEST? JMP CNTRL YES * * BUILD DEFAULT CONTROL WORD * * LDA $DV18,I GET USER CONTROL WORD AND =B174377 ZERO XMIT,RCV & CHLN BITS LDB $DV15,I GET SUBFUNCTION & RQ IOR B1000 SET XMIT, BIT 9 SLB,RBL WRITE REQUEST? XOR B3000 NO, SET RCV, BIT 10 BLF,BLF SHIFT BINARY-ASCII BIT SSB BINARY? IOR BIT8 YES, SET FOR 8 DATA BITS SSB,RSS ASCII? XOR PCHKB,I YES, ADD ERROR CHECKING * STA $DV18,I SAVE CARD CONTROL WORD LDA $DV15,I GET RQ LDB $DV17,I GET TRANSMISSION LOG SLA READ REQUEST? JMP READ YES * * * WRITE REQUEST * * LDA $DV15,I CHECK FOR BINARY/ASCII AND BIT6 SZA,RSS ASCII? JMP ASCII YES * BINRY SZB,RSS BINARY ZERO XLOG? JMP ZLOG YES, INTERFACE COMPLETE JSB QUAD BUILD DATA QUAD, NO 'CRLF' OCT 71400 DMA CONTROL WORD DEF $DV18,I CARD CONTROL WORD DEF $DV16,I BUFFER ADDRESS DEF $DV17,I BUFFER LENGTH JMP ID.IO SEND DATA * ASCII LDA $DV15,I GET SUBFUNCTION AND BIT11 GET ESC BACKARROW BIT SZA PERFORM ESC BACKARROW? JMP ASBLK YES * * CHARACTER MODE * * LDA $DV15,I CHECK FOR 'CRLF' AND BIT7 SZA ADD CRLF? JMP BINRY NO SZB,RSS ASCII ZERO XLOG? JMP CRLF1 YES JSB QUAD BUILD DATA QUAD OCT 171400 DMA CONTROL WORD DEF $DV18,I ASIC CONTROL WORD DEF $DV16,I BUFFER ADDRESS DEF $DV17,I BUFFER LENGTH * CRLF1 JSB QUAD BUILD 'CRLF' QUAD OCT 71400 DMA CONTROL WORD DEF $DV18,I ASIC CONTROL WORD DEF CRLFA CRLF ADDRESS DEF M2 BUFFER LENGTH JMP ID.IO SEND DATA * * BLOCK MODE * * ASBLK SZB,RSS ASCII ZERO XLOG? JMP CRLFQ YES, OUTPUT CRLF JSB QUAD BUILD DATA QUAD OCT 171400 DMA CONTROL WORD DEF $DV18,I ASIC CONTROL WORD DEF $DV16,I BUFFER ADDRESS DEF $DV17,I BUFFER LENGTH * CRLFQ LDA $DV15,I CHECK FOR 'CRLF' AND BIT7 SZA ADD CRLF? JMP NOCR NO * JSB QUAD BUILD 'CRLF ESC_ DC1' QUAD OCT 71400 DMA CONTROL WORD DEF $DV18,I ASIC CONTROL WORD DEF CRLFA CRLF ADDRESS DEF M5 BUFFER LENGTH JMP ID.IO SEND DATA * NOCR JSB QUAD BUILD 'ESC_ DC1' QUAD OCT 71400 DMA CONTROL WORD DEF $DV18,I ASIC CONTROL WORD DEF ESCA ESC_ ADDRESS DEF M3 BUFFER LENGTH * * * START DMA * * ID.IO CLA,INA ALLOW TIMEOUT ISZ ID.00 SETUP FOR INTERFACE CONTINUE WDOUT CLC 21B,C SUSPEND AND CLC 23B,C TERMINATE DMA OPERATION CLB OTB 24B CLEAR BREAK FLAG OTB 31B CLEAR XMIT & RCV STC 30B,C ENABLE BREAK * LDB $IFTX GET QUAD INB STARTING ADDRESS OTB 20B STC 20B,C START DMA JMP ID.00,I INTERFACE COMPLETE/CONTINUE * WAIT STC 30B,C CLA,INA ALLOW TIMEOUT STA BRKFL,I SET BREAK FLAG ISZ ID.00 JMP ID.00,I INTERFACE CONTINUE * * * READ REQUEST * * READ SZB,RSS ZERO XLOG? JMP ZLOG YES, INTERFACE COMPLETE LDA $DV19,I GET OPTIONAL PARAMETER AND LBYTE REMOVE LOWER BYTE SZA,RSS HIBYTE > 0? JMP READB NO, CHECK LOW BYTE LDA $DV18,I GET ASIC CONTROL WORD AND M1011 REMOVE RCV & ECHO BITS IOR B1000 SET XMIT BIT STA TEMP SAVE ASIC CONTROL WORD JSB QUAD BUILD WRITE QUAD OCT 171400 DMA CONTROL WORD DEF TEMP CARD CONTROL WORD DEF $DV19 OPTIONAL PARAMETER ADDR DEF M1 BUFFER LENGTH * READB LDA $DV19,I GET OPTIONAL PARAMETER AND HBYTE REMOVE HIGH BYTE SZA,RSS LOW BYTE ZERO? JMP READQ YES, BUILD READ QUAD SSA,RSS POSITIVE NUMBER? CMA,INA YES, MAKE NEGATIVE INA SUBTRACT ONE STA IGNOR,I SAVE IN EXTENSION JSB QUAD BUILD READ QUAD OCT 171600 DMA CONTROL WORD DEF $DV18,I CARD CONTROL WORD DEF $DV16,I BUFFER ADDRESS DEF $DV17,I BUFFER LENGTH * LDA IGNOR,I GET NUMBER OF INTERRUPTS TO IGNORE SZA,RSS ZERO? JMP READ1 YES, READ ONE BYTE INTO BIT BUCKET * JSB QUAD BUILD BIT BUCKET QUAD OCT 71000 DMA CONTROL WORD DEF $DV18,I CARD CONTROL WORD DEF $DV16,I BUFFER ADDRESS DEF IGNOR,I BUFFER LENGTH JMP ID.IO SEND DATA * READ1 JSB QUAD BUILD READ BYTE QUAD OCT 71600 DMA CONTROL WORD DEF B2000 ASIC CONTROL WORD DEF BITBK BIT BUCKET ADDRESS DEF M1 JMP ID.IO READ BYTE * READQ JSB QUAD BUILD READ QUAD OCT 71600 DMA CONTROL WORD DEF $DV18,I CARD CONTROL WORD DEF $DV16,I BUFFER ADDRESS DEF $DV17,I BUFFER LENGTH JMP ID.IO SEND DATA * * M1 OCT -1 M2 OCT -2 M3 OCT -3 M5 OCT -5 BIT6 OCT 100 BIT 6, "BINARY-ASCII" BIT BIT7 OCT 200 BIT 7, "CRLF" BIT BIT8 OCT 400 BIT 8, "CHLN" BIT B1000 OCT 1000 BIT 9, "XMIT" BIT BIT11 OCT 4000 BIT 11, "ESC_" BIT M1011 OCT 171777 MASK RCV & ECHO, BITS (10 & 11) LBYTE OCT 177400 LOWER BYTE MASK HBYTE OCT 377 HIGH BYTE MASK * * * CONTROL REQUEST * * CNTRL LDA $DV15,I GET LSR 6 SUBFUNCTION AND B77 CPA B6 DYNAMIC STATUS? JMP DYNAM YES CPA B43 ENABLE/DISABLE ERROR CHECKING JMP PCHK YES CPA B23 CONTROL ASYNCHRONOUS INT.? JMP CASYN YES DONE CLA IGNOR REQUEST STA $DV16,I CLEAR ERROR CODE JMP ID.00,I INTERFACE COMPLETION * B6 OCT 6 B23 OCT 23 B43 OCT 43 B77 OCT 77 * * * DYNAMIC STATUS (FUNCTION CODE =6) * * DYNAM JSB STAT READ ASIC STATUS & OUTPUT CNTRL WRD JMP DONE INTERFACE COMPLETE * * * ENABLE/DISABLE ERROR (FUNCTION CODE = 43) * * PCHK LDA $DV16,I GET PARAMETER AND PMASK MASK PARITY & FRAMING ERROR STA PCHKB,I SAVE IN PARITY CHECK FLAG JMP IDCOM INTERFACE COMPLETE * PMASK OCT 30000 MASK PARITY & FRAMING ERROR BITS * * * ENABLE ASYNCHRONOUS INTERRUPT (FUNCTION CODE = 23) * * CASYN LDA $DV16,I GET PARAMETER SZA ENABLE ASYNC INT. JMP DASYN NO LDA $IF5,I SAVE DVT RESUME ADDR. LU1 STA $IFTX,I IN DVT EXTENSION. * EASYN JSB QUAD BUILD READ QUAD OCT 61600 DMA CNTRL WRD DONOT WRITE RESIDUE!!! DEF B2000 ASIC CONTROL WORD DEF BITBK BIT BUCKET ADDRESS DEF M1 1 BYTE CLA DISABLE TIMEOUT STA BITBK,I INITIALIZE BIT BUCKET JMP WDOUT SEND DATA * B2000 OCT 2000 BIT 10, RCV DC2 OCT 22 DC2 IN LOWER BYTE * * * DISABLE ASYNCHRONOUS INTERRUPT (FUNCTION CODE = 23) * * DASYN CLA ZERO DVT RESUME ADDR. STA $IFTX,I IN DVT EXTENSION. STA $DV16,I ZERO ERROR CODE JMP LUCHK CHECK FOR LU=1 SKP * * * CONTINUATION * * CONT LIA 24B SZA,RSS FRONT PANEL INTERRUPT? JMP CONT1 NO, CONTINUE CLA YES, ZERO OTA 24B SELECT CODE 24 * PWRFL LDB $IF6,I GET AVAILABILITY SSB,RSS BUSY? JMP BRK NO, CHECK FOR ASYNC CONDITION LDA BREAK DON'T DOWN/DON'T FLUSH, RESTART NO MESS STA $DV16,I ERROR CODE CLC 21B,C SUSPEND AND CLC 23B,C TERMINATE DMA OPERATION JSB STAT READ ASIC STATUS & OUTPUT CNTRL WRD JMP IDCOM INTERFACE COMPLETE * CONT1 SFC 22B DMA COMPLETION? JSB $DMPR NO, MEMORY ERROR LDA $IF6,I GET AVAILABILITY SSA BUSY? JMP TICST YES ISZ ID.00 NO, SETUP FOR CONTINUE LDA $IFTX,I GET DVT RESUME ADDR. SZA ASYNCHRONOUS INT. ENABLED? JMP CONT4 YES CLC 30B,C CLEAR INTERRUPT FLAG CLC 21B,C SUSPEND AND CLC 23B,C TERMINATE DMA OPERATION LDA B4 REPORT AN ILLEGAL INTERRUPT JMP ID.00,I INTERFACE CONTINUE * CONT4 STA $IF5,I SAVE DVT RESUME ADDR. LDB BITBK,I CHECK IF BLOCK MODE ENABLED LSR 8 SHIFT TO LOWER BYTE CPB DC2 BLOCK MODE? JMP HOLD YES ISZ ID.00 DEVICE RESUME JMP EASYN ENABLE ASYNCHRONOUS INT. * HOLD JSB QUAD BUILD DC1 QUAD OCT 171400 DMA CONTROL WORD DEF B1000 ASIC CONTROL WORD DEF DC1A DC1 ADDRESS DEF M1 1 BYTE JSB QUAD BUILD READ QUAD OCT 171600 DMA CONTROL WORD DEF B2000 ASIC CONTROL WORD DEF BITBK BIT BUCKET ADDRESS DEF M1 1 BYTE JSB QUAD BUILD 'DC1' QUAD OCT 71400 DMA CONTROL WORD DEF B1000 ASIC CONTROL WORD DEF DC1A BUFFER ADDRESS DEF M1 BUFFER LENGTH * LDA B3 ASSERT HOLD & TIMEOUT STA BITBK,I JMP WDOUT SEND DATA * * * READ ASIC STATUS * * STAT NOP READ ASIC STATUS & OUTPUT CNTRL WRD LIA 31B READ OUTPUT CONTROL WORD STA $DV19,I SAVE IT LIA 32B READ ASIC STATUS WORD IOR BRKFL,I MERGE BREAK FLAG INTO STATUS STA $DV18,I SAVE IT JMP STAT,I RETURN * TICST JSB STAT READ ASIC STATUS & OUTPUT CNTRL WRD SSA VAL DATA BIT SET? JMP TLOG YES, IGNOR ERROR BITS RAL SSA BREAK BIT SET? JMP WAIT YES, WAIT FOR DMA COMPLETION AND EMASK CHECK FRAMING, PARITY & OVERRUN SZA,RSS ZERO? JMP TLOG YES, NO ERROR LDB B5 NO, TRANSMISSION ERROR JMP TDMA TERMINATE DMA OPERATION * TLOG CLF 23B CLEAR FLAGS 20, 21 & 22 LIA 23B READ REMAINING CHARACTERS (NEG) LDB $DV17,I GET BUFFER LENGTH SSB ARE THEY CHARACTERS? CMB,INB,RSS YES BLS MULTIPLY WORDS BY 2 ADA B FIND ACTUAL CHARACTER COUNT (POS) LDB $DV17,I GET BUFFER LENGTH SSB,RSS ARE THEY CHARACTERS? ARS NO, DIVIDE CHARS. BY 2 CLB STA $DV17,I SAVE AS + CHARS OR + WORDS STB $DV16,I SETUP ERROR CODE JMP ASYNC ENABLE ASYNCHRONOUS INTERRUPT * BRK ISZ ID.00 EXIT WAIT FOR VALID REQUEST * ASYNC LDB $IFTX,I GET DVT RESUME ADDR SZB WAS ASYNCHRONOUS INT. ENABLED? JMP EASYN YES, RE-ENABLE INTERRUPT LUCHK LDA $IF5,I CPA $LUTA,I LU=1? JMP LU1 YES, RE-ENABLE INTERRUPT CLA OTA 31B DISABLE PE & OE INT'S CLC 30B,C DISABLE BREAK IDCOM CLA JMP ID.00,I INTERFACE COMPLETION * B3 OCT 3 B4 OCT 4 B5 OCT 5 * * * ZERO TRANSMISSION LOG * * ZLOG STB $DV16,I ERROR CODE JSB STAT READ ASIC STATUS & OUTPUT CNTRL WRD JMP ASYNC ENABLE ASYNCHRONOUS INTERRUPT * * * TIMEOUT * * TIMOT LDB B3 TIMEOUT ERROR. ABORT JSB STAT READ ASIC STATUS & OUTPUT CNTRL WRD TDMA STB $DV16,I CREATE ERROR CODE CLB STB $DV17,I ZERO TRANSMISSION LOG CLC 21B,C SUSPEND AND CLC 23B,C TERMINATE DMA OPERATION OTB 32B RESET ASIC CARD JMP ASYNC ENABLE ASYNCHRONOUS INTERRUPT * * EMASK OCT 70000 MASK FRAMING, PARITY & OVERRUN BREAK OCT 100077 DON'T DOWN/DON'T FLUSH, RESTART NO MESS TEMP NOP TEMPORARY STORAGE CRLF OCT 6412 'CRLF' ESC OCT 15537 'ESC_' DC1 OCT 10400 'DC1' CRLFA DEF CRLF ESCA DEF ESC DC1A DEF DC1 * * * BUILD DATA QUAD * * QUAD NOP LDB QUAD,I ISZ DMAAD STB DMAAD,I DMA CONTROL WORD JSB NEXT ASIC CONTROL WORD JSB NEXT BUFFER ADDRESS JSB NEXT BUFFER LENGTH ISZ QUAD FIX RETURN ADDRESS SSB CHARACTERS? JMP QUAD,I YES, QUAD COMPLETE BLS NO, SAVE CMB,INB BUFFER LENGTH STB DMAAD,I IN CHARACTERS JMP QUAD,I QUAD COMPLETE * * NEXT NOP ISZ DMAAD ISZ QUAD LDB QUAD LDB B,I RBL,CLE,SLB,ERB JMP *-2 LDB B,I STB DMAAD,I JMP NEXT,I * * DMAAD NOP DVT RESUME ADDR PTR BRKFL NOP BREAK FLAG PCHKB NOP PARITY CHECK FLAG IGNOR NOP IGNORE INPUT FLAG BITBK NOP BIT BUCKET * * INTERFACE STORAGE * * * WORD 1: DVT RESUME ADDRESS * WORD 2: DMA CONTROL WORD \ * WORD 3: CARD CONTROL WORD \ 1ST QUAD * WORD 4: BUFFER ADDRESS / * WORD 5: - BUFFER LENGTH (CHAR) / * WORD 6: DMA CW \ * WORD 7: CARD CW \ 2ND QUAD * WORD 8: BUF ADDR / * WORD 9: BUF LENGTH / * WORD 10: DMA CW \ * WORD 11: CARD CW \ 3RD QUAD * WORD 12: BUF ADDR / * WORD 13: BUF LENGTH / * WORD 14: BREAKFLAG * WORD 15: ERROR CHECKING FLAG * WORD 16: IGNORE INPUT FLAG * WORD 17: BIT BUCKET * * DRIVER PARAMETER STORAGE * * * NONE * * END