History ~~~~~~~ First, thank you for your bug reports, comments and suggestions. Thanks to the following people (in no particular order): (Sorry, if I have forgotten someone and for misspelled names). Gunther Nikl, Veli Nuutimäki, Eric Augustine, Laura Mahony, Marco Nelissen, Jarkko Vatjus-Anttila, Yambo. ...And all the rest who have send bug reports and comments. MM's thanks: to Sensei for SNMAOptsMUI and to Noxis for testing and ideas. VNEXT MM's changes: o added get and opts directives o added SNMA.ced script to distribution o rewrote AREXX SET command to make it work ;) o added FOPT/T (SNMAOPT F) and JOPT/T (SNMAOPT J) to template, SNMAOPTIONS file and AREXX SET command o fixed quote parsing routine so things like "dc.b 'blah ''%s''',0" now work ok. o added long year extension to DATE macro o fixed tons of bugs in more complex modes (see FixList.txt) o added support for 68060 o DX directive is supported only when building an exe file $2.109: o SNMAOPT caused spurious hunks if certain type of instruction were ahead of it. o XDEFs went to the hunk where the XDEF directive was, not to the hunk where symbol was defined. o In RS and FO directives, omitting label is now allowed, which will cause RS or FO to set, but no symbol to be defined. o In "move Label," PC-relative optimizing caused spurious code in the certain 's - for example if was offset(An). o Tst address and cmpi #x,address reloc32 info was missing if 68000 targetted code and multiple passes in optimization. o Lea to addq/subq if possible. Snmaopt F flag controls. o Adda/suba to lea if possible. Snmaopt Q flag controls. o Adda/suba to addq/subq and new snmaopt flag F which controls optimizations which will change the condition code register result. It defaults off. o Nested REPTs (not allowed) don't produce nested error messages. o Bcc.L is not anymore allowed if 020> cpu is not target. o When using case-insensitive symbols, XREF/XDEF symbols were not recognized. o GETERR ARexx command can return RESULT strings. (UNTESTED !) o INFO2 ARexx command which returns RESULT strings (one at time) instead of STEM variables like INFO ARexx command. o UNDEF directive to undefine symbols. V2.04 o (An,Dx) didn't produced right address mode if started with a 'z' or 'Z' (Yes, zero suppressed stuff again...argh). o Forgot to document data range checking. IMMSIZECHECK toggle. o Incbin failed to Close() file if there were errors in assembly. o btst dn,(d16,pc) didn't set the offset. o XDEF definitions went always to first section (hunk). o \*DATE() got option v which produces dd.mm.yy formatted date. V2.03 o One bug fixed from the option file loading, which caused random crash. o Bitfields can be defined like ",{o:w}". o Some movec problems disappeared (this one is little mysterious, since I didn't touch the whole movec thing). o In ARexx mode, snma could flag some addressing modes as invalid, because certain data structures had spurious values left from the previous assembly. o ARexx SET command works again. o In (BD,An,Xn) register equates, which started with z, were not recognized. o QUIET switch disables now all output to Output(). o If expression ended to operator, snma read one long from the address which was fetched from the string (one indirection too much). This could cause buserr exception in 68000, depending on value it read. o @ character is now normal symbol character, by default. @ character in the beginning of symbol meant octal number specifier. Since SAS/C uses it in the beginning of __regargs function names, its behaviour has been changed. Use OCT commandline toggle to allow octal numbers. There was also a bug, which caused no error telling in @symbol case, when it was actually coded as octal number - unsuccessfully. V2.02 o BSS sections didn't honor mem type bits. o Sometimes pc-relative addressing modes allowed small data references. (if small data references were allowed). o RTM was coded badly. o Forcing Base Displacement to word or long didn't always work. o " macro " finally works. V2.00 o (An,Xn) is finally allowed in 68000/010 cpu mode. o tst lab was optimized to tst lab(pc) when only 68000/010 cpu was allowed. o Power ('^^') operator o EOR/XOR ('^') operator ended expression o Bitfield offset and width can now be defined after they use. o Various small bugs fixed o xdef and xref caused crash if operands had illegal chars. o Floating point numbers with exponent were incorrect. o FTENTOX was coded badly. o CNUL, DX and MOVE16 caused snma to guru when generating listing file. o When running out of mem, requester allows retry. o Memory usage for the end message (shell interface). o Pre-defined (commandline & optfile) symbols. o Macros with MEXIT and ENDC won't miss the ENDC. o Immediate data range checking can be turned off and it works for symbols which are declared after use. o Pre-assembled include files, which contain symbol and macro definitions of include files (was in V1.99 but I forget to mention it here). See INCLUDE and Arexx/MAKEGB docs. o ADDGB ARexx command lost main source file symbols after one INCLUDE operation. ADDGB is now a bit slower when there are many symbols, but it works as intended. o Bitfield stuff was broken in V1.99. V1.99 o Relative-relative (difference between labels) symbol was set as relative (ext_def) instead of correct ext_abs when xdef'ed. o Arexx startup now toggles snma on/off. o Some bugs from INCBIN removed. o "=" operator didn't produce FALSE (0) if the operands were not equal. o '040 stuff. MOVE16, CINV, CPUSH, MMU & FPU commands. Special regs. o Object file is no longer deleted if snma is trying to produce executable and there are errors and vice-versa. o Floating point equate file equates were screwed up as well as packed type conversion (nobody seems to use this :). o CASESEN=OFF caused xdefs to fail. o local symbols .l and .w were mixed up with long and word suffix, resulting enforcer hit and garbage expression. o Dcb directive works now like ds directive if it has only one parameter. o Lists with two successive commas are now handled (like x,,y). o Searches include files also from the directory where snma was started from (used to search only from where source file is). V1.97 o Case-insensitive symbol names option. o ELSE directive works now. o Some new directives (types.i stuff mainly). o New expression handler (boolean operators). o IFs were tested even if assembly was toggled off. o Some errenous expressions - like (A)A - don't crash anymore. o Multilevel optimizing. o Macro directive allows macro name as parameter. o DX directive (BSS to code or data hunk). o Absolute+Relative bug fixed (if in different hunks). o divu.l works (argh). o LINE DEBUG HUNK o Octal numbers. V1.95 o ERRCOLOR keyword in template. Highlight error char. o AREXX/REMGB without parameters didn't work (+ fixed one mungwall hit from it). o QUIET startup switch disables only startup message. (You can redirect output to the nil: if you don't want any output). o SNMAOPT M controls now movem optimizing.(It was in Q flag). o End message is now little different in shell mode. o OPT directice changed to SNMAOPT to avoid any confusion. o fmovecr generated also extended immediate data. o Output file naming failed with ".s" extension (ooouups). o Behaves little better when running out of memory. o LABEL INCBIN , LABEL get wrong value. (Veli Nuutimäki). o NULL byte in source ends it (to avoid to assemble binaries). o SELFCHECK arexx command. o Fmove.l #imm,fpcr works. o FBxx works now (Eric Augustine). o shift/rotate to generated spurious code. o INDEX register scale was allowed in 68000/010. o CNOP started to act like maniac if PC was more than 2^16. o addq/subq with undefined (at 1st pass) value, caused snma to begin 'flying high again' actions. (Gunther Nikl). o "'" or '"' works now (Gunther Nikl). o HUNK_RELOC32SHORT (implemented as 1015) to executables. o Produces also executables. (Laura Mahoney). o OPT A (address mode optimizing) was implemented as OPT E. o code_f, data_f, bss_f section types were not recognized. o FO, CLRFO, SETFO directives. o RS, RSRESET. RSSET directives (Marco Nelissen). o 'Old syntax' address mode had problems when base displacement had parenthesis around it. o Allows 99 macro parameters plus "" parameters. V1.91 o if any of cmpa operands had symbol which was relative or not defined in pass1, snma had serious problems. o If macro called another macro, \@ (unique label for one macro call) was different before the another macro call and after it. o Symbols which had only one char were not handled correctly. V1.90 o moveq didn't allow xref'd data. o mc68xxx directives o Command line additions ([-option]) o Object code naming now also checks ".s" and ".a" suffix. o OBJ filename in template was ignored (oh my). o tst with pc-relative was allowed on 68000 mode. o ext_ref symbols with same name were written many times, causing larger object file size (not actual code size). o xdef symbols were written to the all sections. o divu.l wasn't allowed. o Equates with relative components are handled better now. o Minimal WorkBench support o \*VALOF() + other macro 'insert functions'. o abslong to pc-relative optimizing. o DC generated too much data if the 2nd operand of the previous instruction was one which took some space. o REPT/ENDR directives o Global symbol table. o In cases where reloc was needed didn't create it, when symbol referred to equate which type was relative. o Equates with relative components are no longer written to the symbol list. o CHDIR (AREXX) command called FreeVec with wrong argument, causing memory loss (no crash, at least in my system). V1.70 o BTST/BCHG/BSET/BCLR Dn, set always as d0. (uups) o MOVEP didn't allow zero displacement. o ENDC switched assembly on sometimes when it shouldn't. V1.68 o Some minor bug fixes and changes (okay, I forgot them). V1.65 o Address components which started with 'Z' or 'z' were parsed to the totally wrong thing. (Bad one). o IFGT did unsigned test, instead of signed. o Didn't notice all cases when macro was already defined. o Include didn't work. o Expression handler didn't catch all undefined symbols. o AREXX, SET command. o 'TST An' in 020+ mode wasn't allowed. o Destination address mode optimizing in move instruction generated spurious opcodes in some cases. o Movem->move optimizing. V1.60 o AREXX PORT finally added o Several bugs fixed o LONGBRA flag to the template o ZAn no longer required if An omitted in addressing mode. ======================================================================== Probaply I don't remember all the changes and fixed bugs, but I hope all the major ones are here. First released version of SNMA is 1.39.