*BEGIN IODMAC4
          SPACE  5
*
** NAME-- LMK,LPK,LDK,ADK,ZJK,NJK,PJK,MJK,UJK
*
** PURPOSE-- DETERMINE FOR THOSE INSTRUCTIONS HAVING A SHORT AND LONG
*            FORM WHICH INSTRUCTION FORM NEEDS TO BE GENERATED.
*
** CALLING SEQUENCE-- SAME AS THE REGULAR PP INSTRUCTION
*
** RESTRICTIONS-- SYMBOLS REFERENCED BY THESE MACROS SHOULD BE
*                 DEFINED PRIOR TO THE MACRO CALL.
*
* NO-ADDRESS AND CONSTANT INSTRUCTIONS
NEWOP     ECHO   ,I=(LM,LP,LD,AD)
*
I_K       MACRO  P1
L         IF     DEF,P1
L         IFLE   P1,77B
L         IFGE   P1,0
          I_N    P1
L         ELSE   1
          I_C    P1
          ENDM
NEWOP     ENDD
*
*
*
* JUMP INSTRUCTIONS
NEWOP     ECHO   ,I=(ZJ,NJ,PJ,MJ),J=(NJ,ZJ,MJ,PJ)
*
I_K       MACRO  P1
L         IF     DEF,P1
L         IFGE   *-P1,0
L         IFLT   *-P1,40B
          I_N    P1
L         ELSE   2
          J_N    *+3
          LJM    P1
          ENDM
NEWOP     ENDD
*
*
*
UJK       MACRO  P1
L         IF     DEF,P1
L         IFGE   *-P1,0
L         IFLT   *-P1,40B
          UJN    P1
L         ELSE   1
          LJM    P1
          ENDM
          SPACE  6
** NAME-- AJM,SCF,IJM,CCF,FJM,SFM,EJM,CFM,IAN,IAM,OAN,OAM,ACN,DCN
*         FAN,FNC,FSJM,FCJM,IAPM,OAPM,CMCH,CHCM,MCLR
*
** PURPOSE-- REDEFINE I/O INSTRUCTIONS SO THAT THE ADDRESS OF CHANNEL
*            INSTRUCTIONS CAN BE SAVED IN A TABLE.
NEWOP     ECHO   ,OP=(AJM,SCF,IJM,DCN,FJM,SFM,EJM,CFM,IAN,IAM,OAN,OAM,AC
,N,FAN,FNC,FSJM,FCJM,IAPM,OAPM,CCF,CMCH,CHCM,MCLR)
*
 OP_.     OPSYN  OP          E.G.  IAN. = IAN
*
          PURGMAC OP
OP        MACRO  P1,P2
          LOCAL  TAG
L         IFC    EQ,$P2$$
TAG       OP_.   P1
T_P1      RMT                IAN,OAN,ACN,DCN,FAN
          CON    TAG
          RMT
L         ELSE
TAG       OP_.   P1,P2
T_P2      RMT                AJM,IJM,FJM,EJM,IAM,OAM,FCN,IAPM,OAPM,
                             SCF,CCF,SFM,CFM,FSJM,FCJM,CMCH,CHCM,MCLR
          CON    TAG
          RMT
L         ENDIF
OP        ENDM
NEWOP     ENDD
          SPACE  6
** NAME-- LOADC
*
** PURPOSE-- LOAD A CM ADDRESS INTO THE R AND A REGISTERS.
*
** CALLING SEQUENCE-- LOADC   CMR,CMA
*     CMR = ADDRESS OF THE 2-WORD CONTENTS TO BE LOADED INTO THE R REGISTER.
*           (IF CMA IS ABSENT, THEN CMR = ADDRESS OF THE 3-WORD CONTENTS.)
*     CMA = ADDRESS OF THE CONTENTS TO BE LOADED INTO THE A REGISTER.
*     BIT 17 OF THE A REGISTER IS ALSO SET UPON EXIT.
*     CMA IS OPTIONAL.

 LOADC    MACRO  CMR,CMA
 L        IFLE   CMR,77B
 L        IFGE   CMR,0
          LRD    CMR
 L        ELSE   5
          LDML   CMR
          STD    CMADR
          LDML   CMR+1
          STD    CMADR+1
          LRD    CMADR
 L        ENDIF
*
 P        IFC    NE,$CMA$$
 M        IFLE   CMA,77B
 M        IFGE   CMA,0
          LDDL   CMA
 M        ELSE   1
          LDML   CMA
 M        ENDIF
 P        ELSE
 Q        IFLE   CMR+1,77B
 Q        IFGE   CMR,0
          LDDL   CMR+2
 Q        ELSE
          LDML   CMR+2
 Q        ENDIF
 P        ENDIF
          LMC    400000B
          ENDM
          SPACE  6
** NAME--LOADR.
*
** PURPOSE-- LOAD A CM ADDRESS INTO THE R AND A REGISTERS.
*            AN INDEXED MEMORY LOCATION SPECIFIES THE ADDRESS.
*
** CALLING SEQUENCE-- LOADR   CMR,INDEX
*     THE 3-WORD CM ADDRESS IS CONTAINED IN THE LOCATIONS STARTING AT
*         CMR INDEXED BY INDEX.

 LOADR    MACRO  CMR,INDEX
 M        IFC    NE,$INDEX$$
          LDML   CMR,INDEX
          STD    CMADR
          LDML   CMR+1,INDEX
          STD    CMADR+1
          LRD    CMADR
          LDML   CMR+2,INDEX
          LMC    400000B
 M        ELSE
 X        IFNE   CMR,CMADR
          LDML   CMR
          STD    CMADR
          LDML   CMR+1
          STD    CMADR+1
 X        ENDIF
          LRD    CMADR
          LDML   CMR+2
          LMC    400000B
 M        ENDIF
          ENDM
          SPACE  6
** NAME--LOADF.
*
** PURPOSE-- REFORMAT A CM ADDRESS AND THEN LOAD IT INTO THE R AND A REGISTERS.
*
** CALLING SEQUENCE-- LOADF   CMR,INDEX
*     THE 2-WORD, UNFORMATTED CM ADDRESS IS CONTAINED IN THE LOCATIONS
*          STARTING AT CMR INDEXED BY INDEX.
*     INDEX IS OPTIONAL.
*
** FORMA IS CALLED WHICH PUTS THE REFORMATTED CM ADDRESS IN CMADR.

 LOADF    MACRO  CMR,INDEX
          LDK    CMR
 M        IFC    NE,$INDEX$$
          ADDL   INDEX
 M        ENDIF
          RJM    FORMA
          ENDM
          SPACE  6
** NAME-- REFAD.
*
** PURPOSE-- REFORMAT AND SAVE A CM ADDRESS.
*
** CALLING SEQUENCE-- REFAD   CMR,SAV
*     THE 2-WORD,UNFORMATTED CM ADDRESS IS CONTAINED IN THE LOCATIONS
*          STARTING AT CMR.
*     THE 3-WORD, REFORMATTED CM ADDRESS IS STORED IN THE LOCATIONS
*          STARTING AT SAV.
*
** FORMA AND SAVAD ROUTINES ARE CALLED.


 REFAD    MACRO  CMR,SAV
 L        IFLE   SAV,77B
 L        IFGE   SAV,0
          LOADF  CMR
          STDL   SAV+2
          SRD    SAV
 L        ELSE
          LDK    SAV
          STDL   T2
          LOADF  CMR
          RJM    SAVAD       SAVE THE RMA ADDRESS
 L        ENDIF
          ENDM
          SPACE  6
 PAUSE    MACRO  X           DELAY X MICROSECONDS
 M        IFLE   X,77B
          LDN    X
 M        ELSE
          LDC    X
 M        ENDIF
          RJM    PAUS        PROCESS THE DELAY
          ENDM
          SPACE  6
 MASKP    MACRO  FIELD
          LOCAL  X
 X        SET    16-N.FIELD-L.FIELD
          MGEN   N.FIELD
 MSK      SET    MASK$
          DUP    X
 MSK      SET    MSK+MSK
          ENDD
          ENDM
          SPACE  6
* END IODMAC4
