diff --git a/doc/info/midas.archiv b/doc/info/midas.archiv new file mode 100644 index 00000000..bb299371 --- /dev/null +++ b/doc/info/midas.archiv @@ -0,0 +1,735 @@ +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 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 , returns the absolute part of . +.RELP , 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 ,, returns the result of LDBing out of the + field of . .DPB ,,, returns the result + of altering by DPB'ing into the field . +In the SAIL version, CTL-META-LF now means EOF on the TTY. + + +MIDAS 255: +RMS 5/16/76 .NTHWD , +returns just the '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 , returns word of an + arbitrarily long sixbit string (origin 0 is used). If 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+ + 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 " WHERE =")", ">" OR "]" MEANS THERE + IS AN EXTRA CLOSE, + " SEEN WHEN EXPECTED" + MEANS THAT THERE IS A MISMATCH (EG "<1)"). + "NO" 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 RETURNS THE NUMBER OF LEADING ZEROS IN . + ".LZ 1" IS 35., AND ".LZ 1,+1" = "1+.LZ 1". +.TZ SIMILAR, FOR NUMBER OF TRAILING ZEROS. +.BP ASSUMING 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 ASSUMING THAT THE LH OF (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 , READS USING 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 IF 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>,,, + TERMIN + +<#1> IS THE NUMBER OF CHAS AT THE START OF 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:; 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 GENERATES A CROSS REFERENCE TO . 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 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: ; 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.