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 
                                                                                                          