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]