          EJECT
*         CTEXT  CTP$DFT_SPECIAL_MAC_ACCESS
*
*         J.M. SKOWRONEK     9/25/87.

          LIST   X

**        RDMEM - READ CONTROL MEMORIES.
*         PERFORM AN INDEXED READ OF CONTROL MEMORIES.
*
*         RDMEM  ID,IDD,PPFWA,PPD,BC,TC
*
*         ID = CONTROL MEMORY NAME
*         IDD = PP MEMORY CELL ADDRESS OF INDEX TO MEMORY
*         PPFWA = BASE ADDRESS OF MEMORY BUFFER IN PP TO
*                 RECEIVE DATA, DEFAULT = RDATA
*         PPD = PP MEMORY CELL ADDRESS OF INDEX TO PPFWA
*         BC = NUMBER OF BYTES TO READ, DEFAULT = 1
*         TC = TYPE CODE OF CONTROL MEMORY, REQUIRED


          PURGMAC  RDMEM
 RDMEM    MACRO  ID,IDD,PPFWA,PPD,BC,TC
          LOCAL  RDMEM0
          LDK    ID          GET MEMORY ADDRESS
          IFC    NE,$IDD$$,1
          ADML   IDD         ADD OFFSET
          STDL   RN          STORE ADDRESS
 CHK      IFC    NE,$PPFWA_PPD$$
 CHK1     IFC    NE,$PPFWA$$
          IFC    NE,$PPD$$,3
          LDK    PPFWA       LOAD CONSTANT
          ADML   PPD         ADD OFFSET
          SKIP   1
          LDK    PPFWA       GET ADDRESS
 CHK1     ELSE   1
          LDML   PPD         GET ADDRESS
 CHK      ELSE   1
          LDK    RDATA
          STML   RDMEM0+1    MODIFY *IAM* INSTRUCTION
          LDM    HBUF+HDRPC
          ADC    MRRD+TC     LOAD FUNCTION WORD
          RJM    AMR         ACCESS MAINTENANCE CHANNEL
          IFC    EQ,$BC$$    OPTIONAL BYTE COUNT
          LDN    1
          ELSE   1
          LDN    BC_D        USE SPECIFIED BYTE COUNT
 RDMEM0   IAM    0,MR        BLOCK INPUT
          RJM    CMI         CLEAR INTERLOCK
 RDMEM    ENDM

*         END OF DECK CTP$DFT_SPECIAL_MAC_ACCESS



