Trailing-Edge
-
PDP-10 Archives
-
bb-d868e-bm_tops20_v41_2020_dist_1of2
-
4-1-documentation/macro.doc
There are 25 other files named macro.doc in the archive. Click here to see a list.
MACRO.DOC -- Changes from V53(1020) to V53A(1152)
August 1979
COPYRIGHT (C) 1976,1979 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.
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]