ASMB,B,R,L,T,C    DATE CODE: 1704 
      HED *****DVA15:  A RTE  DRIVER FOR THE HP2894*****
      NAM DVA15,0 
      ENT IA15,CA15 
IA15  NOP 
      LDB IA15    GET RETURN ADDRESS
      STB CA15   AND STORE IT AWAY
      LDB .3     SET CODE FOR BAD COMPLETION
      STB BADCO  STORE IT AWAY
      INB        SET CODE FOR GOOD COMPLETION 
      STB OKCOM  STORE IT AWAY
      JSB SETIO  CONFIGURE IO INSTRUCTIONS
      JSB S2SPD  CHECK FOR STACKER 2 & SPD REQUESTS.
      JSB STATS  GET STATUS AND CHECK READY 
      LDA EQT6,I CHECK REQUEST CODE 
      AND .17B   ISOLATE FUNCTION FIELD 
      CPA .1     IS IT A READ?
      JMP IREAD  YES   GO START READ
      CPA .2     IS IT A WRITE? 
      JMP IWRIT  YES  GO START WRITE
* 
*        CONTROL REQUEST PROCESSOR
* 
ICTRL LDA EQT6,I
      ALF,ALF    GET FUNCTION CODE
      RAL,RAL    IN RIGHT MOST BITS 
      AND .17B   AND CLEAN OUT REST OF WORD 
      SZA,RSS    IS IT A CLEAR?o
      JMP CLEAR  YES   THEN GO CLEAR
      CPA .6     IS IT A DYNAMIC STATUS REQUEST?
      JMP DYNST  YES   GO GET STATUS
      CPA .7     IS IT A SET EOT? 
      STA EQT12,I YES, THEN SET FIRST TIME OR ERROR BIT 
      CPA .17B   IS IT AN EXTENDED FUNCTION REQUEST?
      JMP EXFUN  YES   GO GET EXTENDED FUNCTION.
IOKEX LDA OKCOM  GOOD EXIT
IEXIT JMP IA15,I
* 
*     CLEAR REQUEST PROCESSOR 
CLEAR CLA        CLEAN OUT INTERNAL FLAGS WORD UPON CLEAR 
      STA EQT13,I ZERO OUT TRANSMISSION LOG 
CLRWS IOR .BITF  COME HERE TO CLEAR THE WAIT STATION
      STA EQT12,I AND STORE IT INTO INTERNAL FLAGS
      CLB        SET UP FOR PLAIN FEED
IFECO JSB FEED   GO FEED
      JMP CFOMI  AND GO CLEAR CONTROL TO STOP FEED
* 
*     DYNAMIC STATUS PROCESSOR
* 
DYNST LDA EQT11,I GET DYNAMIC STATUS WORD.
      STA B      SAVE IT IN B REG FOR USER REQUEST
      JMP IOKEX  MAKE GOOD EXIT.
IBADX LDA .2     NO, THEN IMPROPER REQUEST. 
      JMP IEXIT  AND GO EXIT. 
* 
*    STACKER 2 AND SEPARATE PRINT DATA (SPD)
*                PROCESSOR
* 
S2SPD NOP 
      LDA EQT6,I  CHECK REQUEST CODE. 
      AND .17B    ISOLATE FUNCTION FIELD. 
      CPA .1      IS IT A READ. 
      JMP IRES2   YES, CHECK FOR STACKER 2 REQUEST. 
      CPA .2      IS IT A WRITE.
      JMP IWSSP   YES, CHECK FOR S2 AND SPD REQUEST.
      CPA .3      IS IT A CONTROL REQ.
      JMP ICOS2   YES, CHECK FOR S2 REQUEST.
      JMP S2SPD,I NOT ANY OF THE ABOVE GO BACK. 
IRES2 LDA RQCNT   LOAD NO. OF PARAMETERS. 
      CPA .3      IS OPTIONAL PARAMETER INCLUDED? 
      JMP S2SPD,I NO,RETURN TO CALLER.
      LDA EQT6,I  YES,GET CONTROL WORD. 
      LDB EQT9,I   GET PARAMETER AND CK STACKER BIT.
      SLB         IS STACKER 2 SELECTED ? 
      ADA .BITB   YES, SET BIT11 TO INDICATE S2.
      STA EQT6,I  RESTORE CONTROL WORD. 
      JMP S2SPD,I RETURN TO CALLER. 
IWSSP LDA RQCNT   LOAD NO. OF PARAMETERS. 
      CPA .3      IS OPTIONAL PARAMETER INCLUDED. 
      JMP S2SPD,I NO,RETURN TO CALLER.
      LDA EQT6,I  YES, GET CONTROL WORD.
      LDB EQT9,I   GET PARAMETER AND CK STACKER BIT.
      SLB         IS S2 SELECTED ?
      ADA .BITB   YES, SET BIT11 TO INDICATE S2.
      RBR         ROTATE B RIGHT 1. 
      SLB         IS SPD SELECTED ? 
      ADA .BITC   YES, SET BIT12 TO INDICATE SPD. 
      STA EQT6,I  RESTORE CONTROL WORD. 
      JMP S2SPD,I RETURN TO CALLER. 
ICOS2 LDB EQT6,I  GET CONTROL WORD. 
      LDA EQT7,I  GET PARAMETER.
      AND =B100   ISOLATE STACKER SELECT BIT. 
      SZA         IS STACKER 2 SELECTED ? 
      ADB .BITB   YES, SET BIT11 TO INDICATE S2.
      STB EQT6,I  RESTORE CONTROL WORD. 
      LDA EQT7,I  GET PARAM AGAIN.
      AND =B77    ISOLATE EXT FCN.
      STA EQT7,I  RESTORE EQT7 WITH EXTENDED FCN ONLY.
      JMP S2SPD,I RETURN TO CALLER. 
      SKP 
* 
*     EXTENDED FUNCTION PROCESSOR 
* 
EXFUN LDB EQT7,I  GET EXT FCN CODE. 
      LDA EQT12,I  GET INTERNAL FLAGS WORD
      SZB,RSS     IF IT IS A FEED REQUEST 
      JMP IFEDO   THEN GO FEED
      CPB .1      IS IT SET STACKER SELECT MODE?
      JMP SSMOD   YES  THEN GO SET THE MODE 
      CPB .2      IS IT SET STACKER OVERFLOW MODE?
SOMOD IOR .BITE   YES, THEN SET STACKER OVERFLOW MODE 
      CPB .3      IS IT AN INHIBIT INPUT REQEST?
INHIN IOR .BITF   YES, THEN SET BIT 15,THE INHIBIT INPUT BIT
      CPB .4      ENABLE PUNCHING ON PUNCHED CARDS? 
ENPOP IOR .BITD   YES, THEN SET BIT 13, THE POP BIT.
      CPB .5       IS IT A REQUEST TO CLEAR THE WAIT STATION? 
      JMP CLRWS    YES  THEN GO CLEAR WAIT STATION. 
EXFEX STA EQT12,I   STORE AWAY FLAGS WORD 
      JMP IOKEX    GO DONE. 
* 
*     CONTROL FUNCTION HANDLERES
* 
* 
*     SET STACKER SELECT MODE 
* 
SSMOD IOR .BITE    CHECK BIT 14 
      XOR .BITE    TURN IT OFF
      JMP EXFEX    AND GO EXIT
* 
* 
* 
* 
* 
* 
      SKP 
* 
*     FEED ROUTINE    FEEDS A CARD IF REQUESTED 
* 
FEED  NOP 
      JSB EATBL  GO CHECK IF CARD IS BLANK.  EAT BLANKS.
      LDA .BITF  LOAD CLEAR BUFFER FULL COMMAND 
.IO33 OTA LOS    AND OUTPUT IT TO LOW SELECT CODE 
CHKII LDA EQT12,I GET INTERNAL FLAGS WORD 
      SSA,RSS    CHECK THE INHIBIT INPUT BIT
      JMP ENRED  ITS NOT ON 
      IOR .BITB  DISABLE INPUT COMMAND TO DATA CHANNEL
      XOR .BITF  AND CLEAR BUFFER FULL ON INPUT 
ENRED XOR EQT12,I CLEAN OUT REST OF WORD
.IO32 OTA LOS    ENABLE READ
      LDA TOBIT  GET TIME OUT FLAG. 
      SSA        IS T.O. FLAG SET?
      JMP FEEDS  YES, SKIP HOP & STACKER CHKS&FEED CARD.
      LDA OCHFL GET OUTPUT CK FLAG. 
      SZA        IS THIS A REFEED FOR A WRITE OUTPUT CK.
      JMP FEEDS  YES,SKIP HOPPER AND STACKER CKS & FEED CARD. 
      STB TEMP1  NO,SAVE B DURING STATUS CALL.
      JSB STATS  GO UPDATE STATUS BITS
      LDB TEMP1  GET B BACK 
      LDA EQT11,I GET FULL PSEUDO STATUS
      ALF,ALF    GET STACKER FULL BIT 
      RAL,RAL    WHERE IT CAN BE TESTED 
      SLA           STACKER FULL? 
      JMP NREDY  YES   THEN GO NOT READY
      RAL        CHECK HOPPER 2 BIT TO SEE IF EMPTY 
      SSA,RSS    IS HOPPER TWO EMPTY? 
      JMP CHKH1  NO    THEN GO CHECK HOPPER ONE 
CHKH2 LDA EQT6,I HOPPER 2 IS EMPTY IS IT SELECTED?
      ALF,RAL    GET HOPPER SELECT BIT
      SSA        WAS HOPPER 2 SELECTED? 
      JMP NREDY  YES  THEN GO REJECT REQUEST
CHKH1 LDA EQT11,I GET FULL STATUS IN THE A REG. 
      AND .8     ISOLATE HOPPER 1 EMPTY BIT 
      SZA,RSS    IS HOPPER ONE EMPTY? 
      JMP FEEDS  NO   THEN GO FEED
CHREQ LDA EQT6,I CHECK TO SEE IF HOPPER 1 IS REQUESTED
      ALF,RAL    GET HOPPER SELECT BIT WHERE IT CAN BE TESTED 
      SSA,RSS    IS HOPPER ONE SELECTED?
      JMP NREDY  YES THEN GO REJECT REQUEST 
FEEDS LDA EQT6,I LOAD REQUEST CONTROL WORD
      ALF        CHECK STACKER SELECT BIT 
      SSA        IS STACKER 2 SELECTED? 
      ADB .BITB  YES THEN SET BIT 11 IN CONTROL 
      SLA        IS SPD SPECIFIED?
      ADB .BITA  YES THEN SET BIT 10 IN CONTROL WORD
      RAL        LOOK AT HOPPER SELECT
      SSA        IS HOPPER TWO SELECTED 
      ADB .BITF  YES  THEN SET BIT 15 IN CONTROL WORD 
      LDA EQT12,I LOAD INTERNAL FLAGS WORD
      RAL        GET TO STACKER MODE BIT
      SSA,RSS    IS BIT ZERO? 
      ADB .BITC   YES THEN STACKER SELECT MODE IS SPECIFIED 
      LDA OCHFL   GET WRITE OUTPUT CHECK FLAG.
      SLA,RSS    IS THIS AN OUTPUT CK RE-FEED(OCHFL=1). 
      JMP .IOC1  NO,THIS IS A NORMAL FEED OR A RE-WRITE REQ.
      ISZ OCHFL  RESET OUTPUT CK FLAG TO 2 FOR SECOND PASS. 
      LDA B        YES,STRIP OUT PUNCH,PRINT AND
      AND =B115777 SPD BITS FROM CONTROL WORD.
      STA B        UPDATE CONTROL WORD IN B-REG.
.IOC1 OTB HIS    OUTPUT THE CONTROL WORD TO THE HISELECT
      JSB FILL   GO FILL WITH BLANKS IF NECESSARY 
.IOD1 STC HIS,C   SET CONTROL ON HI SELECT CHANNEL
      JMP FEED,I RETURN TO CALLER 
* 
      SKP 
* 
REJEC LDA EQT12,I LOAD INTERNAL FLAGS WORD
      AND .1     ISOLATE FIRST TIME OR MULTIPLE ERROR BIT 
      IOR OPREJ  SET OP REJECTED. 
      JSB STSTS  GO INCLUDE THEM IN THE STATUS
      SLA        IF DEVICE IS NOT READY 
      JMP CRJEC  THEN GO NOT READY
      ISZ EQT12,I SET MULTIPLE ERROR BIT
      JMP CEFEX  AND RETURN TO RTE
* 
*     FILL ROUTINE TO FILL A WAITING OUTPUT BUFFER
* 
FILL  NOP 
      LDA CNTNO  GET LOOP COUNTER VALUE(-100).
      STA CNTR   SET COUNTER TO LIMIT "LIA"LOOP.
      CCE        INDICATE FIRST TIME THRU 
LOFIL EQU *      NO THEN GO DO SOME IO
      JSB CKRDY  IF DEVICE IS READY 
      JMP FILL,I THEN RETURN TO CALLER
      JSB LIA    GO READ DEVICE FLAG
      AND .BITE  ISOLATE DEVICE FLAG
      SZA,RSS    IF FLAG IS SET 
      SEZ,CLE    OR  THIS IS THE FIRST TIME THRU
.IO41 STC LOS,C  THEN OUTPUT TO FILL BUFFER 
      JMP LOFIL  GO SEE IF WE'RE READY YET
* 
* 
*     CKRDY CHECKS THE READY FOR COMMAND BIT
* 
CKRDY NOP 
.IOB3 LIA HIS    READ THE HIGH SELECT CHANNEL 
      AND .BIT5  GET "READY FOR COMMAND" BIT
      SZA,RSS    IF DEVICE IS NOT READY THEN
      ISZ CKRDY  SET BAD RETURN 
      JMP CKRDY,I AND RETURN TO CALLER
* 
*     IREAD SETS UP FOR A READ REQUEST
* 
* 
IREAD CLB         CONFIGURE COMMAND TO HI SELECT CODE.
      STB EQT13,I FIRST ZERO OUT THE TRANSMISSION LOG 
      LDA EQT6,I  CHECK FOR BINARY READ 
      AND .100B  PICK OUT BINARY BIT 6  M 
      SZA,RSS    IF NOT BINARY
      JMP IRASC  THEN SKIP CHECK FOR BYTE LENGTH
IRBNY LDA EQT8,I GET THE LENGTH OF BUFFER 
      SSA         IF IT IS IN BYTES 
      JMP IBADX   THEN TAKE BAD EXIT TO RTE 
.IO21 EQU * 
IRASC LIA LOS    CHECK READINESS OF LO SELECT CODE
      SSA        IF INPUT BUFFER IS FULL
      JMP CFOMI  THEN GO TO CONTINUATION
IFEDO LDA EQT12,I CHECK INHIBIT INPUT BIT 
      SSA        IF IT IS ON
      JMP REJEC  THEN REJECT REQUEST
      JSB FEED   ELSE GO FEED A CARD
ICONT CLA        CONTINUATION RETURN TO RTE 
      JMP IEXIT  AND EXIT TO RTE
* 
* 
*     IWRIT SETS UP FOR A WRITE REQUEST 
* 
IWRIT CLB         SET UP COMMAND TO HI SELECT CODE. 
      STB EQT13,I ZERO OUT THE TRANSMISSION LOG 
      LDA EQT6,I GET REQUEST CONTROL WORD 
      ALF,ALF    CHECK FOR PUNCH AND PRINT BITS 
      RAR         POSITION P BIT
      SLA,RSS     IF P=0 THEN 
      ADB .BITE   ENABLE PUNCH
      RAL,RAL     POSITION M BIT 6
      SSA         IF M=1 THEN 
      JMP IBNRY   GO BINARY CHECK 
IASCI RAR         ELSE ASCII
      SLA,RSS     IF K=0 THEN 
      ADB .BITD   ENABLE PRINTING 
      JMP REFED   AND GO FEED A CARD
IBNRY RAR,SLA     IF K=1 THEN 
      ADB .BITD   ENABLE PRINTING 
      LDA EQT8,I CHECK BUFFER LENGTH
      SSA         IF REQUEST IS FOR BYTES 
      JMP IBADX   THEN TAKE BAD EXIT TO RTE 
REFED LDA OCHFL   GET OUTPUT CK FLAG. 
      SZA,RSS    IS THIS A REWRIT BECAUSE OF OUTPUT CK. 
      JMP IWFED  NO,CONTINUE NORMAL WRITE REQUEST.
      JSB FEED   YES, SET PRINT/PUNCH BITS IN FEED CONTROL WD.
      CLA        CLEAR OUTPUT CHECK FLAG. 
      STA OCHFL  CHECK FLAG.
      JMP CFOMI   REPROCESS WRITE COMPLETION SECTION. 
IWFED LDA EQT11,I GET FULL PSEUDO STATUS
      AND .4     CHECK WAIT STATION 
      SZA,RSS    IF THERE IS A CARD IN THE WAIT STATION 
      JMP IFECO  THEN GO SET PRINT AND PUNCH AND GO TO C. S.
      JSB CKRDY  IF DEVICE IS READY 
      CLB        THEN ISSUE PLAIN FEED
      JMP IFEDO  ELSE GO FEED A CARD AND RETURN TO RTE
* 
* 
*     EATBL  EATS A CARD THAT IS RESIDENT IN THE DEVICE 
*            READ BUFFER UNTIL BUFFER FULL GOES LOW 
* 
* 
EATBL NOP 
IBLNK LDA EQT12,I  GET INTERNAL FLAG WORD 
      AND =B167777  TURN OFF NOT BLANK BIT. 
SETBL STA EQT12,I  AND PUT INTERNAL FLAGS BACK
      LDA CNTNO   GET LOOP COUNTER VALUE(-100). 
      STA CNTR    SET COUNTER TO LIMIT "LIA" LOOP.
EATS  JSB LIA     GO READ A CHARACTER 
      SSA,RSS     IF BUFFER EMPTY 
      JMP EATBL,I RETURN TO CALLER
      AND =B7777   GET COLUMNS OF CARD
      SZA,RSS     IF CARD IS BLANK THEN 
      JMP EATS     THEN EAT SOME MORE CHARACTERS
NOTBL LDA EQT12,I  GET INTERNAL FLAG WORD 
      IOR .BITC   SET BIT 12 TO INDICATE NOT BLANK
      JMP SETBL   AND STORE IT AWAY 
* 
* 
* 
* 
*    SETIO CONFIGURES THE IO INSTRUCTIONS 
* 
SETIO NOP 
      LDA EQT4,I  LOAD THE CHANNEL NUMBER 
      AND .77B    ISOLATE IT
      LDB A       PUT IT IN B ALSO
      IOR LIAI    PUT TOGETHER A LIA INSTRUCTION
      CPA .IO21   IF THE A REGISTER = AN LIA INSTRUCTION
      JMP SETIO,I THEN WE'RE ALREADY CONFIGURED 
      STA .IO21   ELSE WE'RE NOT CONFIGURED AND MUST DO IT
      STA .IO22 
      STA .IO23 
* 
      ADA .100B   MAKE AN OTA INSTRUCTION 
      STA .IO31   AND STORE IT AWAY 
      STA .IO32 
      STA .IO33 
* 
      ADA .1100   MAKE AN STC,C INSTRUCTION 
      STA .IO41   AND STORE IT AWAY 
      STA .IO42 
      STA .IO43 
* 
      IOR .BITB   MAKE A CLC INSTRUCTION
      STA .IO51   AND STORE IT AWAY 
      STA .IO52 
* 
*     CONFIGURE THE HIGH SELECT CHANNEL 
* 
      LDA B       GET LOSEL BACK
      INA         MAKE IT HIGH
      IOR LIAI    MAKE A LIA HIS INSTRUCTION
      STA .IOB2 
      STA .IOB3 
* 
      ADA .4100   MAKE AN OTB HIS INSTRUCTION 
      STA .IOC1   AND STORE IT AWAY 
* 
      XOR .BITB   TURN OFF B BIT
      ADA .1100   MAKE AN STC HIS,C INSTRUCTION 
      STA .IOD1   AND STORE IT AWAY 
* 
      IOR .BITB   MAKE A CLC HIS  INSTRUCTION 
      STA .IOE1   AND STORE IT AWAY 
      JMP SETIO,I AND GO BACK TO CALLER 
      SKP 
* 
* 
*     STATS PUTS TOGETHER A SOFTWARE PSUEDO STATUS
*           FROM INFORMATION OBTAINED FROM BOTH THE 
*           HIGH AND LOW SELECT CHANNELS.  IT IS POSSIBLE 
*           THAT THE LOW SELECT CHANNEL WILL NOT HAVE STATUS
*           INFO AVAILABLE.  IF SO THE INFORMATION FROM IT
*           IS NOT UPDATED. 
* 
STATS NOP 
.IO22 EQU * 
CKLOS LIA LOS     READ THE LOW SELECT CHANNEL 
      LDB A       COPY IT TO THE A REGISTER 
      CLA         CLEAR THE A REGISTER
      STA EQT11,I  AND CLEAN OUT THE STATUS 
      SSB         IF STATUS IS NOT AVAILABLE ON LOW SEL. CODE 
      JMP CKHIS   THEN GO CHECK THE HI SELECT CODE
      BLF         POSITION INPUT CHECK BIT
      SSB         IF INPUT CHECK
      IOR .BIT8   THEN SET IT IN THE STATUS 
      SLB         IF READ CHECK 
      IOR .2      THEN SET IT IN THE STATUS 
      RBL,RBL     POSITION HOPPER 1 BITS
      SSB         IF HOPPER 1 IS EMPTY
      IOR .8      THEN SET IT IN THE STATUS 
      SLB         IF THERE IS AN OUTPUT CHECK 
      IOR .BIT9   THEN SET IT IN THE STATUS 
      RBL         POSITION STACKER FULL BIT 
      SSB         IF STACKER IS FULL
      IOR .100B   THEN SET BIT IN THE STATUS
      STA EQT11,I 
CKHIS EQU * 
.IOB2 LIA HIS     READ THE HIGH SELECT CHANNEL
      LDB A       PUT A IN B
      AND =B177000 AND OUT HI BITS
      RBR,SLB,RBR POSITION HOPPER 2 BIT IF IT IS EMPTY
      IOR .BIT4   THEN SET THE BIT IN THE STATUS
      RBR,RBR     POSITION WAIT STATION BIT 
      SLB,RSS     IF WAIT STATION IS NOT FULL 
      IOR .4      THEN SET THE BIT IN THE STATUS
      RBR,RBR     POSITION READY BIT
      SLB,RSS     IF NOT READY
SNRED IOR .1      THEN SET NOT READY BIT
      JSB STSTS   GO COMBINE STATS
      SLA,RSS     IF READY
      JMP WTCHK   CHECK IF WRITE WAS REQUESTED. 
      LDA BADCO   NT RDY,GET BAD CODE TO SEE IF IA15 OR CA15 ENTRY. 
      CPA .3       IS ENTRY FROM IA15 (BADCO=3)?
      JMP CNTCK  YES,GO CHECK FOR CONTROL REQUEST.
      LDA EQT11,I CHK EQT11 WORD FOR INPT CHK,OUTPT CK COND.
      AND =B1400 STRIP ALL BITS EXCEPT BIT 8&9. 
      SZA,RSS     DID INPUT CK,OUTPUT CK EXIST ON CA15 ENTRY. 
      JMP STKCH   NO, CHECK IF STKER FULL OR(AND) DEVICE OFF. 
      AND =B1000 ISOLATE OUPUT CHECK BIT. 
      SZA,RSS     DID OUTPUT CHECK OCCUR? 
      JMP CNTCK   NO,GO CHECK FOR CONTROL REQUEST.
      LDA EQT6,I  GET REQUEST WORD. 
      AND .17B    ISOLATE REQUEST CODE. 
      ADA .ND2    ADD NEG. 2 TO A REG.
      SZA         IS REQUEST A WRITE? 
      JMP CNTCK   NO,GO CHECK FOR CONTROL REQUEST.
      LDA .1      YES,SET OUTPUT CHECK
      STA OCHFL   FLAG TO ONE.
CNTCK LDA EQT6,I  YES, GET REQUEST WORD.
      AND .17B    ISOLATE REQUEST CODE. 
      CPA .3      IS IT AN I/O CONTROL REQUEST.?
      JMP DYRTN   YES,CHECK FOR DYNAMIC STAT REQ. 
      LDA ERRTO   GET TIME OUT VALUE (-3 SEC).
      STA EQT15,I  SET TIME OUT CLOCK.
      LDA =B10000 SET BIT12 OF EQT 4
      IOR EQT4,I  (DRIVER TO HANDLE TIME OUT) 
      STA EQT4,I  SET S BIT IN EQT4 WORD. 
.BDXX LDA BADCO   NO,LOAD BAD COMPLETION CODE.
      JMP IA15,I  AND RETURN TO RTE.
DYRTN LDA EQT6,I  GET REQUEST CODE AGAIN. 
      ALF,ALF     GET FUNCTION CODE.
      RAL,RAL     IN RIGHT MOST BITS. 
      AND .17B    ISOLATE FUNCTION CODE.
      CPA .6      IS IT A DYNAMIC STAT ROUTINE. 
      JMP DYNST   YES, GO TO DYNAMIC STAT ROUTINE.
      JMP .BDXX   NO, BAD CODE. 
NREDY LDA EQT11,I  GET STATUS 
      JMP SNRED   AND GO SET NOT READY BIT
* 
WTCHK LDA EQT6,I  CHECK REQUEST CODE. 
      AND .17B    ISOLATE FUNCTION FIELD. 
      CPA .2      IS IT A WRITE?
      JMP OPTCK   YES,CHECK FOR OUTPUT CK ON LAST REQUEST.
TOCHK LDA EQT4,I   GET EQT4 WORD. 
      ALF         SET TIME OUT BIT (BIT11). 
      SSA,RSS     HAS TIME OUT OCCURRED.
      JMP STATS,I  NO, RETURN TO CALLER 
STBIT STA TOBIT    YES, SET TIME OUT FLAG.
      JSB FEED     AND FEED A CARD. 
      LDA EQT4,I   GET EQT4 WORD AGAIN. 
      AND =B173777  CLEAR OUT T.O. BIT (BIT11). 
      STA EQT4,I     UPDATE EQT4 WORD.
      CLA            CLEAR OUT
      STA TOBIT     TIME OUT FLAG.T GLAG. 
      JMP IA15,I     RETURN TO RTE WITH A=0 
*                     & WAIT FOR INTERRUPT. 
* 
STKCH LDA EQT11,I CHK DYN STATUS FOR STACKER FULL.
      AND =B100    ISOLATE STACKER FULL BIT.
      SZA          IS STACKER FULL ON CA15 ENTRY. 
      JMP STATS,I  YES,FINISH CA15 REQ.,NEXTIA15  WILL CATCH ERR. 
      JMP CNTCK     NO,DEVICE IS OFF LINE OR PWR IS OFF.
*                   EXIT WITH IRROR CODE=1 TO P+2.
* 
* 
OPTCK LDA OCHFL     GET OUTPUT CHECK FLAG.
      SZA,RSS       HAS OUTPUT CHECK OCCURRED ON LAST REQ.
      JMP TOCHK     NO,GO CHECK FOR TIME OUT. 
      CPA .2        YES.2ND PASS FOR OUTPUT CK REPROCESSING?
      JMP IWRIT   YES,RE-ISSUE WRITE REQUEST. 
      RAR           NO, ITS PASS 1 (OCHFL=1); 
* 
*                   SETUP FEED REQUEST FOR RETRANSMISSION OF
*                   DATA FROM THE LAST WRITE REQUEST (PASS2). 
* 
      JMP STBIT   2 AND GO FEED CARD. 
*             STSTS    STORES     THE STATUS
* 
STSTS NOP 
      IOR EQT11,I  INCLUDE REST OF STATUS 
      STA EQT11,I  STORE AWAY COMPOSED STATUS 
      AND RHALF   GET LOWER HALF OF WORD
      STA B       SAVE THE LOWER HALF STATUS
      LDA EQT5,I  GET THE SHORT STATUS
      AND LHALF   GET UPPER HALF OF EQT5
      IOR B       PUT IN THE LOWER HALF OF THE STATUS 
      STA EQT5,I  STORE AWAY THE STATUS 
      JMP STSTS,I RETURN TO CALLER
* 
                                                                                                                                                                        