mirror of
https://github.com/PDP-10/its.git
synced 2026-01-15 16:07:01 +00:00
358 lines
13 KiB
Plaintext
358 lines
13 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
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., "<cr><lf>" can be written as "<cr,lf>".
|
||
|
||
|
||
.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<source1,source2,...,sourcen
|
||
|
||
|
||
"<" separates output file specifications from input specs. "="
|
||
and "_" are equally acceptable.
|
||
|
||
Each field in the command string specifies a file name and
|
||
may include optional switches. File names must conform to
|
||
DEC conventions (6-byte file name, optional 3-byte
|
||
extension). If the extension is omitted on any file name
|
||
the assembler chooses a suitable default.
|
||
|
||
A PPN (project-programmer number) may be supplied where
|
||
MACRO-11 would accept a UIC (user identification code).
|
||
Under Tenex this is treated as a directory number. MACN11's
|
||
source contains assembly parameters to allow it to accept
|
||
|
||
Notes on MACN11 Version 3 Page 6
|
||
|
||
|
||
|
||
PPNs in the formats used by CMU and Stanford.
|
||
|
||
|
||
Object is normally a relocatable object module file, ready for
|
||
input to LNKX11 or LINK-11. Its default extension is
|
||
".OBJ". Absolute binary output, with default extension
|
||
".BIN", can be generated by using ".ENABL ABS" in the source
|
||
program, or by including a "/EN:ABS" switch in the command
|
||
string.
|
||
|
||
Object file format may be specified with the "/FO" switch.
|
||
"/FO:P" generates packed output (1 PDP-11 word per PDP-10
|
||
halfword), and is the default. "/FO:I" forces image-mode
|
||
output, with one 8-bit byte per PDP-10 word.
|
||
|
||
|
||
Listing is an ASCII file with a default extension of ".LST".
|
||
Cross references may be obtained by using a "/CRF" switch
|
||
with the listing file; this generates a file with extension
|
||
".CRF", which must be run through CREF. The resulting
|
||
listing is terrible. It looks a little better if "/NL:SEQ"
|
||
is also specified, but that doesn't cure the readability
|
||
problems. In addition, not all references to symbols are
|
||
recorded in the cross reference. All of these woes will be
|
||
fixed by moving cross reference processing into MACN11; this
|
||
will be done no later than version 5 of the assembler.
|
||
|
||
|
||
Source files are in ASCII, with the following default extensions
|
||
recognized by the assembler:
|
||
|
||
".M11", ".P11", ".MAC", blank
|
||
|
||
|
||
Either the object file or the listing file, but not both,
|
||
may be omitted. Any number of source files (except 0) may be
|
||
used.
|
||
|
||
Notes on MACN11 Version 3 Page 7
|
||
|
||
|
||
|
||
------------- Assembler Generation Options --------------
|
||
|
||
|
||
|
||
The source for MACN11 contains a number of assembly
|
||
parameters to allow customizing it for individual installations.
|
||
Most, but not all, are clustered on a couple pages at the
|
||
beginning. The most useful of these parameters, and their values
|
||
in the ISI source, are . . .
|
||
|
||
|
||
Name Default Value Meaning
|
||
-------- ----------- ---------------------------------
|
||
|
||
CCLSW 0 1 => 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.<2E>
|
||
|