MACN11 is a PDP-11 MACRO language assembler which operates on the PDP-10. This document describes version 3 of MACN11; with the exception of differences listed in the following pages, it is compatible with the language accepted by MACRO-11 under DOS Version 9, as described in DEC's DOS/BATCH assembler manual (order no. DEC-11-LASMA-A-D). Bug reports, comments, and suggestions concerning either version of MACN11 are welcome via net mail to Raveling@ISIB. Notes on MACN11 Version 3 Page 2 -------- Language Variations from MACRO-11 --------- << Features not yet supported >> .PSECT -- Not recognized at present. .DSABL REG -- Parsed properly but ignored; Register definitions are always enabled at present. Both of these features will be supported in version 4. << Differences in defaults >> Default modes for the .LIST/.NLIST and .ENABL/.DSABL directives can be changed by assembly parameters in MACN11. In the configuration maintained by ISI these defaults match MACRO-11's except for the following: .NLIST TTM ; [format listings for lpt output] .ENABL LC ; [don't fold lower case] Notes on MACN11 Version 3 Page 3 << Language extensions >> .ASCII & .ASCIZ MACN11 allows multiple expressions, rather than just one, within brackets. Expressions are delimited by commas. E.g., "" can be written as "". .ENABL & .DSABL These verbs recognize two nonstandard operands: NSF (Nonstandard features): Enabled by default. Enabling NSF allows use of MACN11's extended features. Disabling limits the acceptable source language to being strictly compatible with MACRO-11. ISD (Internal Symbol Definitions): Disabled by default Enabling ISD includes definitions of internal symbols, as well as global symbols, in the object module output. These definitions allow generation of a symbol table for debuggers such as DDT-11. HOV (Hexadecimal override): Disabled by default. If the current radix is 16 and HOV is enabled, then terms of expressions which begin with A-F are assumed to be hex numbers, rather than symbols. E.g., .ENABL HOV ; Enabling hex override causes MOV A,R0 ; this instruction to load 10. into ; R0, rather than the address of a ; word labelled A. .ENDM Interior macro definitions within a nest can be terminated by a .ENDM whose operand is the name of an exterior definition. Hexadecimal numbers Hex numbers, using the digits 0-9 and A-F, may be used via extensions of the existing radix control functions. .RADIX accepts 16 as a valid operand to set the current default radix, and temporary radix control includes "H" in addition to the standard "D", "O", and "B". When using hexadecimal as the default radix it is normally necessary to prefix numbers beginning with A-F by a 0; Notes on MACN11 Version 3 Page 4 otherwise they would be parsed as symbols. Use of .ENABL HOV eliminates this need at the cost of making symbols beginning with A-F inaccessible. Logical shift operator ("_") An additional binary operator is recognized in expression evaluation. "a_b" is evaluated as "the value of a shifted left b bits". If b is negative, the term is shifted right. Both a and b may be any valid term, including a bracketed expression. A common use for this operator is in defining symbolic values for bit masks. For example, "INTENA = 1_6" defines an interrupt enable mask as a 1 in bit 6. .PDP10 The ".PDP10" directive is recognized, but is ignored. This is for the sake of assembling Bliss-11 compiler output. Predefined symbols Symbols can be predefined by assembling their symbol table entries into MACN11. At present register names (R0-R7, SP, and PC) and ".MACN." are defined in this way. .MACN. is equated to the assembler's version number. Radix 50 terms in expressions: ^R "^R" is recognized as a unary operator in expressions, indicating that the next three characters are to be converted to radix 50 format for use as a 16-bit value. Any character without a radix 50 equivalent is treated as a delimiter, and is taken as equivalent to trailing blanks in evaluating the term. .SBHED A new directive, .SBHED, specifies a subheading; it functions as a conditional .PAGE followed by a .SBTTL. It skips to a new page unless the most recent listing output was a page skip, then outputs a standard page heading. .SBHED's operand field is included in the table of contents and in all page subheadings until another .SBHED or a .SBTTL is issued. The .SBHED directive itself is the first line listed below the new page heading. Notes on MACN11 Version 3 Page 5 ---------------- Operating Procedures ----------------- Operating procedures for MACN11 version 3 are nearly identical to MACRO-11's. The only differences are the following: "=" and "_" are accepted as synonyms for "<". The /PA switch is accepted but is ignored. An additional switch, /FO, is available to specify the PDP-10 file format for object output. Cross references are pretty disgusting. Details of these differences are included in the description below. MACN11 assembles one or more source files, normally producing two files: a relocatable object module and an assembly listing. Command string syntax is similar to MACRO-11's. Object files normally are generated in packed format, with each PDP-11 word right-adjusted in a PDP-10 halfword. This format is standard for other utilities which may deal with these files (LNKX11, LINK11, FILEX, etc.). Command Input String When MACN11 is ready for a command it lists its name and version number on the user's terminal, then outputs a "*" on a new line. In return it expects the following sort of string: object,listing Generate CCL support CMUSW 0 1 => Handle CMU PPNs in file names STANSW 0 1 => Handle Stanford PPNs PAGSIZ D54 Number of lines per page on listing output ENDEF LCFLG+PNCFLG+REGFLG Default .ENABL modes; bit names are "xxxFLG", where "xxx" is an operand of .ENABL/.DSABL. LDEF 777777-LLD-LME-LMEB-LTTM Default .LIST modes; bit names are "Lxxx", where "xxx" is an operand of .LIST/.NLIST. Additional symbols can be predefined by assembling their definitions into the prototype symbol table which begins at location PERMST, near the end of the assembly. This table is kept in ascending order by the .RAD50 (mod 40) value of the symbol, which is equivalent to alphabetic order except for "." and "$". Entry format is . . . XWD ; type-flags,value GENM40 N,A,M,E ; 1-6 characters Type flags may be . . . DEFSYM -- Symbol is defined REGSYM -- Symbol identifies a register GLBSYM -- Symbol is global (external if DEFSYM not set) Notes on MACN11 Version 3 Page 8 --------- Internal Symbol Definitions ---------- When ISD is enabled, internal symbol definition entries When .ENABL ISD is in effect, internal symbol definition entries are included in the generated object module's global symbol dictionary. These are type 2 GSD entries, which are identified in appendix B (B.1.3) of the DOS/Batch Linker manual. Their format is: --------------------------------- ! Symbol ! ! Name ! --------------------------------- ! 2 ! Flags ! --------------------------------- ! Value ! --------------------------------- The symbol name is two words in .RAD50 format. The flag byte currently has only one bit defined: Bit 0 is set if the symbol is a register name. All undefined bits are set to 0. The value is identical to that field in global symbol name (type 4) entries: It is the symbol's offset from the start of the csect identified by the most recent type 1 (csect name) entry. ISD values are absolute if they follow the absolute csect's type 1 entry.î