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.