*COMDECK /CIODRM/ 
          TITLE     CIO$RM                                               V2MISC 
*#
*1CD  CIO$RM
*0D   PURPOSE 
*0        ISSUE ALL CIO REQUESTS, RA+1 REQUESTS, AND RECALL REQUESTS
*0D   CALL
*0                  RJ        =YRM$CIO  FOR CIO REQUESTS
*                   RJ        =YRM$RCLA FOR AUTO-RECALL REQUESTS
*                   RJ        =YRM$RCLP FOR PERIODIC AND COUNT RECALL 
*0D   PARAMETERS
*0        A0        FET ADDRESS 
*         B1        1.
*         X7        FET ADDRESS/STATUS WORD FOR AUTO-RECALL (RM$RCLA) 
*         X2        FOR CIO REQUESTS, BITS 0-9 = FUNCTION   (RM$CIO)
*                   CODE, BITS 14-17 = LEVEL NUMBER, BITS 
*                   18-35 = SKIP COUNT (OR WHATEVER PARA- 
*                   METER CIO EXPECTS IN BITS 18-35 OF THE
*                   RA+1 REQUEST).  X2 CONTENT IS TRANSFERED
*                   TO X7 AFTER AUTO-RECALL REQUEST.  THE REGISTER
*                   IS THEN RE-COMPLIMENTED TO POSITIVE VALUE IF
*                   THE REQUEST IS TO BE ISSUED WITY AUTO-RECALL. 
*0D   ACTION
*0      RM$CIO
*0        PUT FILE IN AUTO-RECALL TO MAKE SURE PREVIOUS ACTION ON FILE
*         IS COMPLETE, THEN TRANSFER RM$CIO PARAMETERS FROM X2 TO X7. 
*         FORM CIO RA+1 REQUEST IN X2 AND IF X7 IS NEGATIVE (AUTO-
*         RECALL REQUESTED) SET AUTO-RECALL BIT AND RECOMPLEMENT X7.
*         OR IN SKIP COUNT, LEVEL, AND FUNCTION CODE FROM INPUT 
*         ARGUMENT (X7).  MASK OUT SKIP COUNT AND CIO LEAVING LEVEL 
*         AND FUNCTION CODE, READ UP FET, MASK OFF BITS 0,2-17 AND
*         OR IN NEW LEVEL AND FUNCTION CODE AND STORE BACK IN FET.
*         OR FET ADDRESS INTO RA+1 REQUEST AND BRANCH TO *RM$SYS=* TO 
*         ISSUE THE REQUEST.
*0      RM$RCLA 
*0        FORM RCLP RA+1 REQUEST IN X7, WAIT FOR RA+1 TO CLEAR, AND 
*         THEN CHECK THE COMPLETE BIT. IF SET, RETURN TO CALLER. IF 
*         NOT SET, RJ TO *RM$SYS=*. 
*0D   REGISTERS USED
*0        RM$CIO    A17,X127
*         RM$RCLA   A1,X17
*         RM$SYS=   A17,X17 
*0D   OTHER CODE REQUIRED 
*0        MACROS-   SYSCOM,RCL.RM 
*         PROGRAMS- RM$CIO    CALLS     RM$RCLA,RM$SYS= 
*                   RM$RCLA   CALLS     RM$SYS= 
*#
 FETMASK  VFD       42/-0,18/2
          SYSCOM
 RM$CIO   EQ        *+1S17         ENTRY/EXIT 
          RCL.RM    A0,A
          BX7       X2
          SX2       3LCIO 
          SA1       FETMASK 
          PL        X7,RM.CIO1     BRANCH IF RECALL NOT REQUESTED 
          PX2       X2             X2 = P000...000CIO SET RECALL BIT
          BX7       -X7            X7 = SKIPCOUNT + LEVEL + IOCODE
 RM.CIO1  BSS       0 
          LX2       42             X2 = CIO(P)     LEFT-JUSTIFIED 
          BX7       X7+X2          X7=CIO(P) + SKIPCOUNT + LEVEL + IOCOD
          BX2       X1
          SA1       A0             READ UP FET
          BX1       X1*X2          X1 = LFN     +                MODEBIT
          MX2       42
          BX2       X2*X7          X2 = CIO(P) + SKIPCOUNT
          IX7       X7-X2          X7 =              LEVEL + IOCODE 
          BX7       X1+X7          X7 = LFN + LEVEL + IOCODE + MODEBIT
          SA7       A1             FET RESET
          SX1       A1             X1=FET ADR 
          BX7       X2+X1          CIO(P) + SKIPCOUNT + FETADDR 
          RJ        =XRM$SYS= 
          EQ        RM$CIO         RETURN 
* 
*         AUTO-RECALL        ENTRY ARGS=  1)X7 = STATUS WORD OR FET ADDR
* 
 RM$RCLA  EQ        *+1S17         ENTRY/EXIT 
 RM.RCLA1 SX1       3LRCL          INPUTARG=X7 = FET ADDR/STATUS WORD 
          PX1       X1             SET AUTO-RECALL BIT
          LX1       42
          BX7       X1+X7          INCLUDE FET ADDRESS
          SA1       B1
          NZ        X1,RM.RCLA1    LOOP IF PRIOR RA+1 REQUEST STILL PEND
          SA1       X7
          LX1       59             GET STATUS BIT 
          MI        X1,RM$RCLA     IF RCL NOT REQUIRED
          RJ        =XRM$SYS= 
          EQ        RM$RCLA        RETURN 
* END /CIODRM/
