MACRO.DOC -- Changes from V53(1020) to V53A(1152)
August 1979






























COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1976,1979,1986.ALL  RIGHTS
RESERVED.


THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND  COPIED
ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH  LICENSE AND WITH THE
INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR  ANY  OTHER
COPIES  THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF  THE  SOFTWARE  IS  HEREBY
TRANSFERRED.

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE  WITHOUT  NOTICE
AND  SHOULD  NOT  BE  CONSTRUED  AS  A COMMITMENT BY DIGITAL EQUIPMENT
CORPORATION.

DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR  RELIABILITY  OF  ITS
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

MCR53A.DOC                                                      Page 2


MACRO.DOC -- Changes from V53(1020) to V53A(1152)
August 1979



1.0  SUMMARY

The purpose of this release is to provide a more reliable  version  of
the product.

MACRO version 53A is supported by Digital Equipment  Corporation,  and
runs  on  all  supported  monitors  as  released.   Version  53A fully
supersedes all previous versions, and includes edits up to #1152.

MACRO 53A requires that if PSECTS are used, the resultant  .REL  files
be  loaded  with  LINK  V4  or later versions, which support the PSECT
facility.

For TOPS-10 systems, MACRO is documented in  the  DECsystem-10  User's
Guide, and in the DECsystem-10 MACRO Assembler Reference Manual, order
number AA-C780C-TB.

For TOPS-20 systems, MACRO is documented in the TOPS-20 User's  Guide,
and in the DECSYSTEM-20 MACRO Assembler Reference Manual, order number
AA-4159C-TM.



2.0  EXTERNAL CHANGES

     1.  BYTE pseudo-op:

         Externals must be loaded into either  fullword  (36  bit)  or
         halfword  (18  bit)  bytes.  Relocatables must be loaded into
         fullword or halfword bytes, with the exception that  a  right
         half  only  relocatable  can be loaded into a right justified
         byte that is between 18 and 36 bits in length.  Examples:

                BYTE (18) REL1, REL2 (6) 3 (30) RHREL3
                BYTE (10) 5 (26) RHREL4

     2.  Unary operators:

         Unary operators now properly take precedence over all  binary
         and  shift  operators.   This  conflicts  with  the  existing
         documentation.  The hierarchy is now as follows:

         a.) All unary operators (+, -, ^-, ^D, ^O, ^B, ^F, ^L, E,  K,
            M, G)
         b.) Shift operators (B-shift, underscore-shift)
         c.) Logical binary operators (!, ^!, &)
         d.) Multiplicative operators (*, /)
         e.) Additive operators (+, -)


MCR53A.DOC                                                      Page 3


     3.  Error message standard:

         On TOPS-10 systems, MACRO will now observe the setting of the
         message  level  bits  during error message typeout (reference
         monitor GETTAB table .GTWCH(35)).

     4.  Macro call statements and XALL

         MACRO will now list the entire statement  in  which  a  macro
         call appears if XALL is in effect.  This may cause the source
         line to be broken up in the listing if multiple  macro  calls
         appear  on the same line, and the called macros have imbedded
         line terminators.  Comments on macro  calls  imbedded  within
         conditionals  will also be listed, with the comment appearing
         along with the last line of the macro expansion, even  if  no
         code is generated for that line.

     5.  .IF/.IFN pseudo-ops

         Contrary to what the documentation states, the .IF  and  .IFN
         pseudo-ops   were  never  intended  to  take  angle-bracketed
         expressions as arguments.   Instead,  they  are  intended  to
         provide  a  powerful  mechanism  for  querying  symbol  table
         attributes, given a valid mnemonic consisting of  up  to  six
         RADIX50 characters.  The newly defined attribute, "NAME", can
         be used to determine if the  argument  is  a  single  RADIX50
         symbol  name.   Such  a  symbol  may  be  enclosed  in  angle
         brackets, nested to any depth.  The  use  of  angle-bracketed
         expressions  is  allowed,  and  treated  as  decribed  below,
         however their use is not recommended.

         Limited expression handling has been  implemented  to  handle
         situations  in  which angle-bracketed expressions are used as
         arguments.  Such an argument will return the combined (IORed)
         attributes   of   its  components,  except  in  the  case  of
         relocation attributes, which are handled correctly only for a
         symbol.  In addition, an angle-bracketed expression will have
         the newly defined attribute "EXPRESSION", providing  a  means
         of  defending  against  angle-bracketed expressions passed as
         arguments to macro calls.  Note that all arguments that  work
         outside angle brackets will work inside them.

     6.  Psects and literals

         Proper  termination  of  literals  within  code  bounded   by
         .PSECT/.ENDPS  is  now  enforced.   Early  termination  of  a
         literal which was started in the same PSECT but at  a  higher
         level (due to nesting), or the failure to terminate a literal
         which was started in the current  PSECT  will  produce  an  L
         error,  and  will  generate  the  new  MCRLNI Literal nesting
         incorrect message.

     7.  Suppressed symbols

         Symbols declared  as  suppressed  internal,  but  defined  by

MCR53A.DOC                                                      Page 4


         externals  or Polish will now retain the suppressed attribute
         and will not be typed out by DDT.

     8.  PSECT attributes

         Valid PSECT attributes and their definitions are as follows:

         CONCATENATED   When  loading  multiple  modules,  all   PSECT
                        blocks   having   the   same   name   will  be
                        concatenated at load time.

         OVERLAID       When  loading  multiple  modules,  all   PSECT
                        blocks  having  the  same  name will be loaded
                        starting at the same  origin  (each  one  will
                        'overlay' the previous one).

         RWRITE         The PSECT can be  read  and  written  (TOPS-20
                        only).

         RONLY          The PSECT can only be read (TOPS-20 only).

         PALIGNED       When  loading  relocatable  PSECTs  (not   yet
                        supported),  the  PSECT origin will be started
                        at a page boundary.

     9.  PSECTs and PRGEND

         PRGENDs can now occur in a source file containing PSECTs.

     10. Assembler typeout for PRGENDed programs

         When MACRO is executed via a RUN  command,  and  the  listing
         device  is  not  the  terminal,  the  informational  messages
         (BREAK, CPU TIME, CORE USED, etc...), will be typed  out  for
         each   program   module  in  a  PRGENDed  source  file.   The
         particular program  module  will  be  identified  by  a  line
         following  the error counts, indicating "PROGRAM XXXX", where
         "XXXX" is the information appearing on  the  TITLE  statement
         for the module.  If no TITLE is specified, the default TITLE,
         ".MAIN" will be typed.  The program identification line  will
         no longer be output to the listing file, however, it will now
         appear with the errors typed out when MACRO  is  invoked  via
         the  CCL  entry  point,  as done by the COMPIL class commands
         under TOPS-10.


MCR53A.DOC                                                      Page 5


     8.  New Error Messages:

       "Q" errors:

         a.  @ appearing in or before AC field
         b.  Index value has left half for POLISH(INDEX)
         c.  BYTE (n) RELOCATBLE where n is not 36 or halfword 18
         d.  @ in unbracketed expression to DEC/EXP/OCT
         e.  Multiple  TITLEs  or  TITLE/UNIVERSAL  conflicts  (was  M
             error)

       "E" errors:

         a.  BYTE (n) EXTERNAL where n is not 36 or halfword 18
         b.  BYTE (n) POLISH symbol, where n is not 36 or halfword 18
         c.  EXTERN/INTERN conflicts

       "X" errors:

         a.  Created symbol exceeds ..7777

       "A" errors:

         a.  OPDEF produces no code
         b.  PSECT origin not absolute

       "L" errors:

         a.  PSECT literal level mismatch
         b.  Assignment involves a label defined within a literal

       New MCR error messages:

         a.  MCRLNI -- Literal  nesting  incorrect  at  end  of  PSECT
             XXXXXX

       Modified MCR error messages:

         a.  MCRPTC -- Polish too complex for location nnnnnn
         b.  MCRPTC -- Polish too complex for symbol XXXXXX

       Deleted MCR error messages:

         a.  MCRPIP -- PRGEND illegal with PSECT


MCR53A.DOC                                                      Page 6


     9.  Polish bugs fixed in the following areas:

         <POINT K,POLISH>

         <POLISH>B<EXP>

         Polish imbedded within a polish expression such as:
         A##+B##+<C##+D##>

         <EXT##,,POLISH>

         <EXT##+1,,0>

         POLISH(INDEX)

         OP AC,ADDR(POLISH)

         OP AC,-<POLISH>

         OP AC,POLISH(LH,,RH)

         Generate fullword fixups only for externals such as:
         0,,EXT##

         Simplex forward references to Polish such as:
         EXP POLISH
         POLISH=EXT##+K

         Generate Polish when needed for expressions such as:
         A+B or A-B
         when A or B is relocatable.

         Generate proper polish when referencing  relocatables  across
         PSECTs


MCR53A.DOC                                                      Page 7


3.0  KNOWN BUGS AND DEFICIENCIES

     1.  MACRO can't generate any Polish block  which  will  use  more
         than 17 words.

     2.  You cannot forward reference a Polish symbol  of  other  than
         the form:  EXT##+k or EXT##-k
         instead, you should do the following:

              FOO=EXT1##+EXT2##
                   .
                   .
                   .
              MOVE  1,FOO

     3.  A  Polish  OPDEF  is  treated  internally  as  a  full   word
         assignment.  As a result, AC and address may not be used with
         it.


     4.  MACRO's floating point input routines do not agree with those
         of other compilers, FORTRAN in particular.

     5.  MACRO will not assemble a line in TOPS-10 PIP correctly.  The
         following represents edit 346 to the product:

         At DSPTAB + 12L:

               DISP   ),0

         Add angle brackets around  the  un-paired  close  parenthesis
         such as:

               DISP   <)>,0

     6.  MACRO will not assemble 2 lines in RUNOFF correctly:

         At FRCEND + 4L and FIN2 + 13L:

               MSG$   ARG1,ARG2,,....."

         Enclose the last macro argument in angle brackets, such as:

               MSG$   ARG1,ARG2,,<.....">

         or include the statement .DIRECTIVE NO MACMPD somewhere  near
         the beginning of the program.

     7.  MACRO currently will not  allow  pooling  of  literals  which
         contain labels.

     8.  If the right hand side  of  an  assignment  statement  is  an
         expression  containing  Polish,  angle-brackets must surround
         the expression.

MCR53A.DOC                                                      Page 8


     9. Incorrect CREF listings generated when:

              .zero loop of IRP is done.

              .references suppressed by XLIST inside macro expansion.

     10. Phase errors will be generated by MACRO when  assembling  the
         distributed  TOPS-10 MIC source.  MACRO allows macro calls to
         occur in the operand field of a source statement.  The sample
         program  below  shows the sequence of instructions in the MIC
         source which causes the phase errors to occur.

              SEARCH MACTEN
              JRST MACERR
              MACERR:
              END

         As  shown  above,  MIC.MAC   forward-references   MACERR,   a
         user-defined  label.   However,  MACERR  also  happens  to be
         defined in MACTEN as a macro.  Since MIC searches MACTEN, and
         since  macro  calls  are allowed in operand fields, the macro
         definition is used in assembling the statement "JRST  MACERR"
         in  pass  one.  This causes phase errors in pass two when the
         correct label definition is used.  Problem may  be  fixed  by
         changing the lable name MACERR so as not to conflict with the
         macro name.

     11. In TOPS-10 SETSRC.MAC, MACRO encounters a  forward  reference
         of  a  symbol  name  JSYS, and MACRO assembles in TOPS20 JSYS
         opcode instead of user label address.  The  following  change
         represents  edit  47  to  the  product,  which eliminates the
         problem.

         In macro CTAB, 6 lines down, the macro definition:

               DEFINE   CC (NAM,ADDR)<ADDR>

         should be changed to:

               DEFINE   CC (NAM,ADDR)<Z ADDR>


     12. Attempts to compile field image BACKRS.MAC to rebuild  BACKUP
         will  produce R errors.  These errors occur on erroneous BYTE
         statements that attempt to modify the high order bit of an 18
         bit  relocatable  quantity.   This  type  of  error  was  not
         detected by previous versions of MACRO.

         At FRSDTM + 0L:

                FRSDTM: BYTE (1)0 (17)FRSDAT (18)L$DATE ;LABEL CREATION
                        BYTE (1)1 (17)FRSDSD (18)L$DSTR ;DESTROY DATE
                        BYTE (1)0 (17)FRSSDT (18)S$DATE ;SAVE SET DATE

         Replace the 3 lines with:

MCR53A.DOC                                                      Page 9


                        FRDUM1==0B18+FRSDAT             ;[330]
                        FRDUM2==1B18+FRSDSD             ;[330]
                        FRDUM3==0B18+FRSSDT             ;[330]
                FRSDTM: BYTE (18)FRDUM1 (18)L$DATE      ;[330]LABEL CREATION
                        BYTE (18)FRDUM2 (18)L$DSTR      ;[330]DESTROY DATE
                        BYTE (18)FRDUM3 (18)S$DATE      ;[330]SAVE SET DATE

     13. The opcode field  of  an  instruction  must  evaluate  to  an
         absolute  quantity  at  compile  time.  Note that no error is
         generated if this condition is not met, to allow  for  OPDEFs
         which  contain  relocatables,  or  externals  in  the address
         portion of the instruction.

     14. Polish is not allowed an index field  (eg.   ADDR(POLISH)  ).
         Also,  externals  are  not  allowed in the index field if the
         expression evaluates to other than a zero in the  left  half.
         This  restriction  is imposed because there is no polish swap
         operator.  Note that the expression ( "OP  AC,POLISH(1B1)"  )
         falls  into  this  class  of  problems,  however,  it  is not
         currently flagged as an error.

     15. Error lines in macros under SALL do not list.  They  can  not
         be  listed  since the original source line is not around when
         the macro call line is finally listed.

     16. Long binary generating lines under XALL list only partially.

     17. Lines in an IRP will usually not be indeneted  properly  when
         LALL is in effect.

     18. Under SALL, the following example involving REPEAT  does  not
         list as expected.

                REPEAT 2,<MOVE
                        COUNT=0>

         The REPEAT is closed off before the last line is listed.

     19. A formfeed followed by another formfeed causes macro to  skip
         a page header.

     20. CREF reference line numbers can be  incorrect  for  variables
         seen  in XLISTed code.  In the following example, A is CREFed
         as being referenced on the line following LABEL.

                A=1
                DEFINE X,<XLIST
                A
                LIST>
         LABEL: X
                Z

     21. MACRO's  command  scanner  is  very  archiac,  and  does  not
         neccessarily conform to the currently accepted method of file
         specification scanning,  such  as  that  used  by  SCAN.   In

MCR53A.DOC                                                     Page 10


         particular, the command:

                FIL E.REL=FILE.MAC

         is accepted without error, and FILE.REL is created.  Also,  a
         single  filespec  will  cause the TOPS-20 version of MACRO to
         loop until it eventually runs out of core.

     22. The .DIRECTIVE .NOBIN does not work  properly  with  PRGENDed
         files, since the directive immediately closes the .REL file.

     23. .DIRECTIVEs MACPRF and .NOUUOS do not get  cleared  across  a
         PRGEND.

     24. MACRO is unable to PEEK ahead across the end of  macro  args,
         the  end  of  a  macro,  the  end  of an IRP, or the end of a
         REPEAT.  This means that constructs such as "==", "=:", "::",
         and others cannot be recognized across these limits.  This is
         related to not being able to continue  a  line  across  these
         boundaries.

     25. Either  "A=B##"  or  "A=EXP  B##"  should  generate  fullword
         Polish.   At  present,  the first case generates a right half
         external fixup, and the second  case  generates  bad  listing
         output and an incorrect .REL file.

     26. Polish used as  the  argument  to  a  B  shift  operator  may
         generate a bad .REL file, depending upon whether or not angle
         brackets surround the entire expression, such as:

                <<POLISH>B7*4>

     27. Characters that are not specified to be in MACRO's recognized
         character  set,  such as vertical bar, will be converted to a
         strange up-arrow character, if they are passed over  as  part
         of an unprocessed conditional.

     28. A macro which contains SALL and XLIST  will  cause  an  extra
         blank  line  to appear in the listing file, because both SALL
         and XLIST attempt to  finish  off  the  current  output  line
         before changing listing modes.

     29. An unary minus preceeding a relocatable expression such as:

                -<RELOC+2>

         generates garbage Polish.

     30. A Polish assignment statement  with  an  imbedded  assignment
         statement, such as:

                A=B##+<N=3>

         will not generate the proper Polish fixup block for symbol A.

MCR53A.DOC                                                     Page 11


     31. Phase errors can occur in a PSECTed program that has a symbol
         defined  as a Relocatable, and also as a MACRO/OPDEF/SYNONYM.
         This occurs because of the following:

         A. MACRO maintains a seperate symbol table  for  each  PSECT.
            This  is  done to keep EXTERNAL fixup chains seperate, and
            also for Relocatables since they may  be  referenced  from
            another PSECT.

         B. MACRO expects the two  definitions  for  the  same  symbol
            (Relocatable  and  MACRO/OPDEF/SYNONYM) to appear together
            in  the  same  symbol  table.   MACRO   frequently   makes
            decisions  concerning  the treatment of a symbol using the
            knowledge that both symbol definitions exist.

         C. In a PSECTed  program,  the  two  symbol  definitions  may
            actually  appear  in  different PSECT symbol tables.  This
            can  also  occur  differently  during  the   two   passes,
            depending  on  IF1  and  IF2  conditionals.   Also, if the
            MACRO/OPDEF/SYNONYM  is  defined  in  a   UNIVERSAL,   the
            situation   is  complicated  since  such  definitions  are
            usually entered into the symbol table for the Global PSECT
            when the symbol is referenced.

         Given the above,  it  is  possible  to  reference  the  wrong
         definition  of  a  symbol  during  pass  2  of  the assembly,
         generating a different amount  of  code  than  was  generated
         during pass 1, causing the phase errors.



4.0  INSTALLATION INSTRUCTIONS


The  MACRO  source  file  as  distributed  assembles  and  loads  into
MACRO.EXE.

To install MACRO Version 53A on your system, copy the  file  MACRO.EXE
to SYS:.

The distributed version of MACRO.CTL was used  to  first  build  MACRO
using  field  image  software  (MACRO version 53(1020)), and then this
created version was used to create itself.  The two versions of  MACRO
V53A were then checked for inconsistencies.  None were found.

Customers who wish to rebuild MACRO after installing any  changes  can
use  MACRO.CTL  as  a  guide to the building process.  It is unlikely,
however, that the .CTL file can be executed  without  modification  on
most user systems.  In particular, attention should be given to ERSATZ
devices, structure names, PPNs and other such system parameters.

MACRO requires field image HELPER, which is loaded implicitly  via  an
imbedded .REQUIRE pseudo-op in the MACRO source file.

MCR53A.DOC                                                     Page 12


5.0  INTERNAL CHANGES

Edit      SPR/QAR                     description
Start of version 53A
Following 3 patches are documented in the MACRO 53 BWR file
1021                When multiple .PSECT stmnts  exist  for  the  same
                    PSECT, origin need only be in one.
1022                In ARRAY pseudo op, allow UNV-searching of symbols
                    used in dimension argument.
1023                Correct     assembly     of      stmnts      like:
                    "FOO=IFNB <>,<BAR=5>".
1024                Some cleanup
1025                Don't go Polish calculating "REPEAT" count
1026                Fix bug caused by edit 1010 ( <POINT K,POL> )
1027                Make sure UOUT routine searches all  PSECT  symbol
                    tables.
1030                AC0 to AC2 in part of edit1021;  cause P-error  in
                    PSECT progam
1031                Turn off flag in RC to indicate undef  in  literal
                    in STOLIT 
1032      (25358)   Fix .XTABM with parenthesized macro call arg lists
1033      (25358)   Clear MACMPD  and  .XTABM/.ITABM  settings  across
                    passes
1034      (25555)   Fix fatal  errors  caused  by  bad  recovery  from
                    N-errors.
1035      (26078)   Fix OPDEF with TEXT  pseudo-ops  and  inside  lits
                    (rework edit 1000)
1036                Up CTLSIZ to 1000 characters
1037                Add code to use FORCEP for <POLISH>B<EXP> when not
                    in larger exp.
1040                Move embedded Polish into free  space  when  doing
                    POLPSH.
1041                Add .DIRECTIVE .NOUUO
1042                Calculate total symbol  count  before  turning  on
                    attribute  bits  (move  edit  1021 one instruction
                    lower and remove edit 1027)
1043                Change .DIRECTIVE .NOUUO to .DIRECTIVE .NOCALLIS
1044      (25015)   Fix bad load-time relocation  for  expressions  of
                    the   form   "A+B"  or  "A-B"  where  A  or  B  is
                    relocatable.
1045      (25581)   Preserve  symbol  characteristics  across   nested
                    assignments (e.g., A==:<B==2>)
1046      (11716)   Fix "ILL MEM REF" to addr 777777 due to bad  macro
                    call syntax
1047                Make expressions of the form  <A##,,POLISH>  where
                    POLISH is a Polish expression assemble correctly
1050                Fix   "?MCREPP"   error   during   processing   of
                    expressions  with  complex  external  left  halves
                    (e.g., <EXT##+1,,0>)
1051                Fix "?ILL MEM REF" after  "?MCREPP"  (expand  edit
                    1007)
1052      (26137)   Fix "?ILL MEM REF" with large PRGENDed files
1053                Generate X-error if exceeded max of created symbol
                    (..7777);   start  over  from  ..0000  rather than
                    creating ./0000

MCR53A.DOC                                                     Page 13


Edit      SPR/QAR                     description
1054      (25910)   Give  unary  operators   precedence   over   shift
                    operators and logical operators.
1055      (26428)   Don't   generate    Polish    for    REL-ABS    in
                    single-segment, non-Hiseg, non-PSECT program.
1056      (25357)   Make   MACRO    more    flexible    in    handling
                    angle-bracketed   args   to  .IF/.IFN;   implement
                    "EXPRESSION" attribute.
1057      (12055)   Restore correct .PSECT/.ORG interaction in wake of
                    edit 573
1060      (25477)   Improve "?MCRPTC Polish too complex" error message
                    by  appending "for symbol xxxxxx" or "for location
                    xxxxxx"
1061      (25715)   Re-do  "Error  while   expanding"   error-trapping
                    (supersedes edits 1046,746)
1062      (25907)   Fix listing of LIT inside SALL macro expansion
1063      (25777)   Make .XCREF, .CREF work inside literals
1064      (25777)   Fix listing of LALL inside SALL macro
1065      (25777)   Make LALL, XALL, SALL, LIST,  XLIST,  .DIREC  work
                    inside literals (requires edit 1064)
1066      (25838)   Make macro observe the settings of  message  level
                    bits  during  error message typeout (see GETTAB 35
                    monitor table)
1067      (26529)   BYTE psuedo-op specifying externals on other  than
                    full  or  half word boundaries produces EPP errors
                    and ILL MEM REF.
1070      (26571)   Correctly indicate EXTERN/INTERN  conflicts  as  E
                    errors instead of P or A errors
1071      (26690)   Set Polish flag in correct half of FR  when  doing
                    forced right half Polish in angle brackets
1072      (26749)   List complete macro call  line  when  XALL  is  in
                    effect
1073      (26884)   Fix ?ILL  MEM  REF  and  E  errors  during  Polish
                    indexing
1074      (12239)   Force   pairing    of    LIT    brackets    within
                    .PSECT/.ENDPS.  Make END illegal within literal of
                    any PSECT, not just current.  Correct  error  msg.
                    tag offset if within nested lits with labels.
1075      (27082)   List comment on macro call line when  XALL  is  in
                    effect
1076      (27099)   Do not allow '@' in AC field, flag as questionable
1077                Allow right  justified  relocatables  to  be  gtr.
                    than  18  bits  for  BYTE.  Make BYTE allow Polish
                    symbols only for full and half words.
1100                Eliminate phase errors produced by edit 1074
1101                Fix   bad   Polish   for   expressions   involving
                    inter-PSECT  references of relocatables.  Addition
                    to edit 1040.
1102                Keep DDT suppress  bits  when  symbol  defined  as
                    internal has an external or Polish value
1103                Rework REL+ABS,  REL+REL,  REL-ABS,  REL-REL  code
                    added   by  edits  1044  and  1055  to  handle  RH
                    relocatables only
1104      (12505)   Do not  generate  Polish  FWF  when  doing  Polish
                    indexing

MCR53A.DOC                                                     Page 14


Edit      SPR/QAR                     description
1105      (12506)   Make OP AC,-<POL> generate correct RH fixup
1106      (12637)   Do not generate fullword fixup unless external  is
                    of the form 0,,EXT
1107      (27389)   Do not allow Polish in index field, do  not  allow
                    externals  in  OP  code  index,  make psuedo-op in
                    index field work in all cases
1110                Generate correct Polish for V=EXT##+K  when  V  is
                    still  defined  by a special external pointer (not
                    yet defined in pass 2).  More of edit 703.
1111                Augment edit 1103 to generate less Polish.   Cases
                    improved   involve   negative   relocatables   and
                    relocatables  slightly  less  than   HMIN   (range
                    HMIN-400).
1112      (27167)   Expand .IF/.IFN feature by adding "NAME" attribute
                    indicating a single RADIX50 name (symbol) has been
                    passed as an argument.
1113      (27418)   Eliminate OPDEF processing inconsistencies
1114      (27388)   Add the swapped left half value of  the  index  to
                    the  Polish  generated  for statements of the form
                    'OPCODE AC,POLISH(LH,,RH)'
1115      (27544)   For DEC/EXP/OCT,  give  Q  error  for  unbracketed
                    expressions involving '@'.  Forces use of brackets
                    for full address calc.
1116                Fix inter-PSECT references to special pointers  of
                    externals  so  the  external  chain does not cross
                    PSECTs.
1117      (27728)   Make  .PSECT   handle   attribute   specifications
                    correctly
1120      (12962)   Reset RP and MP in the END code since macros  must
                    be completed
1121                Increase the number of extra (XTRA)  locations  to
                    save  for  PRGEND to 8 to prevent possible ILL MEM
                    REFs
1122      (27813)   Do not copy nulls into statement output buffer
1123      (27976)   Generate   Q   error   for   multiple    TITLEs/or
                    TITLE/UNIVERSAL  conflicts,  instead  of  M  error
                    during only pass 1
1124      (Q3051)   Increase .UNIV to 50.
1125      (Q3038)   Re-install macros for DIRECTIVE args and routines
1126      (Q3045)   Flag most assigments  involving  a  label  defined
                    within  a  literal  as L errors.  Label may not be
                    defined till end of pass 2.
1127      (Q3053)   Generate the desired ASCII string for  macro  call
                    arg  '\N  '  when  N  is  a symbol or expression -
                    broken by edit 137
1130                Reset assembly mode to  relocatable  (1)  at  pass
                    initialization.
1131                Remove edit 646, make PRGEND work with PSECTs
1132                Fix numerous PSECT bugs - PSECT FOO,1000  /  PSECT
                    FOO  loses  orig.   PSECT and LOC inconsistencies,
                    PSECT and PHASE inconsistencies.
1133      (Q3047)   Fix RSW3  to  properly  detect  when  the  listing
                    output buffer is full - handle tabs properly after
                    the 128 character limit

MCR53A.DOC                                                     Page 15


Edit      SPR/QAR                     description
1134                Make LOCO stay in sync.  with LOCA during pass  1.
                    PSECTs nested within literals cause out-of-sync.
1135      (28104)   Do 'OP' processing instead of a  full  word  fixup
                    for cases such as 'OP## AC,ADDR'.  This and Polish
                    opcodes will not produce the proper code for  left
                    half externals.
1136                Clear PSECT nesting counter and other PSECT  items
                    at PRGEND, plus check for PRGEND inside literals
1137                Flag non-absolute PSECT origins as an 'A' error
1140                Edit 1123 broke 5  character  TITLEs  in  PRGENDed
                    files,  clear  out  2nd word of TITLE when loading
                    default TITLE of .MAIN.
1141      (Q3085)   For PRGENDed programs, print BREAK, CPU TIME, CORE
                    USED data for each program module.
1142      (Q3181)   Repeat the  eol  char.   if  a  terminating  angle
                    bracket is missing.
1143                SYN A,B will not cref B as defining occurance
1144                Save/clear/and restore cpu type over PRGENDs.
1145                Edit 1135 stopped generation of  full  word  fixup
                    for [FOO  ].
1146                Allow NUL:  as cref device.
1147                Edit 1113 caused the OPDEF in "EXP OPDEF  AC,ADDR"
                    to  be  processed  as  an  address, discarding the
                    remaining fields.
1150      (Q3261)   XLIST under SALL  puts  extra  characters  in  the
                    listing file.
1151                Do not output block 22's after the end  block  for
                    PRGEND.
1152      (Q3410)   Edit 1143 caused bad CREF data to be generated for
                    a SYN such as "SYN IFE,IF".

;*****End of Revision History*****

MCR53A.DOC                                                     Page 16


6.0  SUGGESTIONS

The following is  a  list  of  suggestions  accumulated  from  various
sources.   The  appearance of a suggested change in this list does not
imply any commitment or intent on the part of  DEC  to  implement  any
such change.

     1.  Use a hash table instead of binary search.  Add a  switch  to
         specify the hash size.

     2.  Better core management scheme.

     3.  Search UUOSYM.

     4.  Use MACTEN and JOBDAT.

     5.  Allow curvy brackets to work the same as angle  brackets  < >
         for conditionals, REPEATs, IRPs, etc.

     6.  Add an error file to contain all assembly errors to  be  used
         with /N switch.

     7.  Allow the line  continuation  character  (^_)  to  work  over
         end-of-macro, -IRP, etc.

     8.  Add all of the KL10 hardware opcode mnemonics.



[End of MCR53A.DOC]

[MCR53.DOC is appended as an integral part of MCR53A.DOC]

MCR53.DOC                                                      Page 17


MACRO.DOC -- Changes from V52(551) to V53(1020)
March 1978



1.0  SUMMARY

The   purpose   of   this   release   is   to   provide   a   software
multiple-segmentation (PSECT) facility.

MACRO version 53 is supported by Digital  Equipment  Corporation,  and
runs  on  all  supported  monitors  as  released.   Version  53  fully
supersedes all previous versions, and includes edits up to #1020.

MACRO V53 requires field image HELPER.REL to be on SYS:  in  order  to
type  out  the help file MACRO.HLP, which should be placed on HLP:  or
REL:.

MACRO V53 requires that if PSECTS are used, the resultant  .REL  files
be loaded with LINK V4, which fully supports the PSECT facility.

MACRO is documented in the  DECsystem-10  User's  Guide,  and  in  the
DECsystem-10 MACRO User's Guide.



2.0  EXTERNAL CHANGES

     1.  .PSECT pseudo-op:

         The .PSECT pseudo-op  directs  MACRO  to  start  or  continue
         placing  code  and/or  data  into  the named program section.
         Syntax:

              .PSECT name, origin

         Where "name" is the name of the program section;  name may be
         any  construction  which  would be valid as a symbol but will
         not conflict with a symbol or macro of the same name.

         MACRO will generate a global symbol having the PSECT name and
         at  load time the symbol will take on the PSECT origin as its
         value.

         The origin, if supplied in the program, tells LINK where  the
         PSECT  origin should be.  If not supplied then it must be set
         by  the  /SET:NAME:ORIGIN  switch  to  LINK.   If  both   are
         supplied,  whichever  occurs  first  is  used  and  cannot be
         over-ridden by a later declaration.

MCR53.DOC                                                      Page 18


     2.  .ENDPS pseudo op:

         The .ENDPS pseudo-op  directs  MACRO  to  stop  placing  code
         and/or  data  into  the  current program section and to start
         placing it  in  the  previous  (more  outer  nested)  program
         section.  Syntax:

              .ENDPS [name]

         The name field is optional and if  present  will  be  checked
         against the current .PSECT name.  If there is a disagreement,
         a warning diagnostic will be issued.  This  check  cannot  be
         done for the blank .PSECT.

     3.  "PSECT" Nesting

         .PSECT and .ENDPS are essentially brackets which surround the
         code and/or data which is to be loaded into the named program
         section.  These brackets may be nested  to  a  maximum  depth
         which  is  an  assembly  parameter normally set to 16 decimal
         when the MACRO assembler is assembled.  Another such assembly
         parameter  within  MACRO  is  the  maximum number of distinct
         .PSECT names which may occur within a single assembly;  it is
         normally set to 64 decimal.

     4.  Restrictions

         a.  .PSECT and .ENDPS are not allowed  within  a  "UNIVERSAL"
             file.

         b.  While MACRO allows a macro and a symbol to have the  same
             name,  this  can produce unpredictable results if the two
             are not in the same  symbol  table  during  an  assembly.
             This can happen if one is in a universal symbol table and
             the other is not, or if the two appear to be in  separate
             segments.   It  is recommended that symbols and macros of
             the same name not be employed.  If they are, DEC reserves
             the  right  to  change  the  implementation  of the MACRO
             assembler with respect to how this situation is treated.

         c.  If  universal  files  are  searched  while  assembling  a
             program  with  multiple  program sections, symbols within
             the universal files  will  appear  to  be  in  the  blank
             program   section.   This  is  particularly  relevant  to
             relocatable symbols.

         d.  .PSECT, HISEG, and TWOSEG are all mutually exclusive.

         e.  Literals containing inter-PSECT references  will  not  be
             collapsed,  therefore  if  there  are  two such identical
             literals, two separate entries in the literal table  will
             be made.

         f.  PRGEND is illegal with .PSECT and  MACRO  will  treat  it
             like END and the rest of the file will be truncated.

MCR53.DOC                                                      Page 19


     5.  New Error Messages:

       "S" Errors:

         a.  Attempt to nest .PSECTs too deep.

         b.  Attempt to unnest .PSECTs too far.

         c.  .PSECT occurs while assembling a universal.

         d.  Too many distinct .PSECT names.

         e.  Attempt to mix .PSECT with HISEG/TWOSEG.

       "Q" Warning (additional):

         a.  .ENDPS specifies the wrong name.

         b.  .PSECT specifies conflicting attributes.

         c.  .PSECT specifies unknown attributes.

       New MCR error messages:

         a.  MCRSTO -- Search table overflow

         b.  MCRATS -- Argument too small.

         c.  MCRLTL -- Literal too long.

         d.  MCRISD -- Illegal syntax in DEFINE.

         e.  MCRISR -- Illegal syntax in REPEAT.

         f.  MCRISC -- Illegal syntax in conditional.

         g.  MCRISI -- Illegal syntax in IRP or IRPC or REPEAT.

     6.  .IF ARG,REFERENCED,< ....  >
         .IF ARG,NEEDED,< ....  >

         REFERENCED --   The code will be assembled if arg is  in  the
                         symbol table.

         NEEDED     --   The code will be assembled if arg is  in  the
                         symbol table and its value is undefined.

     7.  Alternate Interpretations of MACRO Arguments

         The normal argument passed by a  macro  call  is  simply  the
         string of characters given with the call.  MACRO offers three
         alternate interpretations of the passed argument.

MCR53.DOC                                                      Page 20


         If you prefix a backslash (\) to an argument, MACRO expects a
         numerical  value  and  the ASCII string representation of the
         value is passed.

         If you prefix a backslash-apostrophe (\') to an argument, the
         argument is expected to have a value of a SIXBIT string.  The
         ASCII representation of that SIXBIT value is passed.

         If you prefix a backslash-quotemark (\") to an argument,  the
         argument  is expected to have a value of a ASCII string.  The
         ASCII string value is passed.

        LALL
        DEFINE LOOKIE(STR,ARG) <
                REMARK  The passed argument is:  ARG
                REMARK  build a new string:     str'arg >

;Example of prefixing actual argument with \
CASE1:  VALUE=0
        LOOKIE LPT,<VALUE+1>^
                REMARK  The passed argument is:  VALUE+1
                REMARK  build a new string:     LPTVALUE+1
CASEA1: REPEAT 3,<
        LOOKIE  LPT,\<VALUE+1>
                VALUE=VALUE+1>
        LOOKIE  LPT,\<VALUE+1>^
                REMARK  The passed argument is: 1
                REMARK  build a new string:     LPT1    ^
                VALUE=VALUE+1
        LOOKIE  LPT,\<VALUE+1>^
                REMARK  The passed argument is: 2
                REMARK  build a new string:     LPT2    ^
                VALUE=VALUE+1
        LOOKIE  LPT,\<VALUE+1>^
                REMARK  The passed argument is: 3
                REMARK  build a new string:     LPT3    ^
                VALUE=VALUE+1
;Example of prefixing argument with \'
CASE2:  VALUE='A'
        LOOKIE  DSK,VALUE^
                REMARK  The passed argument is: VALUE
                REMARK  build a new string:     DSKVALUE      ^
CASE2A: REPEAT  3,<
        LOOKIE  DSK,\'VALUE
                VALUE=VALUE+1>
        LOOKIE  DSK,\'VALUE^
                REMARK  The passed argument is: A
                REMARK  build a new string:     DSKA    ^
                VALUE=VALUE+1

MCR53.DOC                                                                Page 21


        LOOKIE  DSK,\'VALUE^
                REMARK  The passed argument is: B
                REMARK  build a new string:     DSKB    ^
                VALUE=VALUE+1

        LOOKIE  DSK,\'VALUE^
                REMARK  The passed argument is: C
                REMARK  build a new string:     DSKC    ^
                VALUE=VALUE+1

;Example of prefixing argument with \"
CASE3:  VALUE="XIT"
        LOOKIE  <?ERROR IN LINK MODULE LNK>,VALUE^
                REMARK  The passed argument is: VALUE
                REMARK  build a new string:     ?ERROR IN LINK MODULE LNKVALUE ^
CASE3A:  LOOKIE <?ERROR IN LINK MODULE LNK>,\"VALUE^
                REMARK  The passed argument is: XIT
                REMARK  build a new string:     ?ERROR IN LINK MODULE LNKXIT

     8.  Polish bugs fixed in the following areas:

         <XWD POL,POL> or <POL,,POL>

         <IOWD POL>

            -<POL>

            -EXP where EXP is a relocatable expression

            @POL(AC)

            OPDEF FOO [ POL ]

         Generate full word fixup for FOO##

     9.  Polish listing format

         A number sign (#) in the  listing  indicates  that  a  Polish
         expression is required to resolve the expression:

         For example:

         561  02  000  000000#      ;requires right half Polish fixup
         000000000000#              ;requires full word Polish fixup
         000000# 000002             ;requires left half Polish fixup

MCR53.DOC                                                      Page 22


    10.  PSECT index in listing

         PSECT index is output at the end of relocation counter  value
         in the listing, see example below:

5172                                ;GETNAM - RETURN LOCAL NODE NAME
5173
5174  005654'02 256 04 0 00 007001' GETNAM: UMOVE   T2,2          ;GET ADDRESS OF USER'S ARGUMENT BLOCK
5175  005655'02 256 04 0 00 007002'         UMOVE   T1,.NDNOD(T2) ;GET POINTER TO WHERE NODE NAME IS TO GO
5176  005656'02 201 03 0 02 000000          MOVEI   T3,.NDNOD(T2) ;GET ADDRESS TO RETURN UPDATED POINTER
5177  005657'02 561 02 0 00 000000#         HRROI   T2,OURNAM-1   ;GET POINTER TO SOURCE STRING
5178  005660'02 260 17 0 00 000000*         CALL    CPYTU1        ;COPY STRING TO USER SPACE, RETURN POINTER
5179  005661'02 254 00 0 00 005653*         RETSKP                ;DONE, RETURN SUCCESS
5180
5181
5182                                        TNXEND
5183                                        END
PROGRAM BREAK IS 000000
PSECT 1 BREAK IS 000534 FOR RSCOD
PSECT 2 BREAK IS 007036 FOR NRCOD
PSECT 3 BREAK IS 000066 FOR BGSTR
PSECT 4 BREAK IS 000011 FOR BGPTR
CPU TIME USED 02:28.153

98P CORE USED

    11.  Polish not allowed with RELOC & BLOCK & Conditionals
    12.  KL instructions have been updated

                       JRST and JFCL Mnemonics
                       -----------------------


     254 04 0 00 000000      HALT     254 04 0 00 000000    JRST 4,
     255 06 0 00 000000      JCRY     255 06 0 00 000000    JFCL 6,
     255 04 0 00 000000      JCRY0    255 04 0 00 000000    JFCL 4,
     255 02 0 00 000000      JCRY1    255 02 0 00 000000    JFCL 2,
     254 12 0 00 000000      JEN      254 12 0 00 000000    JRST 12,
     255 01 0 00 000000      JFOV     255 01 0 00 000000    JFCL 1,
     255 10 0 00 000000      JOV      255 10 0 00 000000    JFCL 10,
     254 02 0 00 000000      JRSTF    254 02 0 00 000000    JRST 2,
     254 01 0 00 000000      PORTAL   254 01 0 00 000000    JRST 1,
     254 06 0 00 000000      XJEN     254 06 0 00 000000    JRST 6,
     254 05 0 00 000000      XJRSTF   254 05 0 00 000000    JRST 5,
     254 07 0 00 000000      XPCW     254 07 0 00 000000    JRST 7,
     254 14 0 00 000000      XSFM     254 14 0 00 000000    JRST 14,

MCR53.DOC                                                      Page 23


                  KL10 EXTEND Instruction Mnemonics
                  ---------------------------------


     002 00 0 00 000000      CMPSE    010 00 0 00 000000     CVTDBO
     007 00 0 00 000000      CMPSG    011 00 0 00 000000     CVTDBT
     005 00 0 00 000000      CMPSGE   004 00 0 00 000000     EDIT
     001 00 0 00 000000      CMPSL    016 00 0 00 000000     MOVSLJ
     003 00 0 00 000000      CMPSLE   014 00 0 00 000000     MOVSO
     006 00 0 00 000000      CMPSN    017 00 0 00 000000     MOVSRJ
     012 00 0 00 000000      CVTBDO   015 00 0 00 000000     MOVST
     013 00 0 00 000000      CVTDBT   020 00 0 00 000000     XBLT

    13.  Tags defined in a literal:

         Tags in literals may be referenced anywhere from the  program
         with the following restrictions.

         a.  May NOT be used in an arbitrary expression.

         b.  May NOT be referenced from another PSECT.

    14.  Code Generation Changes:

         The descriptions of the block types 24,23, and  22  supercede
         the descriptions in the LINK manual.

         BLOCK 24  -- MACRO generates a  set  of  block  24's  at  the
         beginning of the Rel file for each PSECT in this assembly.  A
         type 24 contains three data words -- a PSECT name in  SIXBIT,
         its  attributes  (right  half) and its index (left half), and
         its origin.  A block 24 establishes a PSECT and associates it
         with  an  index number so that block 22's and block 11's that
         follow may reference PSECTs by the PSECT index number.

         BLOCK 22 -- Interspersed with the type 1  and  type  2  codes
         there  are  type  22  codes.   A  type 22 directs the linking
         loader to place subsequent type 1 and type 2 information into
         the  named  .PSECT.   A  type 22 will also precede the type 7
         block if one occurs and other type 22s have been emitted.   A
         type 22 contains only one data word which is the PSECT index.

MCR53.DOC                                                      Page 24


         BLOCK 23 -- MACRO generates a set of block 23's for  all  the
         PSECTs  at  the end.  A type 23 contains two data words.  The
         first is a .PSECT name in SIXBIT.  The  second  contains  the
         .PSECT break.

         BLOCK 11 -- There is an additional type of Polish fixup which
         occurs  for  assemblies with multiple .PSECTs.  With multiple
         .PSECTs, it is necessary to  distinguish  among  the  .PSECTs
         within  the  fixups  in  order  that  relocation  will  occur
         properly.  Halfword PSECT  index  of  the  form  400000+(n-1)
         indicates  next  relocatable  address is to be relocated with
         respect to the PSECT which is  named  by  the  n'th  type  23
         block.   The  very  first PSECT index in block 11 defines the
         current PSECT  and  the  relocation  counter  for  the  store
         address.  Any relocatable operand with a different relocation
         counter must be preceded by the proper PSECT index.

         BLOCK 10 -- Forward references of a tag defined in a  LITERAL
         are  chained similarly to that of an external chain.  A block
         10 is generated containing the value of the tag and the start
         of  the  chain.  A separate chain is generated for each PSECT
         just as a separate external chain is generated for PSECT.

    15.  Better RELOC,LOC, .ORG interactions

    16.  Add .NODDT pseudo-op --

         Suppress DDT and part of symbol names

    17.  REL files generated by  MACRO  V52  and  MACRO  V53  may  not
         compare with FILCOM.

    18.  Universals are not searched when processing  label,  ##,  END
         statement  and  the  following  pseudo-ops:   EXTERN,  OPDEF,
         .ASSIGN, SYN, INTEGER, ARRAY,  .COMMON,  DEFINE.   Pseudo-ops
         INTERN  and ENTRY will still search universals since they are
         not truely defining occurrences.

    19.  OPDEF's may be declared INTERNAL only if no label of the same
         name exists.

    20.  LABEL+OFFSET error reporting is now entirely source-oriented.
         Specifically,  blank  lines  are reflected in the offset, and
         MACRO/REPEAT expansion lines are not.

MCR53.DOC                                                      Page 25


3.0  KNOWN BUGS AND DEFICIENCIES

     1.  MACRO can't generate any Polish block  which  will  use  more
         than 17 words.

     2.  You can't forward reference a Polish symbol,
         should do:

              FOO=EXT##+1
                   .
                   .
                   .
              MOVE  1,FOO

     3.  A  Polish  OPDEF  is  treated  internally  as  a  full   word
         assignment.  As a result, AC and address may not be used with
         it.



     4.  MACRO's floating point input routines do not agree with those
         of other compilers, FORTRAN in particular.

     5.  MACRO will not assemble a line in PIP correctly:

               DISP   ),0

         Add angle  brackets  around  the  un-paired  close  paren  in
         PIP.MAC:

               DISP   <)>,0

     6.  MACRO will not assemble a line in RUNOFF correctly:

               MSG$   ..."

         Delete the unpaired  quote  mark  at  the  end  of  the  line
         RUNOFF.MAC:

               MSG$   ...

     7.  MACRO prevents  the  TWOSEG  pseudo-op  from  working  across
         PRGEND.   LOGIN  57 took advantage of the bug.  Correct LOGIN
         sources as follows:  remove the TWOSEG pseudo-op from page  1
         of  LGNUNV.   On page 2 of LGNUNV, add a TWOSEG to the LGNDCL
         macro definition just before the RELOC  400000.   In  LGNLOW,
         add  a  TWOSEG before the RELOC 400000.  This fix is included
         in LOGIN version 60, which is fully compatible with  versions
         50A, 52, and 53 of MACRO.

     8.  MACRO currently will not  allow  pooling  of  literals  which
         contain labels.

MCR53.DOC                                                      Page 26


     9.  If the right hand side  of  an  assignment  statement  is  an
         expression  containing  Polish,  angle-brackets must surround
         the expression.

     10. Expressions of the form

              <EXT  +1>B7

         generate a ?MCREPP error message.

     11. Incorrect CREF listings generated when:

              .zero loop of IRP is done.

              .references suppressed by XLIST inside macro expansion.

     12. Phase errors will be generated by MACRO when  assembling  the
         distributed MIC source.  MACRO allows macro calls to occur in
         the operand field of a source statement.  The sample  program
         below  shows  the  sequence of instructions in the MIC source
         which causes the phase errors to occur.

              SEARCH MACTEN
              JRST MACERR
              MACERR:
              END

         As  shown  above,  MIC.MAC   forward-references   MACERR,   a
         user-defined  label.   However,  MACERR  also  happens  to be
         defined in MACTEN as a macro.  Since MIC searches MACTEN, and
         since  macro  calls  are allowed in operand fields, the macro
         definition is used in assembling the statement "JRST  MACERR"
         in  pass  one.  This causes phase errors in pass two when the
         correct label definition is used.  Problem may  be  fixed  by
         changing the lable name MACERR so as not to conflict with the
         macro name.

     13. In SETSRC.MAC, MACRO encounters  a  forward  reference  of  a
         symbol  name  JSYS, and MACRO assembles in TOPS20 JSYS opcode
         instead of user label address.  By changing  the  label  name
         and  all  its  references in SETSRC, you will get the correct
         assembly.



4.0  INSTALLATION INSTRUCTIONS


The MACRO source file  as  distributed  assembles  and  loads  into  a
sharable  segment.   For this release, MACRO.EXE is being distributed.
Installations without .EXE file support must reload to get MACRO.SHR.

To install MACRO Version 53 on your system, copy the file MACRO.EXE to
SYS:.

MCR53.DOC                                                      Page 27


The distributed version of MACRO.CTL was used  to  first  build  MACRO
using  field image (MACRO 52) MACRO, and then use this created version
to create itself.  The two versions of MACRO V53 were then checked for
inconsistancies.  None were found.

Customers who wish to rebuild MACRO after installing any  changes  can
use  MACRO.CTL  as  a  guide to the building process.  It is unlikely,
however, that the .CTL file can be executed  without  modification  on
most user systems.  In particular, attention should be given to ERSATZ
devices, structure names, PPNs and other such system parameters.

MACRO requires field image HELPER, which is loaded implicitly  via  an
imbedded .REQUIRE pseudo-op in the MACRO source file.



5.0  INTERNAL CHANGES

;Continued Version 52
;553      (22193)   Flag  non-sixbit  in  single-quote  strings   with
                    Q-error
;554      (10382)   Don't replace ^Z with LF unless input DEV is TTY
;555      (10202)   Warn user if code stored before .COMMON
;556      (22425)   Allow  leading  numeric  char  in   arguments   to
                    "SEARCH"
;557      (22491)   Generate -X (where X is relocatable) properly
;560      (22488)   Place all occurences of flags  'INASGN',  'INANGL'
                    under Polish Feature Test
;561      (22490)   Generate -1^!X (where X is relocatable) properly
;562      (22544)   Fix page offset after PRGEND
;563      (22495)   Fix ;;  comments listing when defined under LALL
;564      (22493)   Prevent "IO TO  UNASSIGNED  CHANNEL"  error  after
                    "?POLISH TOO COMPLEX" error message
;565      (22489)   Prevent terminal wait  after  PRGEND  after  being
                    detached or CCONTED
;566      (22498)   Remove Edit 531;  broke listing of embedded  macro
                    calls under XALL
;567      (22500)   Enhancement  EDIT/REQUEST   REL:HELPER,LC   SYMBOL
                    TYPES,U-LC MONTHS
;570      (10570)   Prevent E-errors  after  purge  of  UNDEF  or  EXT
                    symbol
;571      (22676)   Force  HISEG  to  start  on  page  boundary,   not
                    K-boundary
;572      (22748)   Replace Edit 556 by alternate  edit  accomplishing
                    same purpose
;573      (22321)   Fix LOC/RELOC in TWOSEG RELOC programs
;574      (22501)   Add "ILLEGAL SYNTAX  IN  MACRO  DEFINITION"  error
                    message
;575      (22492)   Put all PSECT-RELATED code under FTPSECT switch
;576      (22485)   Fix LABEL+OFFSET accross segments, and when OFFSET
                    > 1000
;577      (22187)   Fix listing of MACRO expansion with  errors  under
                    SALL

;Start of Version 53

MCR53.DOC                                                      Page 28


;600                Turn on FTPSEC
;601                Fix tags in LIT used with PSECTs
;602                Allow .PSECT/.ENDPS in LIT
;603                Force expression evaluation in conditional.
;604                Comment out 1LINE @BOUT20+5 (needs re-work)
;605                Fix bug with wrong RELOC value for PSECT @%SWSG2+6
;606                E-error if FOO##=EXP @ASSIG3+6
;607                Generate a word of 0 for [SIXBIT\\] @SIXB20+
;610                Do expression of Polish symbols from UNV in  PASS2
                    @EVNUM+
;611                Alphabetize .IF/.IFN attribute table.
;612                Fix bug with "IOWD A##,FOO" when used with PSECT
;613                Store current RADIX in CURADX and free  up  RX  as
                    FRR.
;614                Output "#" bin binary listing to  indicate  Polish
                    fixup.
;615                Output number of pages used instead.
;616                Don't  allow  Polish   for   "BLOCK"   &   "RELOC"
                    pseudo-ops.
;617                Don't make  LTAGF  symbols  externals  at  end  of
                    PASS1.
;620                Q-error if externals purged.
;621                Add .IF FOO,REFERENCED,<...>
;622                Fix bug with outputting "#"
;623                Allow expressions of externals and PSECT-SYMBOLS.
;624                Allow Polish with OPDEF
;625                Generate Polish FWF for [A##]
;626                Add .IF FOO,NEEDED,<...>
;627                Update KL instructions
;630                More on Edit 625 to check for  LH=0,INDIRECT,INEX,
                    & POLISH
;631                Generate a set of BLOCK23's before all the symbols
;632                (Same as 577)
;633                Output "#" and  "*"  for  assignments  and  symbol
                    tables.
;634                Allow "A FOO##+1(1)".
;635                Add special chars \' and \" in a macro call.
;636                Allow POLISH and INDEXing
;637                Don't do FWF for OPDEF A[B##]
;640                Save AC FR  on  stack  before  doing  exponent  in
                    number processing.
;641                Check for PSECT when doing FWF @OCTFW+
;642                Set PSECT index to 0 before generating BLOCK 5
;643                Fix bug with FOO##(1)
;644                Fix bug with EXP FOO##,FOO##,FOO##
;645                FWF for undefined symbol in operator field.
;646                Illegal to use PRGEND with PSECT, treat it as end
;647                Output PSECT INDEX in listing
;650      (22327)   Fix disappearing macro calls with FF under SALL
;651      (22226)   Fix variety of listing bugs tied to error-flagging
;652      (22999)   Fix "ENTRY FOO" where FOO is also an OPDEF
;653      (22497)   Flag "VERSION SKEW" if old-style UNV with SYN
;654                Fix typographical error in published Edit 564
;655      (22482)   Fix too many LINES/PAGE  with  XLIST  inside  SALL
                    MACRO

MCR53.DOC                                                      Page 29


;656      (22499)   Fix "?ILL MEM REF"  while  expanding  macro  calls
                    embedded commas
;657      (Q1382)   Extend new MACRO ARG handling to  parenthesized  a
                    ARG string
;660      (23098)   Restore IFE/IFN A## handling to old (pre-52) way
;661      (22515)   Prevent ILL MEM REF on unclosed text in multi-line
                    assignment
;662                Simplify Edit 561
;663      (23170)   Fix lost  errors  in  PASS1  during  line  "IMAGE"
                    typeout
;664                Speed  and  efficiency  enhancements;    ROUTINES:
                    GETCHR,PRINT,CHARAC,READ1A
;665      (23246)   Don't treat leading commas as semicolons
;666                Fix various bugs tied to "LABEL+OFFSET" typeout
;667                Fix bad ASCIZ in  LITERALS  (side-effect  of  Edit
                    661)
;670                Allow >NODDT of OPDEF  (i.e.,  .NODDT  PJRST,CALL,
                    etc.)
;671                Remove Edit 657 (i.e., take familiar path of least
                    resistance with regard to existing programs)
;672                Ignore redundant search ARGs,  add  "Search  Table
                    Overflow" error message
;673      (Q1286)   List CRLFs in parenthesized MACRO ARGs correctly
;674                Give E-error for external array name
;675                Handle INTERN of mixed ARG types correctly
;676                Prevent the use of argumens < 4 to /NNL
;677                Allow  .IF  EXPRESSION,QUALIFIER<CODE>   (omitting
                    comma)
;700                Alter "Core  Allocation  Problem"  error  message,
                    force   reallocation  unless  /U  (memory-resident
                    universals)
;701                Flag non-sixbit  in  SIXBIT  Pseudo-op  correctly,
                    terminating string
;702                Replace  MBR,MBC,MBI  messages  with   ISR,ISC,ISI
                    (syntax checks)
;703      (22939)   Handle comples forward REF of SYM where SYM=POLISH
                    correctly
;704                Fix  bad  CREF  output  when  listing  MACRO  ARGS
                    W/CRLFs and "\"
;705      (23527)   Fix ILL MEM REF with  IFX  <POLISH  SYMBOL>  (side
                    effect of 660)
;706      (22484)   Make    <LH,,POLISH>,<POLISH,,RH>,<POLISH,,POLISH>
                    work
;707                Fix bug with LITERAL PC when doing  PSECT  changes
                    at end.
;710                Get correct relocation when evaluating "!".
;711                Enter Psect-names as external symbols.
;712                Collapse 2 instructions into EXTRN2 routine
;713                Move no UNV search flag into AC FRR.
;714                Reset symbol table pointer when a  tag  has  other
                    use in DIFF PSECTs
;715                Search only current symbol table  in  looking  for
                    VARs.
;716                Reset REL1P pointer at pass initialization
;717                Bug fix with PSECT output format

MCR53.DOC                                                      Page 30


;720                Flag .DIRECT no no ARG with Q-error
;721                Fix bug in Edit 573 with RELOC/RELOC/LOC/RELOC ARG
;722      (10945)   Flag IOWD A,B where A is RELOC with R-error
;723      (10929)   Fix truncating or garbling of long PRINTX text
;724      (23826)   Give  "UNASSIGNED"  error  message  for  undefined
                    symbols   with   unresolved   36BIT  values  (e.g.
                    B=B+1000000).
;725      (23588)   Don't  collapse  literals  which  contain  labels.
                    This  edit  should  be  removed when a facility is
                    added  to  update  label  values   after   literal
                    pooling.
;726                Implement "LTL LITERAL TOO LONG" error message.
;727                Generate correct Polish for <POL>.
;730                Generate correct Polish for <IOWD POL,POL>
;731      BBN       Bug fix with GETCHR
;732                Include S-error in definition of errors.
;733      (24065)   Fix bad entry block  caused  by  bad  SEARCH/ENTRY
                    interaction
;734      (23987)   Handle negative relocation correctly with Polish
;735                Allow  forward-ref   of   tags   in   LIT(generate
                    10-blocks).
;736                Fixup SYMTAB  after  FORWARD-REF  to  USER-DEFINED
                    operator.  (MACRO,OPDEF,SYN)
;737                Fix bug with the new IOWD code.
;740                Check for non-referenced literal tags.
;741                A-error when LH-truncated with RELOC.
;742                VARF (TREF) used with LTAGF mean tag referenced.
;743                Suppress PASS1 IFX V-error.
;744      (Q2191)   Make sure LTGSW gets cleared each time.
;745                Check for SPTR before update in ASSIGN.
;746                Give ERRMSG when MRP points  to  0  due  to  MACRO
                    expansion ERR.
;747                Generate  correct  Polish  for  <E,,K>,<K,,E>,   &
                    <E,,E>.
;750                Fix bug with @POL(K).
;751                <Point K,POL,POL> to use ANGFP routines.
;752                Resolve edit 736 & 675 conflict in OPDEF handling.
;753      (18606)   Prevent extra line listing with FF inside repeat 0
                    or failing conditional.
;754      (22804)   Clear XLIST after END/PRGEND (doesn't affect lits,
                    etc.).
;755      (22442)   Output title ".MAIN" for untitled  PRGEND  modules
                    during RPG assembly.
;756      (24473)   Fix too few lines/listing-page with PRINTX.
;757(Removed)       Make sure ^- has  higher  precedence  over  binary
                    operators.
;760                Output binary on block statement in  a  long  line
                    inside MACRO.
;761      (Q2201)   Fix bug in EOUT that  generated  wrong  count  for
                    block 4.
;762      (Q2204)   E-error for BYTE (N)...POL...  where N .NE.  ^D36.
;763      (Q2211)   Generate block 22 with  symbol  table  instead  of
                    block 23.
;764                Check for internal OPDEF at INDEF.
;765      (Q2195)   Don't generate empty entry block.

MCR53.DOC                                                      Page 31


;766                Same as 733.
;767      (Q2185)   Re-do calculation of RC in EVADR.
;770      (Q2210)   Fix bug with flagging  multiply  defined  tags  in
                    different PSECTS.
;771                Test for NOPSW at closing angle bracket.
;772                Fix bug with referencing Polish OPDEF.
;773                Replace edit 747
;774                Make LABEL+OFFSET hangling consistant.
;775      (Q2200)   Check CPU value before typeout of size info.
;776                Don't do PSECT check for phased label.
;777                Allow BYTE(18) of Polish if half word aligned.
;1000               Add 2 cells  for  building  OPDEF  code  to  avoid
                    problem with nested literals.
;1001               Don't let  MACRO  expansions  change  LABEL+OFFSET
                    settings.
;1002     (Q2235)   Don't store UNV name until it's verified.
;1003     (24751)   Make FF list correctly (supersedes edit 753).
;1004               Minor source changes:  tabs in  long  line,  page,
                    etc.
;1005               Don't generate global request for a  symbol  where
                    symbol=UND.
;1006               Save INOPDF @SQBRK+  to  allow  literal  in  OPDEF
                    definition.
;1007               Give EPP message  due  to  typos  causing  illegal
                    Polish.
;1010               Add a word to differentiate <0,,POL> with <POL>
;1011     (Q2276)   Save INOPDEF @ANGLB+  to  allow  nested  <...>  in
                    OPDEF definition.
;1012               Recover EXTPNT if needed at OP3.
;1013               Move left Polish to  free  Polish  to  free  space
                    before storing the ptr in XWDANG.
;1014               Allow ENTRY, INTERN statements to appear in  diff.
                    PSECT then the tag.
;1015               Fix bug with setting  up  correct  MP  for  macros
                    nested in conditionals.
;1016               Define a relocatble PSECT bit for PSECTS  with  no
                    fixed origin.
;1017               Carry  undefined  bit  accross  assigment   during
                    pass1.
;1020               Modify block 22's and block  23's  and  add  block
                    24's.

;*****End of Revision History*****

MCR53.DOC                                                      Page 32


6.0  SUGGESTIONS

The following is  a  list  of  suggestions  accumulated  from  various
sources.   The  appearance of a suggested change in this list does not
imply any commitment or intent on the part of  DEC  to  implement  any
such change.

     1.  Use a hash table instead of binary search.  Add a  switch  to
         specify the hash size.

     2.  Better core management scheme.

     3.  Search UUOSYM.

     4.  Use MACTEN and JOBDAT.

     5.  Allow curvy brackets to work the same as angle  brackets  < >
         for conditionals, REPEATs, IRPs, etc.

     6.  Add an error file to contain all assembly errors to  be  used
         with /N switch.

     7.  Allow the line  continuation  character  (^_)  to  work  over
         end-of-macro, -IRP, etc.

     8.  Allow more than ten universal files to  be  created  or  read
         during a given assembly.



[End of MCR53.DOC]