*COMDECK LISTSRV
         NAM   LISTSRV
****************************************
*                                      *
*      L I S T   S E R V I C E S       *
*                                      *
****************************************
* 
* 
* 
*    THE FOLLOWING PROCEDURES PROVIDE THE SOFTWARE INTERFACE TO 
*    THE FIRMWARE LIST SERVICE ROUTINES.
* 
* 
         ENT   PBLSGET
         ENT   PBLSPUT
         EXT   PFLSGET
         EXT   PFLSPUT
          EXF    BYCNT
         EXT   CNENTRY
         EXT   QTOPSK 
         EJT
****************************************
*                                      *
*            P B L S G E T             *
*        GET A WORKLIST ENTRY          *
*                                      *
****************************************
*              NON-RECURSIVE
*              NON-INTERRUPTABLE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                 * 
**OVERVIEW-                                                       * 
*    PBLSGET MOVES ENTRIES FROM THE SELECTED WORKLIST TO THE      * 
*    INTERMEDIATE ARRAY (BWWLENTRY).  A SPECIAL FIRMWARE SEQUENCE * 
*    IS USED TO SPEED UP EXECUTION AND ELIMINATE CONTENTION       * 
*    BETWEEN SOFTWARE AND FIRMWARE.                               * 
*                                                                 * 
**INPUT-                                                          * 
*              BWWORKLIST - ADDRESS OF WORKLIST ENTRY 
*              BYWLCB     - ADDRESS OF WORKLIST CONTROL BLOCK 
*                                                                 * 
**OUTPUT-                                                         * 
*    OUTPUT IS A RETURNED BOOLEAN VALUE INDICATING WHETHER THE    * 
*    LIST IS EMPTY. IF NOT EMPTY, THE NEXT ENTRY IS MOVED TO      * 
*    THE USER SPECIFIED WORKLIST AREA.
*                                                                 * 
**NOTE-                                                           * 
*    THIS PROCEDURE IS AVAILABLE AT ALL LEVELS                    * 
*                                                                 * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* 
* 
PBLSGET  NOP   0
         IIN   0         INHIBIT INTERRUPTS 
          LDQ*   (PBLSGET)    GET ADDRESS OF WORKLIST ENTRY 
          STQ    CNENTRY      SET UP ADDRESS FOR FIRMWARE 
          RAO*   PBLSGET      BUMP RETURN TO WORKLIST CONTROL BLOCK 
          LDQ*   (PBLSGET)    GET ADDRESS OF WORKLIST CONTROL BLOCK 
          RAO*   PBLSGET      BUMP RETURN TO USER RETURN ADDRESS
          LFA+   BYCNT,Q      TEST WORKLIST COUNT 
          SAN    2            SKIP IF ANY ENTERIES
          ENA    1            INDICATOR FOR EMPTY WORKLIST
          JMP*   EXIT         RETURN WITH A=1 (TRUE) - EMPTY WORKLIST 
          TRQ    A            FIRMWARE NEEDS CONTROL BLOCK ADDR IN A
         LDQ   PFLSGET   ADDR OF FIRMWARE LIST GET ROUTINE
         EMS   Q         ESCAPE TO MICRO-SEQUENCE 
         ENA   0         RETURN WITH A=0  (FALSE) 
EXIT     LDQ   QTOPSK 
         SQN   1         TEST UNLOCK CONTROL COUNT
         EIN   0         ENABLE IF QTOPSK=0 
         JMP*  (PBLSGET)
         EJT
****************************************
*                                      *
*            P B L S P U T             *
*     PUT AN ENTRY IN A WORKLIST       *
*                                      *
****************************************
*              NON-RECURSIVE
*              NON-INTERRUPTABLE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                 * 
** OVERVIEW -  PBLSPUT MOVES ENTERIES FROM A USER SPECIFIED AREA       *
*              (NORMALLY THE INTERMEDIATE ARRAY) INTO THE SPECIFIED    *
*              WORKLIST.  A FIRMWARE ROUTINE IS USED TO DO THE         *
*              ACTUAL WORK.                                            *
*                                                                      *
** INPUT -                                                             *
*              BWWORKLIST - ADDRESS OF WORKLIST ENTRY                  *
*              BYWLCB     - ADDRESS OF WORKLIST CONTROL BLOCK          *
*                                                                      *
** OUTPUT -    ENTRY MADE IN THE APPROPIATE WORKLIST                   *
*                                                                      *
** NOTE -      THIS ROUTINE IS AVAILABLE AT ALL PRIORITY LEVELS        *
*                                                                 * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
* 
* 
PBLSPUT  NOP   0
         IIN   0         INHIBIT INTERRUPTS 
          LDQ*   (PBLSPUT)    GET ADDRESS OF WORKLIST ENTRY 
          STQ    CNENTRY      SET UP ADDRESS FOR FIRMWARE 
          RAO*   PBLSPUT      INCREMENT TO WORKLIST CONTROL BLOCK ADDR
          LDA*   (PBLSPUT)    WORKLIST CONTROL BLOCK ADDRESS
          RAO*   PBLSPUT      INCREMENT TO USER RETURN
         LDQ   PFLSPUT   ADDR OF FIRMWARE LIST PUT ROUTINE
         EMS   Q         ESCAPE TO MICRO-SEQUENCE 
         LDQ   QTOPSK 
         SQN   1         TEST UNLOCK CONTROL COUNT
         EIN   0         ENABLE IF QTOPSK=0 
         JMP*  (PBLSPUT)
          END 
