ASMB,R,L,Z    USE 'Z' FOR RTE-III 
*ASMB,R,L,N    USE 'N' FOR RTE-II 
* 
      IFN           BEGIN RTE-II CODE 
      NAM DVA47,0 92900-16002 REV.1913  781122   RTE-II 
      XIF 
* 
****
* 
      IFZ           BEGIN RTE-III CODE
      NAM DVA47,0 92900-16003 REV.1913  781122   RTE-IV 
      XIF 
  SPC 2 
      ENT IA47,CA47 
      EXT $ETEQ,$OPSY 
      SUP PRESS EXTRA LISTING 
* 
SETEQ EQU $ETEQ 
   SPC 3
*      NAME:          DVA47  HP 92900B SUBSYSTEM DRIVER 
*      SOURCE TAPE:   92900-18002 781122   (RTE-II/III/IV/M)
*      BINARY TAPE:   92900-16002 (RTE-II) / 92900-16003 (RTE-III/IV) 
*      LISTING:       92900-19002 781122   / 92900-19003 781122 
*      PGMR:          F.G. - ( D.P. DVA47 REV-A ---> DVA47 REV-B )
*      DATE:          NOVB 22 1978 - GRENOBLE - 
*      MANUAL:        92900-90005 
* 
   SPC 4
****************************************************************
* (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978.  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.        *
****************************************************************
      HED  <DVA47>  INITIATION SECTION. 
********************************************************************
* INITIATION SECTION                                               *
********************************************************************
  SPC 1 
IA47  NOP 
      STA SELEC   SAVE SELECT CODE OF CONTROLLER
      JSB SETIO   CONFIGURE I/O INSTRUCTIONS
      LDB EQT13,I GET ADDRESS OF EQT16
      STB EQT16   STORE IN TEMPORARY BUFFER 
      INB         COMPUTES ADDRESS OF EQT17 
      STB EQT17   STORE IN TEMPORARY BUFFER 
      INB         COMPUTES ADDRESS OF EQT18 
      STB EQT18   STORE IN TEMPORARY BUFFER 
  SPC 1 
      LDB EQT12,I GET ADDRESS OF DUMMY EQT13
      SZB,RSS     IS IT EQUAL TO ZERO ? 
      JMP SETP0   YES: IT COULD BE DUMMY EQT
      CPB D3      HAS THIS CONTROLLER ALREADY BEEN USED ? 
      JMP SETP2   NO: GO TO INITIALIZE THIS LINK
SETP0 ADB DM7     YES: COMPUTE PROBABLE DUMMY EQT6 ADDRESS
      LDA B,I     GET DUMMY EQT6 CONTENT
      CPA M1      HAS THIS CONTROLLER ALREADY BEEN USED ? 
      JMP SETP1   YES: SET UP LOCAL POINTERS
      SZA,RSS     NO: IS EQT6 CONTENT UNALTERED ? 
      JMP SETP2   YES: CONTROLLER HAS NOT BEEN USED 
      JMP ILRQT   DUMMY EQT WAS DESTROYED !!!!!!!!! 
SETP1 ADB D7      COMPUTE DUMMY EQT13 ADDRESS 
      JSB SETP.   SET UP LOCAL POINTERS 
      JMP IA472   CONTINUE
* 
SETP2 JSB INIT0   INITIALIZE THE CONTROLLER 
* 
IA472 LDA EQT17,I CLEAR OP-CODE/STEP-NUM/START BIT
      AND B277
      STA EQT17,I 
      AND B77 
      SZA,RSS     IS TERM # 0 ? 
      JMP POWF    YES, MUST BE A POWER FAIL RECOVERY CALL.
   SPC 1
      CLA         CLEAR TLOG
      STA EQT10,I 
      LDA EQT11 
      JSB SETTQ   SET TEMPORARY  TEQXX POINTER
      LDA EQT5,I  RESET STATUS IN EQT5
      AND LHALF 
      STA EQT5,I
  SPC 1 
* 
      LDA .WSRQ   CHECK IF THE TERMINAL IS ALREADY
IA4.1 LDB A,I     IN USE (I.E. LINKED IN ONE
      SZB,RSS     QUEUE OF THE DRIVER)
      JMP IA4.2   IT IS THE END OF WAITING SRQ QUEUE
      CPB EQT11   IS IT THIS TERMINAL ? 
      JMP IA4.6   YES, REMOVE IT FROM THE QUEUE 
      LDA B       NO: CONTINUE SCANNING 
      JMP IA4.1   THIS QUEUE UNTIL END OF QUEUE 
  SPC 1 
IA4.2 LDA .COMQ   NOW SEARCH IN COMPLETION QUEUE
IA4.3 LDB A,I 
      SZB,RSS 
      JMP IA4.4   IT IS THE END OF COMPLETION QUEUE 
      CPB EQT11   IS IT THIS TERMINAL ? 
      JMP IA4.6   YES, REMOVE IT FROM THE QUEUE 
      LDA B       NO, CONTINUE SCANNING 
      JMP IA4.3   THIS QUEUE UNTIL END OF QUEUE.
* 
IA4.4 LDA .ACTQ   NOW SEARCH IN ACTIVE QUEUE
IA4.5 LDB A,I 
      SZB,RSS     END OF QUEUE ?
      JMP IA4.7   YES, END OF ACTIVE QUEUE
      CPB EQT11   NO, IS IT THIS TERMINAL ? 
      JMP IA4.6   YES, REMOVE IT FROM THE QUEUE 
      LDA B       NO, CONTINUE SCANNING 
      JMP IA4.5   THIS QUEUE UNTIL END OF QUEUE.
* 
IA4.6 LDB B,I     GET NEXT LINK IN THE LIST,
      STB A,I     PUT IT IN PREVIOUS ONE TO 
      CLA         DEQUEUE THIS TERMINAL AND 
      STA EQT11,I CLEAR THIS LINK WORD. 
  SPC 1 
IA4.7 LDA EQT6,I  GET REQUEST WORD
      RAR 
      SSA,SLA     CONTROL REQUEST ? 
      JMP I.CO    YES, PROCESS CONTROL REQUEST
      SLA         READ/WRITE   0/1
      JMP I.WR    PROCESS WRITE REQUEST 
      JMP I.RD    PROCESS READ REQUEST
* 
      SKP 
IA475 IOR EQT17,I MERGE OP-COD & STEP-NUM.
IA476 STA EQT17,I IN BIT 15-8 OF EQT17. 
* 
*       PUT THE NEW TERMINAL IN THE ACTIVE QUEUE. 
* 
      LDA .ACTQ,I GET ACTIVE QUEUE HEAD 
      LDB EQT11   AND INSERT THIS TERMINAL
      STA B,I     AT THE BEGINING OF THE QUEUE
      STB .ACTQ,I 
      ADA .COMQ,I IN THE COMPLETION QUEUE ? 
      SZA,RSS     IS SERIAL LINK ACTIVE ? 
      JMP STRLO   NO, START CONTROLLER
* 
STCH1 STC 0       YES, INTERRUPT AFTER NEXT POLLING CYCLE 
IA479 CLA 
      JMP IA47,I  RETURN WITH A=0 CONTINUE
  SPC 2 
IMMC  LDA D4      IMMEDIATE COMPLETION
      CLB         TRANSMISSION LOG = 0
      JMP IA47,I  EXIT. 
   SKP
********************************************************************
* ERROR RETURN IN INITIATION SECTION                               *
********************************************************************
  SPC 1 
ILRQ  LDB D5      ILLEGAL REQUEST, ERR CODE=5 
ILRQ5 LDA EQT5,I  SET ERR. CODE IN THE STATUS 
      AND LHALF   WORD, EQT5  BIT 7:0 
      IOR B       AND SET BIT 15 OF TLOG WORD 
      STA EQT5,I  AS AN ERROR INDICATOR.
      LDA D3      SET COMPLETION CODE FOR SYSTEM
      CPB D5      IF IT WAS ILLEGAL REQUEST THEN
      LDA D4      SET COMPL. CODE TO ILL. REQ.
      LDB BIT15 
      JMP IA47,I
* 
ILRQT LDB D4      BAD EQT CONFIGURATION 
      JMP ILRQ5   EXIT WITH ERR. CODE=4 
* 
ILRQ7 CLA         THE CONTROLLER SEEMS TO BE DEAD 
      STA .ACTQ,I OR NOT THERE, CLEAR ACTIVE QUEUE, 
      STA .WSRQ,I CLEAR WAITING QUEUE 
      LDB D3      AND EXIT WITH ERR. CODE=3 
      JMP ILRQ5   AND EQUIP. MALFUNCTION/NOT READY TO THE SYSTEM
* 
D2    DEC 2 
D3    DEC 3 
D4    DEC 4 
D5    DEC 5 
   SPC 2
********************************************************************
* POWER FAIL RECOVERY ROUTINE.                                     *
********************************************************************
  SPC 1 
POWF  LDA .ACTQ   POWER FAIL HAS OCCURED
      CLB         CLEAR ALL QUEUES. 
POWF3 STA COUNT 
      LDA A,I 
      STB COUNT,I 
      SZA 
      JMP POWF3 
      LDA .COMQ 
POWF5 STA COUNT 
      LDA A,I 
      STB COUNT,I 
      SZA 
      JMP POWF5 
      LDA .WSRQ   CLEAR WAITING QUEUE 
POWF7 STA COUNT 
      LDA A,I 
      STB COUNT,I 
      SZA 
      JMP POWF7 
CLC.5 CLC 0       STOP THE CONTROLLER 
      JMP IMMC    IMMEDIATE COMPLETION EXIT.
  SKP 
********************************************************************
*                                                                  *
*      THIS SERIAL LINK IS NOT IN OPERATION                        *
*          INITIALIZE DXT AND RESTART THE CONTROLLER               *
*                                                                  *
********************************************************************
   SPC 1
STRLO LDA EQT17,I 
      AND B77     MASK OUT TERMINAL # 
      CMA,INA     AND 
      STA COUNT   INITIALIZE THE DXTAB (DATA TRANSFERT
      LDB DXTAD   TABLE.) 
      RSS 
      INB         BUMP POINTER
      LDA IDLCD   IDLE COMMAND FOR ALL THE UNUSED 
      STA B,I     TERMINAL IS PUT IN
      ISZ COUNT   THE TABLE 
      JMP *-4     LOOP UNTIL LAST TERMINAL
      STB CULAT   UPDATE LAST ACTIVE TERM. INDICATOR
      STB CURWD 
* 
      CLA         CLEAR 
      STA STCFL   INTERRUPT NEXT POLLING CYCLE FLAG 
      JSB GETNW   GET NEXT WORD TO OUTPUT 
      RSS 
      JMP ILRQ7   IT IS NOT POSSIBLE !! 
      JSB SEND    OUTPUT TABLE TO THE CONTROLLER. 
      JMP ILRQ7   CONTROLLER DOESN'T ANSWER: ERROR !
      JMP IA479   OK, GOOD TRANSFER, EXIT.
    SPC 2 
COUNT NOP 
IDLCD OCT 120000  BIT STOP & BIT IDLE  ARE SET. 
* 
TEQ4  NOP         EQT 4 ADDRESS 
TEQ5  NOP 
TEQ6  NOP 
TEQ7  NOP 
TEQ8  NOP 
TEQ9  NOP 
TEQ10 NOP 
TEQ11 NOP 
TEQ12 NOP 
TEQ14 NOP 
TEQ15 NOP 
TEQ16 NOP 
TEQ17 NOP 
TEQ18 NOP 
* 
DM4   DEC -4      DECIMAL -4
DM6   DEC -6      DECIMAL -6
DM7   DEC -7      DECIMAL -7
DM10  DEC -10     DECIMAL -10 
M6    DEC -6
D7    DEC 7 
D8    DEC 8       DECIMAL 8: OCTAL 10 
D10   DEC 10      DECIMAL 10
D12   DEC 12
   SKP
TEMP2 NOP         TEMPORARY BUFFER
TEMP3 NOP         TEMPORARY BUFFER
* 
INIT0 NOP         FIRST TIME INITIALIZATION 
      LDA EQT#
      CMA,INA     PREPARE FOR SCANNING
      STA COUNT   OF ALL THE EQUIPMENT TABLE
      CLA 
      STA TEMP1 
      LDB EQTA
INIT2 ADB D3      GET SELECT CODE FROM EQT4 
      STB TEMP2   SAVE CURRENT EQT4 ADDRESS TEMPORARILY 
      LDA 1,I 
      AND B77     DOES THIS EQT REFERS TO THIS
      CPA SELEC   CONTROLLER ?
      JMP INIT4   YES, INIT EQT 
INIT3 LDB TEMP2   GET CURRENT EQT4 ADDRESS
      ADB D12     INCREMENT POINTER 
      ISZ COUNT   END OF EQT ?
      JMP INIT2   NO, GET NEXT EQT ENTRY
* 
      LDB TEMP3   GET DUMMY EQT13 ADDRESS 
      JSB SETP.   SET UP LOCAL POINTERS 
      CLA         CLEAR 
      STA .ACTQ,I ACTIVE QUEUE &
      STA .WSRQ,I WAITING SRQ QUEUE & 
      STA .COMQ,I COMPLETION QUEUE FOR THIS CONTROLLER. 
      JMP INIT0,I 
  SPC 1 
INIT4 LDA TEMP1   GET TERMINAL NUMBER 
      SZA,RSS     DUMMY EQT ENTRY ? 
      JMP INIT5   YES, INITIALIZE 
      LDA B,I     SET THE "DRIVER WILL PROCESS
      IOR BIT12   TIME-OUT" BIT IN EQT4 
      STA B,I     TO WILL BE SUPPORTED
* 
      ADB D7      COMPUTES EQT11 ADDRESS
      CLA         AND 
      STA B,I     CLEAR QUEUE LINK WORD 
      INB         COMPUTES EQT12 ADDRESS
      JSB INIT7   VERIFY EQT EXTENSION LENGTH 
      LDA TEMP3   GET DUMMY EQT13 ADDRESS 
      STA B,I     AND STORE IT IN EQT12 OF TERMINAL 
      INB         COMPUTE EQT13 ADDRESS 
      LDB B,I     GET EQT16 ADDRESS 
      LDA DTLKA   GET DEFAULT TALKER ADDRESS
      STA B,I     AND SET EQT16 
      INB         COMPUTES EQT17 ADDRESS
      LDA TEMP1   GET TERMINAL NUMBER 
      STA B,I     AND PUT IT IN EQT17 
      INB         COMPUTES EQT18 ADDRESS
      LDA B32     INITIALIZE EQT18 READER CTRL. WORD
      STA B,I     AND STORE IN EQT18
INIT6 ISZ TEMP1   COMPUTE NEXT TERMINAL NUMBER
      JMP INIT3   GET NEXT EQT
     SPC 1
INIT5 LDA BIT13   SET THE "I WILL HANDLE POWER
      IOR B,I     FAIL" BIT IN THE DUMMY EQT. 
      IOR BIT12   SET "I WILL PROCESS T.O." BIT 
      STA B,I     IN EQT4 
      INB         SET THE BUSY BIT IN THE 
      LDA BIT15   DUMMY EQT5 TO PROCESS POWER 
      IOR B,I     FAIL FOR THE WHOLE LINK 
      STA B,I     SET EQT5 WORD FOR POWER FAIL
* 
      INB         COMPUTE DUMMY EQT6 ADDRESS
      CCA         SET THE "LINK ALREADY INITIALIZED" FLAG 
      STA B,I     IN THE EQT6 OF THE DUMMY EQT
      INB         COMPUTE DUMMY EQT7 ADDRESS
      LDA DEFOT   GET DEFAULT: 4 SECONDS WSRQ TIME OUT
      STA B,I     AND PRESET DUMMY EQT7 
      ADB D5      COMPUTE DUMMY EQT12 ADDRESS 
      JSB INIT7   VERIFY EQT EXTENSION LENGTH 
      INB         COMPUTE DUMMY EQT13 ADDRESS 
      STB TEMP3   SAVE IT TO COPY IT IN TERMINAL EQT12
      LDB B,I     GET EQT16 ADDRESS 
      INB         COMPUTE EQT17 ADDRESS 
      CLA         A=0 
      STA B,I     INITIALIZE TERMINAL NUMBER TO 0 
* 
      LDA INTAB   VERIFY THAT THIS EQT
      ADA M6      IS REFERENCED BY THE INTERRUPT TABLE
      ADA SELEC 
      LDA A,I 
      ADA D12     POINT ON EQT13
      CPA TEMP3   IS CONFIGURATION ALL RIGHT ?
      JMP INIT6   YES, GO AHEAD 
      JMP ILRQT   NO, MUST RECONFIGURE
* 
DEFOT DEC -400    DEFAULT VALUE FOR TIME OUT
      SPC 3 
INIT7 NOP         SUBROUTINE TO CHECK EXTENSION LENGTH
      LDA B,I     GET EQT12 WORD CONTENT
      CPA D3      IS IT A 3 WORD LENGTH EXTENSION ? 
      RSS         YES: RETURN 
      JMP ILRQT   NO: MUST RECONFIGURE
      JMP INIT7,I EVERYTHING IS O.K.
    SPC 3 
*-------> DUMMY EQT12: ACTIVE QUEUE HEAD
    SPC 3 
*-------> DUMMY EQT16: COMPLETION QUEUE HEAD
    SPC 3 
*-------> DUMMY EQT18: WAITING QUEUE HEAD 
      SKP 
********************************************************************
* READ REQUEST INITIATION                                          *
********************************************************************
   SPC 1
I.RD  JSB BFSET   SET BUFF ADDR AND LENGTH TO EQT 
      NOP         ZERO LENGTH (ONLY LF ACCEPTED)
      JSB STREN   SET REN BIT IN STATUS 
* 
      JSB CLBT7   CLEAR BIT 7 AND KEEP IT STATUS
* 
      LDA EQT6,I  GET REQUEST CODE
      AND BIT10   MASK OUT BIT 10 
      CPA BIT10   IS IT SET ? 
      JMP I.WD    YES: INITIALIZE A WRITE/READ
* 
      LDB EQT16,I NO: GET TRANSPARENT MODE FLAG IN BIT 15 
      LDA OPRDX   TRANSPARENT MODE READ OP-CODE 
      SSB         TRANSPARENT MODE ?
      JMP IA475   YES: SET OP-CODE INTO EQT17 
* 
      JSB BADG?   IS IT A CARD READER READ ?
      JMP I.RD2   NO, OR READER ABSENT: CONTINUE
      LDA OPCAR   YES: GET OP-CODE/STEP NUMBER FOR O.M.R. 
      JMP IA475   AND SET OP-CODE INTO EQT17
* 
I.RD2 LDA EQT6,I  GET OPERATION CODE
      IOR TEMP1   RESTORE BIT 7 STATUS
      AND NBT9    ELIMINATE BIT 9 (NO CARD READER)
      STA EQT6,I  FORCE EQT6 WORD: READ FROM KEYBOARD 
      LDB EQT6,I  GET REQUEST CONTROL WORD
      BLF,BLF     AND ROTATE BIT:K INTO B0
      LDA OPRD    NORMAL MODE READ OP-CODE
      SLB         BIT: K = 1 ?
      LDA OPRDK   NORMAL MODE READ OP-CODE
      JMP IA475   AND SET OP-CODE INTO EQT
   SPC 2
STREN NOP         GET STATE OF THE REN BIT
      LDA EQT17,I FROM EQT17
      AND BIT7    AND PUT IT IN 
      RAR         STATUS WORD BIT6
      LDB EQT5,I
      IOR B 
      STA EQT5,I
      JMP STREN,I 
  SPC 1 
CLBT7 NOP         CLEAR AND SAVE STATUS BIT 7 
      LDA EQT6,I  GET REQUEST CODE
      AND BIT7    MASK OUT BIT 7
      STA TEMP1   SAVE IT TEMPORARILY 
      LDA EQT6,I  GET EQT6 REQUEST CODE 
      AND NBT7    CLEAR BIT 7 
      STA EQT6,I  RESTORE EQT6 REQUEST CODE 
      JMP CLBT7,I RETURN
  SPC 2 
  SKP 
********************************************************************
* WRITE/READ REQUEST INITIATION                                    *
********************************************************************
  SPC 1 
I.WD  LDA EQT8,I  GET TOTAL BUFFER LENGTH 
      JSB NGTIF   COMPUTE TOTAL BYTE LENGTH (NEGATIVE)
      CMA,INA     MAKE IT POSITIVE
      ADA DM4     SUBSTRACT FIRST TWO WORDS 
      STA TEMP1   SAVE IT TEMPORARILY 
      LDB EQT7,I  GET ADDRESS OF FIRST WORD OF BUFFER 
      LDA B,I     GET OUTPUT BUFFER LENGTH
      SZA,RSS     IS IT EQUAL TO ZERO ? 
      JMP I.WD0   YES: REJECT THE CALL
      JSB NGTIF   COMPUTE OUTPUT BYTE LENGTH (NEGATIVE) 
      STA EQT10,I USE EQT10 AS AN OUTPUT BYTE COUNTER 
      AND NBT0    MAKE IT ODD !!!! (MAY BE +1)
      ADA TEMP1   A=[TOTAL-4-ODD OUTPUT LGTH.]
      STA TEMP1   SAVE IT TEMPORARILY 
      INB         COMPUTE ADDRESS OF SECOND WORD OF BUFFER
      LDA B,I     GET INPUT BUFFER LENGTH 
      JSB NGTIF   COMPUTE INPUT BYTE LENGTH (NEGATIVE)
      ADA TEMP1   A=[TOTAL-4-ODD OUTPUT LGTH.-INPUT LGTH.]
      LDB D1      PREPARE AN EVENTUAL ERROR CODE
      SSA         IS IT POSITIVE ?
I.WD0 JMP ILRQ    REJECT THE CALL !!!!!!!!
      LDB EQT7,I  GET FIRST WORD BUFFER ADDRESS 
      LDA B       GET FIRST WORD BUFFER ADDRESS 
      ADA D2      COMPUTE FIRST WORD OUTPUT BUFFER ADDRESS
      CLE,ELA     COMPUTE FIRST OUTPUT BYTE BUFFER ADDRESS
      STA EQT9,I  USE EQT9 AS OUTPUT BUFFER BYTE POINTER
      JSB STREN   SET REN BIT IN STATUS 
* 
      LDA OPWCN   GET OP-CODE/STEP # STARTING WORD
      LDB EQT16,I GET TRANSPARENT/NORMAL MODE OF READING
      SSB         NORMAL OR TRANSPARENT ? 
      LDA OPWCB   TRANSPARENT: SKIP TWO FIRST STEPS 
      JMP IA475   CONTINUE
  SPC 3 
*      OP-CODE/STEP NUMBER INITIALIZATION TABLE 
  SPC 1 
*         BIT 6 ALWAYS SET.  (INDICATES COMING FROM INITIATOR)
* 
OPRDK OCT 010100  OP-COD=1, STEP=0. 
OPRD  OCT 010500  OP-COD=1, STEP=1. 
OPWR  OCT 020100  OP-COD=2, STEP=0. 
OPPRI OCT 020500  OP-COD=2, STEP=1. (WRITE ON PRINTER)
OPSP  OCT 030100  OP-COD=3, STEP=0. 
OPREN OCT 040300  OP-COD=4, STEP=0, BIT REN.
OPWSR OCT 050100  OP-COD=5, STEP=0. 
OPEOR OCT 070100  OP-COD=7, STEP=0. 
OPCAR OCT 100100  OP-COD=8, STEP=0. (BADGE CARD READER) 
OPRDX OCT 102500  OP-COD=8, STEP=5. (TRANSPARENT MODE READ) 
OPWRX OCT 110100  OP-COD=9, STEP=0. 
OPRDI OCT 120100  OP-COD=10, STEP=0.
OPGSB OCT 130100  OP-COD=11, STEP=0.
OPCSR OCT 140100  OP-COD=12, STEP=0.
OPTSK OCT 150100  OP-COD=13,STEP=0. (SFK TERMINATOR)
OPWCN OCT 160100  OP-COD=14,STEP=0.  (WRITE COMMAND/READ NORMAL)
OPWCB OCT 161100  OP-CODE=14,STEP=2. (WRITE COMMAND/READ TRANSPARENT) 
OPWTQ OCT 170100  OP-CODE=15,STEP=0. (CHECK SRQ PERIODICALLY) 
      SKP 
********************************************************************
* WRITE REQUEST INITIATION                                         *
********************************************************************
  SPC 1 
I.WR  JSB STREN   SET REN BIT INTO STATUS WORD
* 
      JSB CLBT7   GET BIT 7 STATUS & CLEAR IT 
* 
      LDB EQT6,I
      BLF,RBL 
      ELB,BLF     BIT:X -->E, BIT:M --> B0
      SEZ         STANDARD WRITE ?
      JMP I.WR4   NO, SPECIAL WRITE 
      LDB EQT16,I GET TRANSPARENT MODE FLAG 
      SSB         TRANSPARENT MODE ?
      JMP I.WR6   YES 
      LDA EQT6,I  NO: NORMAL MODE 
      IOR TEMP1   RESTORE BIT 7 
      STA EQT6,I  IN CONTROL REQUEST WORD 
      LDA OPWR    GET OP-CODE/STEP NUMBER 
      LDB TEQ18,I GET HARDWARE STATUS WORD
      SSB,RSS     IS THERE A PRINTER ?
      JMP IA475   NO: WRITE ON DISPLAY
      LDB EQT6,I  GET REQUEST CODE
      BLF         MOVE BIT 9 IN BIT 13
      RBL,RBL     MOVE BIT 9 IN BIT 15
      SSB         IS IT A WRITE ON PRINTER ?
      LDA OPPRI   YES: SKIP FIRST STEP
      JMP IA475   NORMAL MODE 
* 
I.WR4 SLB,RSS     SERIAL POLL REQUEST ? 
      JMP I.SP    YES 
I.WR6 LDA OPWRX   NO, WRITE COMMAND BYTE REQUEST
      JMP IA475 
* 
   SPC 2
********************************************************************
* SERVICE REQUEST ANALYSIS INITIATION  (SERIAL POLL)               *
********************************************************************
   SPC 1
I.SP  LDA EQT8,I  GET BUFFER LENGTH 
      SSA         POSITIVE VALUE ?
      JMP ILRQ    NO, ERROR ILLEGAL RQ. 
      CMA,INA 
      STA EQT10,I USE EQT10 AS A WORD COUNT 
      LDA EQT7,I  GET BUFFER ADDR.
      STA EQT9,I  USE EQT9 AS A WORD POINTER
      LDA OPSP    GET OPCOD 
      JMP IA475 
      SKP 
********************************************************************
* CONTROL REQUEST INITIATION                                       *
********************************************************************
   SPC 1
I.CO  LDA TEQ6,I  GET CONTROL WORD
      ALF,ALF 
      RAL,RAL 
      AND B37 
      ADA COFAD   CHECK IF
      LDB COFED   FUNCTION CODE 
      CMB,INB     IS
      ADB A       WITHIN
      SSB         TABLE 
      JMP ILRQ    NO, ERROR 
      JMP A,I     YES, JUMP TO PROPER ROUTINE 
   SPC 1
********************************************************************
* CLEAR REQUEST INITIATION                                         *
********************************************************************
   SPC 1
CL    LDA M6      USE EQT9 AS A COUNTER FOR 
      STA TEQ9,I  BAD OK BIT
      LDA TEQ16,I PRESET NEXT 
      AND BIT15   TALKER ADDRESS AND READ COMPLETION
      IOR DTLKA   FLAG BUT KEEP CURRENT MODE. 
      STA TEQ16,I 
      LDA TEQ18,I GET EQT18 
      AND BT012   SAVE BITS 15, 14, & 13
      IOR B32     INITIALIZE READER CONTROL WORD
      STA TEQ18,I CLEAR READER CONTROL WORD 
      LDA TEQ17,I CLEAR OP-COD, STEP-NUM & REN BIT
      AND B77     IN EQT17
      IOR BIT6    MERGE START BIT 
      JMP IA476 
* 
DTLKA OCT 35      DEFAULT NEXT TALKER ADDRESS 
D.LKA DEF DTLKA   ADDRESS OF DTLKA
OC37  OCT 177740
DM31  DEC -31 
D31   DEC 31
BT012 OCT 160000  MASK BITS 15, 14, & 13
  SPC 2 
********************************************************************
* REMOTE ENABLE/DISABLE                                            *
********************************************************************
   SPC 1
                                                                                                                                                                                            