Google
 

Trailing-Edge - PDP-10 Archives - ap-c796e-sb - mcr53.doc
There are no other files named mcr53.doc in the archive.


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






























COPYRIGHT (C) 1976,1978 BY
DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.


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.
MCR53.DOC                                                       Page 2


MACRO.DOC -- Changes from MACRO 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 3


     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 4


     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 5


         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 6


        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 7


    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 8


                  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 9


         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 10


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 11


     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 12


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 13


;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 14


;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 15


;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 16


;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 17


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]