Trailing-Edge
-
PDP-10 Archives
-
mit_emacs_170_teco_1220
-
info/midas.archiv
There are no other files named midas.archiv in the archive.
MIDAS 410:
RMS 11/15/78
1) .FVERS and .IFVRS get you version numbers as numbers.
2) .IBP increments a byte pointer.
3) The number of symbols used printout is now correct (!)
4) Saying "RUN MIDAS" on Twenex no longer assembles MIDAS.
MIDAS 402:
KLH 7/27/78 .DECSAV
A couple more bugs fixed for 10X.
The .DECSAV pseudo now specifies DEC/TNX style SAV format for output
files, similar to .SBLK on ITS. Details in INFO;MIDAS > (pseudos).
Note that MIDAS 402 incorporates the feature (ITS only) that BIN
files will have a "debugging info block" holding the creator's XUNAME,
the date/time, and 4 wds of source filename. DDT will be able to
print this out on request. (Someone else put this in)
MIDAS 393:
MRC 6/10/78 SAIL & 10X MIDAS
Some bugs fixed for SAIL and 10X MIDAS. "JCL" on 10X now
wins.
MIDAS 390:
KLH 5/01/78 10X and 20X MIDAS
The TNXSW assembly switch now produces a "native" MIDAS which
uses JSYSes instead of the PA1050 compat package, and understands
full-form TNX file names. TS routines almost completely re-written
and cleaned up, but few user-visible changes.
A PMAPSW assembly switch (default on) provides for PMAP-style
input on 10X and 20X, faster than SIOT'ing.
.INSRT will now allow a comment on the line, provided a space or
tab precedes the semi-colon.
20X allows "JCL" to be provided on the same line as that invoking
MIDAS, i.e. [@]MIDAS <command line> <CR> will work.
MIDAS 355:
MRC 11/16/77 SYMTAB usage, CCL interface, Tenex MIDAS
The printout of the number of symbols now includes the
percentage of the symbol table used.
Some bugs in the CCL interface have been fixed.
TNXSW is being hacked for a JSYS MIDAS and so doesn't work.
Backarrows may be used for underscores now. This is so you
can type the same "takes" character on a TV at AI and at
SAIL.
MIDAS 354:
MRC 10/30/77 DEC, Tenex MIDAS
MIDAS now has the SMALSW assembly switch to generate a small
MIDAS. Normally SMALSW is off except for DEC sites other than
CMU or SAIL. A SMALSW MIDAS does not have the bit definitions
in DECBTS predefined, the FASL features, and has smaller symbol
areas.
There now exists a TNXSW to generate a MIDAS for Tenex and
Twenex. Currently it uses PA1050.
MIDAS 299:
RMS 9/12/76 Variable-size Literal Table, .OP.
Just like the symbol table, the literal table can have its
size declared by the program, in case the program needs a
larger literal table than is normally allocated. The second
argument to .SYMTAB specifies the number of words of literal
for the table to contain. The literal table must be big
enough to contain any one of the constants areas in the
program; the addresses of the beginnings and ends of
all the constants areas, printed at the end of an assembly,
can be used to compute the minimum size needed. The default
size in the ITS version of MIDAS is 3300 words, while in the
DEC version it is usually 1000 words. A second table, the
"constants global table", has a size 1/4 the size of the
literal table. If it fills up, the literal table size should
be increased. Example: .SYMTAB 4000.,3000. allocates
room for 4000. symbols, and 3000. words of literal (twice
the usual number).
.OP and .AOP will now insert the appropriate AC field into
the given instruction, unless it already has a nonzero
AC field; they will insert the appropriate address field
unless the address field or index field is already nonzero
(Recall that .OP insn,acdata,memdata executes insn, addressing
an AC containing acdata and a memory location containing
memdata, and returns the updated contents of the AC).
In the past, if the AC, index or address field were nonzero,
neither the AC nor the address was supplied. As a result
of this change, things like DATE=.OP .RDATE now work.
MIDAS 290:
RMS 9/1/76 Macro Arguments
Two new macro-argument syntaxes are available:
* gets "strung" syntax. A strung dummy is delimited with an
arbitrary character both before and after. The strung syntax
is what ASCII and SIXBIT have always used for their arguments.
# gets "evaluated" syntax, in which a field is read in and
evaluated, and the value is passed to the macro (by converting
it to a numeral). # passes the argument by value instead of
by name.
For details, see AI:MIDAS;MACROS >
MIDAS 283:
RMS 8/22/76 Commands, .ABSP, .RELP, .RL1, better error checking
Devices and SNAMEs are now sticky from output specs
to input specs. Thus, FOO;_BAR assembles FOO;BAR >
giving FOO;BAR BIN.
.ABSP <arg>, returns the absolute part of <arg>.
.RELP <arg>, returns its relocation.
.RL1 returns a relocatable 0 in a relocatable
assembly. In an absolute assembly, it returns 0.
Thus, IFN <.RELP .RL1>, is a test for a relocatable assembly.
For all X, .ABSP X,+.RL1*.RELP X, equals X.
An error message will now result if either argument to _
relocatable or external. If * produces a relocation factor
other than 1, or if at least one of its args is external,
an error message results except in STINK format assemblies.
A relocatable quantity in a \'d macro argument is an error.
.LDB <bp>,<word>, returns the result of LDBing out of the <bp>
field of <word>. .DPB <byte>,<bp>,<word>, returns the result
of altering <word> by DPB'ing <byte> into the field <bp>.
In the SAIL version, CTL-META-LF now means EOF on the TTY.
MIDAS 255:
RMS 5/16/76 .NTHWD <n>,<text string>
returns just the <N>'th word of the text string.
.1STWD is a special case of .NTHWD - namely, .NTHWD 1,.
MIDAS 254:
MRC 5/16/76 Lower case, COMPIL
The DEC version now has a COMPIL interface.
Error messages now use both cases.
MIDAS 252:
RMS 4/11/76 .SYMCNT says how big a symtab you need.
.SYMCNT returns the number of symtab entries that are in use.
The R switch will print out the value of .SYMCNT, as well as
the run time, for use in determining what .SYMTAB arg to use.
See AI:MIDAS;PSEUDO > for details.
MIDAS 245:
RMS 4/2/76 DEFINITIONS FILES
Definition files on SYS: now have numeric 2nd names. On a DEC
system those files would have "MID" for their 2nd names. That
way, specifying just the first name in a .INSRT will work on
all operating systems. The files that exist are:
FASDFS > defining symbols for use when assembling a FASL file.
ITSDFS > defining ITS system calls (not necessary if assembling
ITS programs on ITS, since they are predefined).
ITSBTS > defining supplemental symbols for use with ITS.
Again, not normally necessary to .INSRT.
DECDFS > defining DEC system calls. Not necessary to .INSRT
when assembling a DEC program on teh DEC system.
DECBTS > defining supplemental symbols for use with the
DEC system (such as are found in DEC's UUOSYM file
for MACRO-10). These symbols are not predefined
even when running MIDAS on a DEC system.
TNXDFS > defining TENEX system calls.
Note that ITSDFS, DECDFS, and TNXDFS do not directly define the symbols;
they define macros to loop over the symbols, for greater versatility.
However, the symbols can then be defined by calling the macro .ITSDF
or .DECDF or .TNXDF, which is defined by the file.
MIDAS 234:
RMS 3/23/76 .OSMIDAS, .SITE, .DECREL, DEC VERSION.
1) .OSMIDAS contains the sixbit name of the operating system
that MIDAS is running under. Right now the possibilities are
"ITS", "SAIL", "CMU" or "DEC".
This is intended for use by programs that have versions to run
on different operating systems, so that they can by default
assemble to run on the one they are being assembled on.
However, that should be only the default. do
IFNDEF RUNOS,RUNOS==.OSMIDAS
and from then on do IFE RUNOS-SIXBIT/ITS/, etc.
2) .SITE is a pseudo that can be used to determine which machine
midas is running on. .SITE <n>, returns word <n> of an
arbitrarily long sixbit string (origin 0 is used). If <n> is
out of range, zero is returned.
The format of the string accessed by .SITE is operating system
dependent.
On I.T.S., .SITE 0, returns the standard I.T.S. machine name
("AI", "ML", "DM" OR "MC").
3) Running on I.T.S., the default FN2 for .DECREL assemblies
is now "REL", not "DECREL". That is more convenient with
today's simulation software.
4) The DEC version of MIDAS now ignores line numbers and
also undertands more DEC-like filename formats.
MIDAS 217:
RMS 3/17/76 .MLLIT=1, =:, .SCALAR, .VECTOR, ', ", KEYWORD MACRO ARGS
1) THE WHO-LINE WILL NOW SAY WHERE MIDAS IS IN THE ASSEMBLY.
2) MULTI-LINE MODE IS NOW THE DEFAULT (.MLLIT IS INITIALLY POSITIVE).
3) ALL ERROR MESSAGES ARE NOW ENGLISH TEXT, NOT 3-CHARACTER CODES.
MANY ABSURD CONSTRUCTIONS THAT USED TO SCREW UP NOW GENERATE ERRORS
(FOR EXAMPLE, "X=.BYTE 4" AND "BLOCK Z=69").
A FORMFEED IN A LITERAL IS NOW AN ERROR (YOU PROBABLY FORGOT A "]").
SO IS A MACRO'S BEING ENDED BY "TERMINAL" OR "TERMINATOR" OR ANYTHING
BUT PLAIN "TERMIN".
4) MACROS NOW CAN HAVE KEYWORD PARAMETERS (IBM STYLE).
SAY DEFINE FOO +A,B,C+ AND THEN CALL WITH FOO A=4,C=6
SEE MIDAS;MACROS > AI: FOR DETAILS.
5) IF A LABEL IS MULTIPLY DEFINED, ALL DEFINITIONS OF IT BECOME ERRORS
SO IT IS EASY TO FIND THEM ALL.
"=:" IS LIKE "=" BUT MAKES THE SYMBOL "UN-REDEFINABLE" JUST AS ":"
DOES. THUS, "FOO=:." FULLY DUPLICATES THE EFFECT OF "FOO:".
6) .SCALAR AND .VECTOR:
.SCALAR FOO MAKES FOO BE A 1-WORD LONG VARIABLE. IT IS JUST LIKE
USING FOO' EXCEPT THAT IT PROVIDES A PLACE TO PUT A COMMENT
DESCRIBING WHAT FOO CONTAINS.
.VECTOR FOO(SIZE) MAKES FOO BE SIZE WORDS LONG.
7) ' AND " TEXT CONSTANTS HAVE A NEW ALTERNATE FORMAT, LIKE FAIL'S.
IF .QMTCH IS SET NONZERO, ' AND " CONSTANTS MUST BE TERMINATED BY A
' OR " (THE SAME ONE THAT STARTED THE STRING). THE PL/1 QUOTING
CONVENTION IS USED ("""" GENERATES THE ASCII FOR A DOUBLEQUOTE).
FOR MACROS WHERE IT IS NECESSARY TO BE ABLE TO GET THE ASCII VALUE
OF ANY CHARACTER WITHOUT KNOWING WHAT IT MIGHT BE, .ASCVL EXISTS.
SAY .ASCVL *X TO GET THE ASCII VALUE OF X (NOTE THERE'S ONLY ONE *;
IT SERVES TO ALLOW THERE TO BE IGNORED SPACES/TABS AFTER THE .ASCVL
WITHOUT CAUSING .ASCVL TO SCREW UP IF X HAPPENS TO BE A SPACE OR TAB.
THE * DOES NOT NEED TO BE REPEATED AS A TRAILING DELIMITER BECAUSE
ONLY ONE CHARACTER IS USED AS THE ARGUMENT).
8) MISCELLANY
.TYO N PRINTS THE CHAR WITH NUMERIC VALUE N (.TYO 61, PRINTS A "1").
.TYO6 WRD PRINTS WRD AS SIXBIT (TRY .TYO6 .FNAM1,.TYO 40,.TYO6
.FNAM2)
IF .HKALL IS NONZERO, ":" IS TREATED AS "::".
SUBTTL HAS BEEN DEFINED TO IGNORE A LINE,
AND .AUXIL TO DO NOTHING, FOR @'S SAKE.
.C" MAY BE USED TO SPECIFY THE USE OF THE CURRENT BLOCK ONLY IN
EVALLING OR DEFINING A SYMBOL. EG, IFNDEF .C"FOO TESTS WHETHER FOO
IS DEFINED IN THE CURRENT BLOCK (AS OPPOSED TO ANY BLOCK CONTAINING
THE CURRENT ONE, WHICH IS WHAT PLAIN IFNDEF FOO WOULD TEST).
.DOWN FOO MAKES FOO AUTOMATICALLY VISIBLE IN 1PASS MODE EVEN IN
SUBBLOCKS OF THE BLOCK IT IS IN (NORMALLY, SYMBOLS DEFINED IN
OUTER BLOCKS ARE NOT VISIBLE IN 1PASS, SINCE IT ISN'T KNOWN
WHETHER THE SYMBOL WILL BE DEFINED LATER IN THE SUBBLOCK ITSELF).
COMMENTS ON THE SAME LINE AS AN IRP NOW WORK.
MIDAS 199:
RMS 4/10/75
1) Two new conditionals IFSQ "If all SQuoze" and
IFNSQ "If Not all SQuoze" now exist.
See MIDAS;COND > for details.
2) A formfeed within <->, [-] or (-) groupings
and not in a text string, macro arg etc.
generates an error message. Also, many things
which have long been errors inside literals
(such as LOC, BLOCK, .BEGIN, CONSTA, END, etc)
are now also illegal inside (-) and <-> groupings.
3) .BP is no longer syntactically the same as
.BM, .TZ, .LZ (the last three have been fixed).
.BP (make Byte Pointer) does not ignore a space
or comma that terminates its arg; it treats it as an
ordinary space or comma, so that
.BP FOO,BAR is equivalent to <.BP FOO>,BAR.
It turns out that .BP FOO,BAR is exactly the construction
that is most useful, since .BP returns the byte pointer
info in the left half of its value; .BP FOO,BAR
will be a pointer to the field FOO in the address BAR.
.BM (make Byte Mask), .LZ (number of Leading Zeros)
and .TZ (number of Trailing Zeros) now DO ignore any
space or comma terminating the argument. Thus,
.BM 350700,&MUMBLE is the same as <774000,,>&MUMBLE.
.BM 600,,,FOO puts .BM 600 in the l.h., giving 77,,FOO.
In addition, .BP (FOO),BAR now works - useful when FOO
is a left-half flag.
MIDAS 194:
RMS 1/30/75
"Braced conditionals" now exist. They are like bracketed
conditionals, but use braces instead of brackets.
They do about the same jobs as bracketed conditionals,
except that 1) they can safely be used to onditionalize
.STOP, .ISTOP and .GO, and 2) MIDAS can't tell the user
about unterminated successful bracketed conditionals.
For most things the two types are equally good.
MIDAS 185: 6/16/74
1) MIDAS can now assemble FASL files to be loaded
by LISP. See .INFO.; MIDAS FASL for details.
2) A bug fixed in floating numeric input (!).
3) An attempt will be made to give the page number and line number
on which the first unterminated successful conditional was
seen.
bugs or comments to rg
MIDAS 142 5/1/74 .1STWD, ERROR MESSAGES.
1) TO GET ONLY THE FIRST WORD OF AN ASSEMBLED TEXT STRING,
PRECEDE THE TEXT PSEUDO-OP WITH ".1STWD". EG.
.1STWD ASCII/12345ABCDE/ IS THE SAME AS ASCII/12345/.
2) THE ARGUMENTS TO .BP, .BM, .TZ AND .LZ,
AND THE SECOND ARGUMENT TO .RADIX, MAY NOW BE UNDEFINED
ON PASS 1 IF THE PSEUDO APPEARS IN A PLACE WHERE AN UNDEFINED
SYMBOL WOULD BE ALLOWED ON PASS 1.
3) IF THERE ARE UNTERMINATED SUCCESSFUL BRACKETED CONDITIONALS,
A MESSAGE TO THAT EFFECT WILL BE PRINTED. ALSO, IF AN UNSUCCESSFUL
CONDITIONAL IS UNTERMINATED, THE TYPE OF CONDITIONAL AND WHERE
IT STARTED WILL BE PRINTED AT THE END OF THE ASSEMBLY.
MIDAS 135 4/1/74
0) SEE .INFO.;MACRO ORDER FOR COMPLETE DOCUMENTATION OF
MACRO DEFINITIONS AND CALLS.
1) INCOMPATABILITIES
A) IN COMMAND STRINGS, IF ONLY 1 FILENAME IS GIVEN FOR AN
OUTPUT FILE, IT IS THE FN1, AND THE FN2 IS DEFAULTED.
(THIS IS THE WAY INPUT FILES ARE TREATED). IT USED TO BE THAT
A SINGLE NAME WOULD BE THE FN2, WITH THE FN1 DEFAULTED.
B) DUE TO MULTI-WORD GROUPINGS, A MULTI-WORD ASCII OR SIXBIT
INSIDE ANGLEBRACKETS WILL RETURN ONLY THE LAST WORD, INSTEAD
OF ONLY THE FIRST WORD. TO GET ONLY THE FIRST WORD, USE IRPNC.
THIS APPLIES ONLY IN MULTI-LINE MODE (.MLLIT POSITIVE).
WHEN .MLLIT IS 0 (OLD MODE), THE FIRST WORD IS STILL RETURNED.
IN ERROR MODE (.MLLIT NEGATIVE), THE FIRST WORD IS RETURNED,
BUT AN ERROR MESSAGE "MULTI-LINE TEXT PSEUDO IN BRACKETS" IS
TYPED. THIS MAKES THE PROGRAM ASSEMBLE PROPERLY AND IDENTIFIES
THE PLACES THAT LOSE. ERROR MODE IS, OF COURSE, THE DEFAULT.
C) WHEN A SEMICOLON ENDS A MACRO CALL, ANY SPACES OR TABS
BEFORE IT ARE IGNORED. THIS IS TO PREVENT SCREWAGE.
2) PARENS AND ANGLE BRACKETS.
A) (-) AND <-> GROUPINGS MAY NOW BE MULTI-LINE, JUST LIKE
[-] GROUPINGS (ONLY WHEN .MLLIT IS POSITIVE, OF COURSE).
ONLY THE LAST LINE OR WORD IN THE GROUPINGS MATTERS.
NOTE THAT IF THE LAST LINE IS BLANK, THE VALUE
OF THE (-) OR <-> WILL BE ZERO.
B) ONE WAY TO USE THIS FEATURE IS AROUND THE BODY OF
A MACRO THAT DOES PARAMETER ASSIGNMENTS IN ORDER TO COMPUTE
A NUMERIC VALUE TO RETURN. FOR EXAMPLE,
DEFINE FOOB(X)
< BAR$$==1+<X>
BAR$$*BAR$$>TERMIN
COMPUTES (LAMBDA (X) (TIMES (ADD1 X) (ADD1 X))). ALSO, .BYTE
MAY BE PUT IN A (-) OR <->, TAKING EFFECT ONLY WITHIN
THE GROUPING IT IS IN. THIS MAKES IT POSSIBLE TO CREATE A WORD
BYTE-WISE AND DO ARITHMETIC ON IT, ETC.
C) ERROR MESSAGES ASSOCIATED WITH GROUPINGS ARE IMPROVED:
"STRAY <X>" WHERE <X>=")", ">" OR "]" MEANS THERE
IS AN EXTRA CLOSE,
"<X> SEEN WHEN <Y> EXPECTED"
MEANS THAT THERE IS A MISMATCH (EG "<1)").
"NO<X>" PINPOINTS AN UNTERMINATED GROUPING
(THIS NORMALLY WON'T HAPPEN UNLESS .MLLIT IS NEGATIVE,
WHICH IS THE DEFAULT CASE).
D) SEVERAL PSEUDO-OPS SUCH AS CONSTA AND END, AS WELL AS
FATAL ERRORS AND "PDL" ERRORS DUE TO OVERLONG CONSTANTS
WILL TYPE OUT WHAT TYPES OF GROUPING ARE IN
PROGRESS, AND WHERE THEY STARTED. FOR EXAMPLE,
WITHIN GROUPINGS: ( AT 35-048, [ AT 35-048
FOO+8 ... 60-010 PDL"
3) WHEN A FATAL ERROR HAPPENS, THE BINARY, LISTING AND CREF FILES
WILL BE FILED OUT, BUT WITHOUT RENAMING (THEY WILL BE CLOSED AS
_MIDAS OUTPUT, _MIDAS LSTOUT AND _MIDAS CRFOUT).
THE ERROR OUTPUT FILE WILL BE CLOSED AND RENAMED.
THUS, AFTER ASSEMBLING, AN ERROR FILE WITH THE SPEC'D NAME
IS CERTAIN TO EXIST EVEN IF THERE WAS A FATAL ERROR.
FATAL ERROR MESSAGES NOW NOT ONLY INCLUDE A LIST OF GROUPINGS
THAT ARE UNTERMINATED, BUT ALSO MENTION ANY UNFINISHED TEXT PSEUDO
(EG ASCII, ASCIZ, .ASCII, ASCIC, SIXBIT) OR MACRO-DEFINING
PSEUDO (EG DEFINE, IRP, .TTYMAC), AND WHERE IT STARTED.
THE PSEUDO .FATAL CAUSES A FATAL ERROR. TO CAUSE THE OUTPUT FILE
TO BE CLOSED (BUFFERS WRITTEN OUT), TYPE ^H TO GET TTY INSERTED
AND THEN DO .FATAL.
4) NEW MACRO FEATURES:
A) FOR CONVENIENCE, TABS AND SPACES PRECEDING A SEMICOLON THAT
ENDS A MACRO CALL ARE NOW IGNORED.
B) IT IS POSSIBLE TO GIVE A MACRO ARGUMENT A DEFAULT VALUE TO BE
USED WHEN THE ARG IS NULL. ALSO, BALANCED DUMMIES ARE AVAILABLE FOR
MACROS THAT WANT TO USE THE ARGUMENT SYNTAX THAT PSEUDOS LIKE XWD USE.
C) .TTYMAC HAS BEEN EXTENDED - IT MAY READ SEVERAL ARGUMENTS FROM THE
TTY, AND USE ANY OF THE FEATURES THAT MACROS MAY USE (SUCH AS DEFAULT
VALUES GENSYMMING, WHOLE-LINE AND BALANCED ARGUMENTS). .TTYMAC
WILL KEEP READING LINES FROM THE TTY UNTIL IT HAS READ
AS MUCH AS A SIMILAR MACRO CALL WOULD GOBBLE FROM THE FILE.
5) TWO-SEGMENT DEC FORMAT OUTPUT.
THE MIDAS PSEUDO ".DECTWO" IS LIKE THE MACRO-10 PSEUDO "TWOSEG".
THE WAY TO USE IT IS:
.DECTWO HIBOT ;OR JUST ".DECTWO" IF HIBOT IS 400000 .
RL0==. ;SAVE A RELOCATABLE ZERO.
;ASSEMBLE LOW SEGMENT CODE
.=RL0+HIBOT
;ASSEMBLE HIGH SEGMENT CODE.
END
IT IS O.K. TO INTERSPERSE HIGH AND LOW SEGMENT CODE BY
SAVING AND RESTORING THE TWO LOCATION COUNTERS. ANYTHING ASSEMBLED
AT A RELOCATABLE ADDRESS BELOW HIBOT WILL GO IN THE LOW SEGMENT;
ANYTHING ASSEMBLED AT A RELOCATABLE ADDRESS ABOVE HIBOT WILL GO
IN THE HIGH SEGMENT.
6) ", ' AND ^ CHARACTER CONSTANTS ARE GENERALIZED.
SIMPLY CONCATENATE THEM TO PRODUCE MORE THAT 1 CHARACTER
OF RIGHT-JUSTIFIED TEXT. (EG, "A^B = "A_7+^B).
ALSO, IF A CHARACTER OTHER THAN THE FIRST IS A SQUOZE CHARACTER,
THE ", ' OR ^ IN FRONT OF IT MAY BE OMITTED
'AB = 'A'B = 'A_6+'B. BUT 'A+1 = 1+'A WHILE 'A'+'1 = (SIXBIT/A+1/)
7) COMMAND STRING CHANGES, INTERRUPT CHARACTERS.
(SEE .INFO.;MIDAS ORDER)
A) IF ONLY ONE NAME IS SPEC'D FOR AN OUTPUT FILE, IT IS
THE FIRST FILENAME, NOT THE SECOND. THUS, INPUT AND OUTPUT FILE
NAMES ARE TREATED ALIKE.
B) WHENEVER TTY: IS .INSRTED, FOR ANY REASON, MIDAS SAYS
"TTY: .INSRTED, END INPUT WITH ^C" (OR "^Z" IF DEC VERSION).
C) THE (W) SWITCH CAUSES AN ERROR OUTPUT FILE TO BE WRITTEN,
AND SUPPRESSES TYPEOUT ON THE TTY BY INCREMENTING .TTYFLG.
D) ^W TYPED ON THE TTY ALSO INCREMENTS .TTYFLG. ^V TYPED ON THE TTY
DECREMENTS .TTYFLG UNLESS IT IS 0. WHEN .TTYFLG IS NONZERO,
TYPEOUT ON THE TTY IS SUPPRESSED.
E) SINCE THE DEC SYSTEM DOES NOT HAVE INTERRUPT CHARACTERS,
TYPING ^H, ^V OR ^W ON THE TTY WORKS ONLY UNDER ITS.
HOWEVER, "^C REENTER" UNDER THE DEC SYSTEM WILL CAUSE A ^H-BREAK.
8) NEW PSEUDOS:
COMMENT READS AND IGNORES A TEXT ARGUMENT.
THIS IS SO STANFORD'S TVEDIT DIRECTORIES
WILL BE IGNORED.
.LZ <N> RETURNS THE NUMBER OF LEADING ZEROS IN <N>.
".LZ 1" IS 35., AND ".LZ 1,+1" = "1+.LZ 1".
.TZ <N> SIMILAR, FOR NUMBER OF TRAILING ZEROS.
.BP <N> ASSUMING <N> IS A BIT MASK TO A BYTE IN A WORD,
RETURNS A WORD WHOSE LH IS A B.P. TO THAT BYTE.
".BP (77)" IS 220600,, .
".BP (77),FOO" = "220600,,FOO".
.BM <N> ASSUMING THAT THE LH OF <N> (OR THE RH, IF THE LH IS 0)
IS A B.P. TO A BYTE IN A WORD, AND RETURNS A WORD
CONTAINING 1'S ONLY IN THE BYTE POINTED TO.
".BM 220600" AND ".BM (220600)" BOTH ARE 77,, .
.RADIX <R>,<N> READS <N> USING <R> AS RADIX, AND RETURNS IT.
".RADIX 6,10,+100" IS 106 .
.ASKIP AFTER A .OP OR .AOP, .ASKIP
HAS THE VALUE -1 IFF THE EXECUTED INSN SKIPPED.
.OFNM1 HAS THE SIXBIT OF THE OUTPUT FILE FN1.
.OFNM2 SIMILAR, FOR THE FN2.
.CURPG HOLDS THE CURRENT INPUT PAGE # MINUS 1.
.CURLN HOLDS THE CURRENT INPUT LINE # MINUS 1.
.TYPE <SYM> IF <SYM> IS REALLY A NUMBER, .TYPE RETURNS -1.
RMS 06/17/73 23:57:15 ! BEFORE A TERMIN
THAT ENDS A MACRO-DEFINITION, ETC.,
OR BEFORE A .QUOTE, WILL BE FLUSHED,
JUST AS AN ! BEFORE A DUMMY ARGUMENT.
MIDAS 123
RMS 6/7/73 .BIND, .KILL, .HKILL, .INIT BLOCK.
.BIND IS FOLLOWED BY A LIST OF SYMBOLS, AND CAUSES EACH TO HAVE
AN UNDEFINED ENTRY IN THE CURRENT BLOCK (OR THE BLOCK SPEC'D
WITH A " BEFORE THE SYMBOL) IF IT ISN'T ALREADY
DEFINED IN THAT BLOCK. THIS IS USEFUL TO SHADOW A DEFINITION THAT
OTHERWISE WOULD BE AN ERROR TO SHADOW, ETC.
.KILL IS SIMILAR BUT ALSO FULLY KILLS THE SYMBOLS
(THAT IS, THEIR DEFINITIONS WILL NOT BE OUTPUT FOR DDT)
.HKILL HALF KILLS THE SYMBOLS.
THEY RESEMBLE .XCREF, WHICH SUPPRESSES CREFFING OF THE SYMBOLS.
THERE IS NOW A SEPARATE BLOCK IN WHICH INITIAL SYMBOL DEFINITIONS
LIVE. IT IS THE SUPERIOR OF THE MAIN BLOCK (WHICH USED TO BE
OUTERMOST) AND ITS NAME IS ALWAYS .INIT . ALL PSEUDOS AND INSTRUCTIONS
ARE DEFINED IN IT. SYMBOLS DEFINED IN IT ARE NEVER OUTPUT TO DDT,
AND ARE THE ONLY ONES SAVED FROM ONE PROGRAM TO THE NEXT IN 1PASS
MULTIPLE PROGRAM ASSEMBLY.
SHADOWING A SYMBOL IN AN OUTER BLOCK BY DEFINING IT IN AN
INNER ONE HAS THE FOLLOWING QUIRKS:
IF THE DEFINITION IS WITH =,
IF THE EXISTING DEFINITION IS A PSEUDO-SYMBOL LIKE .MLLIT
IN THE .INIT BLOCK, ITS VALUE WILL BE CHANGED;
IT WILL NOT BE SHADOWED.
IF IT IS ANY OTHER PSEUDO IN THE .INIT BLOCK,
THERE WILL BE A QPA ERROR BEFORE SHADOWING.
IF THE DEFINITION IS BY :, NO INITIAL SYMBOL MAY BE SHADOWED.
A RES ERROR WILL RESULT AND SHADOWING WILL NOT BE DONE.
OTHER THINGS THAT DEFINE A SYMBOL MAY STILL SHADOW ANYTHING.
.BIND MAY BE USED TO FORCE SHADOWING.
MIDAS 121
RMS 4/20/73 IRPNC, .MRUNT, ERROR OUTPUT FILE, (E).
IRPNC WILL NO LONGER IGNORE THE SECOND
DUMMY IN A GROUP BUT WILL CAUSE THE REST OF THE STRING NOT YET
PROCESSED TO BE SUBSTITUTED FOR IT.
.MRUNT'S VALUE IS MIDAS'S RUNN TIME SINCE THE START OF THE ASSEMBLY,
IN MILLISECONDS.
MIDAS WILL NNOW PRODUCE A FILE CONTAINING ALL ERROR MESSAGES, ETC.
(IN FACT, EVERYTHING TYPED OUT BY MIDAS)
THE (E) SWITCH CAUSES THIS. THE ERROR FILE'S
FN2 DEFAULTS TO ERR AND THE NAMES MAY BE
SPECIFIED WITH THE THIRD OUTPUT FILESPEC - LISTING IS NOW FOURTH.
SEE .INFO.;MIDAS ORDER
MIDAS 119
RMS 04/08/73 22:19:38 NEW COMMANND READER, IRPNC, LISTING.
1) THERE IS A NEW COMMAND PROCESSOR, WHICH ALLOWS SPECIFICATION
OF THE CREF AND LISTING FILES' NAMES. MOST COMMANDS WILL WORK THE SAME,
THOUGH. SEE .INFO.;MIDAS ORDER
2) IRPNC EXISTS. DO:
IRPNC <#1>,<#2>,<#3>,<DUMMY1>,,<CHARS>
<BODY> TERMIN
<#1> IS THE NUMBER OF CHAS AT THE START OF <CHARS> TO BE IGNNORED..
<#2> IS THE SIZE OF EACH GROUP OF CHARS.
<#3> IF >= 0, IS THE MAXIMUM # TIMES THE IRPNC WILL CYCLE
(IT MAY STOP SOONER IF IT RUNS OUT OF CHARS)
IRPNC IS LIKE IRPC BUT TAKES <#2> CHARS AT A TIME INSTEAD OF 1.
(IF THERE ARE LESS THAN <#2> LEFT IT
WILL TAKE ALL THERE ARE)
3) PAGE NOS. IN THE SOURCE FILE, AND ERROR MESSAGES, NOW
APPEAR IN THE LISTING FILE.
4) IT IS AN ERROR TO DEFINE A SYMBOL
WHICH HAS A NUMERIC DEFINITION OR WHICH HAS BEEN USED
OTHER THAN IN A .XCREF TO BE A MACRO.
(IT WILL STILL BECOME A MACRO, BUT THERE WILL BE A TYPEOUT)
IF YOU REALLY WANT TO DO THAT, EXPUNGE THE SYMBOL FIRST.
MIDAS 113 3/27/73
1) .SUCCESS IS -1 IF THE LAST CONDITIONAL
SUCCEEDED; 0 IF IT FAILED.
AFTER A ] ENDING A SUCCESSFUL CONDITIONAL IT WILL BE SET TO -1.
.ELSE IS EQUIVALENT TO IFE .SUCCESS, ; .ALSO, TO IFN .SUCCESS, .
NOTE THAT .ELSE AND .ALSO SET .SUCCESS, SO A SERIES OF
.ELSE'S WILL ALTERNATELY SUCCEED AND FAIL.
THUS:
IFN 1OFFSW, SOS FOO
PUSHJ P,BAR
.ALSO AOS FOO
2) LMIDAS NO LONGER EXISTS. GIVE MIDAS THE (L) SWITCH TO
GET A LISTING AS DSK:<OUTPUT SNAME>;<OUTPUT FN1> LIST
(LL) WILL GET A LISTING ON BOTH PASSES (USEFUL FOR FATAL
ERRORS IN MACROS)
3) ^C TYPED ON THE TTY CAUSES EOF (IN CASE OF .INSRT TTY:, ETC)
^U RUBS OUT A WHOLE LINE.
4) .SEE <SYMBOL> GENERATES A CROSS REFERENCE TO <SYMBOL>. DOES NOTHING ELSE.
MIDAS 108 3/6/73
IN THE COMMAND STRING, THE R SWITCH CAUSES THE RUN TIME
TO BE TYPED OUT AFTER THE ASSEMBLY.
THE T SWITCH CAUSES A .INSRT TTY: TO BE DONE BY THE TITLE
PSEUDO-OP ON PASS 1, AFTER TITLE'S USUAL FUNCTIONS.
TWO T SWITCHES MAKE THAT HAPPEN ON PASS 2 AS WELL AS PASS 1.
IF YOU DO A .SYMTAB, IT OUGHT TO BE BEFORE THE TITLE
FOR THIS FEATURE TO BE USEFUL.
MIDAS 103 2/11/73
SYMBOL TABLES IN ABSOLUTE ASSEMBLIES ARE NOW OUTPUT IN SORTED
FORMAT SO THAT THEY CAN BE LOADED BY DDT WITHOUT A SORT.
MIDAS CAN NOW GENERATE DEC'S LINKING LOADER'S FORMAT.
THE PSEUDO OP .DECREL SELECTS THAT FORMAT.
TO GENERATE DEC-STYLE RIGHT-JUSTIFIED SQUOZE, USE .RSQZ
WHICH LOOKS JUST LIKE THE SQUOZE PSEUDO-OP, WHICH WILL
GENERATE THE SAME STUFF IT NORMALLY DOES.
BLOCK STRUCTURE IS NOW SUPPORTED IN RELOCATABLE ASSEMBLIES.
MIDAS 98 8/13/72
DYNAMICALLY ALLOCATED SYMBOL TABLE:
INITIALLY, MIDAS ALLOCATES ITS SYMBOL TABLE WITH A DEFAULT SIZE
(EXCEPT THAT IF ITS JNAME IS 'MM' OR 'MMIDAS' IT
ALLOCATES A LARGER SYMBOL TABLE TO BEGIN WITH)
THE PSEUDO-OP .SYMTAB TAKES ONE ARG, AND MAKES SURE
THE SYMBOL TABLE CAN HOLD AT LEAST ARG SYMBOLS.
(DEFAULT SIZE IS 2200. OR SO, MMIDAS SIZE 8800. OR SO;
EACH PAGE OF SYMBOLS AFTER A TECO LISTING HOLDS 360. SYMBOLS;
THERE ARE 600. OR SO INITIAL SYMBOLS;
THERE SHOULD BE TWICE AS MUCH SPACE IN THE SYMTAB AS SYMBOLS.)
IF THE SYMBOL TABLE WAS ALREADY BIG ENOUGH, NOTHING IS DONE;
OTHERWISE THE SYMBOL TABLE IS COMPLETELY RE-INITIALIZED
(I.E. ALL SYMBOL DEFINITIONS ARE FLUSHED.)
SINCE THE INITIALIZATION CODE LIVES IN THE MACRO TABLE,
THIS PSEUDO-OP CANNOT BE EXECUTED AFTER ANY DEFINE,
REPEAT, IRP!X OR .TTYMAC. (AN INI ERROR RESULTS)
AN UNDEFINED SYMBOL IN THE ARG CAUSES A FATAL USS ERROR.
MIDAS 96 8/10/72
BLOCK STRUCTURE:
(WORKS ONLY IN ABSOLUTE ASSEMBLIES FOR THE TIME BEING)
TO BEGIN A BLOCK, USE THE .BEGIN PSEUDO-OP.
IT CREATES A BLOCK WITH A NAME WHICH MAY BE SPECIFIED WITH
AN ARGUMENT TO .BEGIN, BUT WHICH WILL OTHERWISE BE THE NAME
OF THE MOST RECENTLY DEFINED LABEL. THE NEW BLOCK IS A
SUBBLOCK OF THE BLOCK IN WHICH THE .BEGIN APPEARS.
ATTEMPTING TO REENTER A .END'ED BLOCK CAUSES AN MDB ERROR.
BLOCK NAMES DO NOT CONFLICT WITH SYMBOL NAMES.
THE NAME OF THE OUTERMOST BLOCK,
IN WHICH THE ASSEMBLY STARTS, IS THE TITLE OF THE PROGRAM.
TO END A BLOCK, USE .END, WHICH WILL END THE CURRENT BLOCK
AND POP INTO ITS FATHER. AN ATTEMPT TO END THE OUTERMOST
BLOCK DOES NOTHING AN CAUSES AN UMB ERROR;
AN UMB ERROR ALSO RESULTS FROM AN END STATEMENT IN AN INNER BLOCK.
.END MAY BE GIVEN AN ARGUMENT, IN WHICH CASE IF THE NAME OF THE BLOCK
BEING ENDED DIFFERS FROM THE ARGUMENT AN UMB ERROR WILL BE GIVEN,
WITH THE NAME OF THE BLOCK.
ALL SYMBOLS DEFINED NORMALLY WITHIN A BLOCK ARE LOCAL TO THAT BLOCK,
AND SHADOW ANY DEFINITIONS IN CONTAINING BLOCKS
(NOTE THAT MAKING A SYMBOL GLOBAL OR A VARIABLE "DEFINES" IT)
AN ORDINARY SYMBOL REFERENCE FINDS THE DEFINITION
IN THE INNERMOST BLOCK CONTAINING THE CURRENT BLOCK.
IT IS, HOWEVER, POSSIBLE TO REFER TO OR DEFINE A SYMBOL IN ANY
SPECIFIC BLOCK BY PREFIXING ITS NAME WITH THE NAME OF THE BLOCK
AND A DOUBLE-QUOTE. THE BLOCK TO BE USED WILL BE THE BLOCK
OF THAT NAME THAT IS A SUBBLOCK OF THE CURRENT BLOCK AND HAS
BEEN .BEGUN ALREADY; IF THERE IS NONE, ANY BLOCK OF THAT NAME
THAT HAS BEEN .BEGUN; IF THERE IS NONE, ANY BLOCK OF THAT NAME
IN WHICH A SYMBOL HAS ALREADY BEEN EXPLICITLY REFERED TO;
OTHERWISE IT WILL BE A NEW (UNDEFINED) SUBBLOCK OF THE CURRENT BLOCK.
HOWEVER, TO REFER TO A SUBBLOCK OF A PARTICULAR BLOCK,
PREFIX IT WITH ITS FATHER'S NAME AND A DOUBLE-QUOTE, ETC.
NOTE THAT IT IS POSSIBLE TO REFER TO A SYMBOL
IN A BLOCK THAT HAS NOT YET BEEN "DEFINED" (IE .BEGUN)
THE FOLLOWING NAMES ARE SPECIAL WHEN USED TO SPECIFY A BLOCK:
.U SPECIFIES THE FATHER OF THE CURRENT OR PREVIOUSLY SPEC'D BLOCK.
.M SPECIFIES THE OUTERMOST BLOCK.
A FEATURE THAT HAS EXISTED BUT WAS LITTLE KNOWN:
" AND ' MAY GENERATE MORE THAN ONE CHARCTER.
THEY GOBBLE THE FIRST CHARACTER, AND ANY FOLLOWING SQUOZE CHARACTERS.
THUS, 'DSK IS THE SAME AS (SIXBIT/DSK/) .
.XCREFFING IS NO LONGER UNDONE BY REDEFINITIONS. IN FACT,
A SYMBOL CAN BE .XCREFFED BEFORE BEING DEFINED, AND THEN WILL
NEVER APPEAR IN A CREF.
MIDAS WILL NOW TYPE THE NAME OF THE CURRENT INPUT FILE BEFORE
AN ERROR MESSAGE IF IT HAS CHANGED SINCE THE PREVIOUS ERROR MESSAGE.
NEW PSEUDO-SYMBOLS:
.GSCNT THE GENERATED-SYMBOL COUNTER.
.STGSW IF NONZERO, ASSEMBLY OF A STORAGE WORD
IS AN ERROR (SET BY .YSTGW, .NSTGW)
MIDAS 94 7/10/72
MULTI-LINE LITERALS:
MIDAS NOW HAS THREE MODES - OLD MODE, NEW MODE AND ERROR MODE.
THE MODE IS DETERMINED BY THE VALUE OF THE PSEUDO SYMBOL .MLLIT .
IN OLD MODE, (.MLLIT=0) LITERALS ARE HANDLED AS THEY USED TO BE.
IN ERROR MODE, (.MLLIT < 0) (THE DEFAULT MODE, SET BEFORE EACH PASS)
THE CODE PRODUCED WILL BE THE SAME AS IN OLD MODE,
BUT AN ERROR MESSAGE (IPC, NO[, NO], OR ILC)
WILL BE PRODUCED IF ANYTHING IS ENCOUNTERED WHICH WILL
ASSEMBLE DIFFERENTLY IN NEW MODE.
IN NEW MODE, (.MLLIT > 0) CONSTANTS MAY CONTAIN ANY NUMBER OF LINES,
AND ANY NUMBER OF WORDS. THE BYTE MODE STATUS IS SAVED AND RESTORED
OVER CONSTANTS, AND INITIALIZED TO WORD MODE AT THE BEGINNING
OF A CONSTANT; HOWEVER A .BYTE PSEUDO-OP IN THE CONSTANT
IS LEGAL. A .WALGN WILL BE DONE AT THE END OF THE CONSTANT
IF BYTE MODE IS IN EFFECT.
SINCE CR AND LF WILL NO LONGER TERMINATE CONSTANTS IN NEW MODE,
SQUARE BRACKETS MUST BE BALANCED. IF AN END OR CONSTA PSEUDO
IS ENCOUNTERED IN A LITERAL IT IS ASSUMED THAT A ] WAS MISSING
AND A NO] ERROR IS GENERATED. A STRAY ] CAUSES A NO[ ERROR.
LOC, BLOCK, OFFSET OR .= INSIDE A LITERAL CAUSES AN IPC ERROR
GIVING THE NAME OF THE PSEUDO BUT DOESN'T TERMINATE THE CONSTANT.
. INSIDE A CONSTANT STILL REFERS TO THE CURRENT LOCATION OUTSIDE
THE CONSTANT.
PSEUDO-OP .ERR CAUSES AN ERROR, WITH THE REST OF THE LINE IT
APPEARS ON USED AS THE ERROR MESSAGE.
:MIDAS <COMMAND> <CR> FROM DDT NOW WORKS.
PSEUDO-SYMBOLS SUCH AS .FNAM1, .FNAM2, .BYTC, .CRFIL, .RPCNT,
.IRPCNT, .AVAL1, .AVAL2, .IFNM1, .IFNM2
MAY NOW BE ASSIGNED WITH "=".
MIDAS CAN NOW PRODUCE OUTPUT SUITABLE FOR CREF.
THIS CAN BE REQUESTED WITH THE (C) SWITCH IN THE COMMAND STRING.
A FILE NAMED DSK: <BINARY'S SNAME>; <BINARY'S FN1> CREF
IS PRODUCED. SEE .INFO.;CREF ORDER FOR THE FORMAT OF THAT FILE
AND THE WAY TO TURN IT INTO A CROSS-REFERENCE.
RELEVANT PSEUDO-OPS ARE:
.XCREF SYM1, SYM2, SYM3 PREVENTS THOSE SYMS FROM BEING CREFFED.
.CRFON TURNS ON GENERATION OF CREF OUTPUT.
.CRFOFF TURNS IT OFF.
.CRFIL PSEUDO-SYMBOL SAVED OVER .INSRT'S.
WHILE IT IS SET, ANY NUMBER OF OCCURRENCES OF A
SYMBOL WILL CREF AS ONE OCCURRENCE.
GLOBALS AND RELOCATABLES MAY NOW BE USED IN .BYTE MODE
PROVIDED THEY GO INTO PARTS OF A WORD IN WHICH THEY ARE NORMALLY
LEGAL. (JSF WILL SAY WHICH PARTS THOSE ARE)
DISOWNED MIDASES WILL LOG OUT RATHER THAN TRY TO .BREAK 16, .
MIDAS WILL DELETE _MIDAS OUTPUT BEFORE STARTING AN ASSEMBLY.