mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-11-22 18:32:09 +00:00
82127995fe
git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@8 4df02467-bbd4-4a76-a152-e7ce94205b78
371 lines
16 KiB
Plaintext
371 lines
16 KiB
Plaintext
|
|
|
|
ACME
|
|
|
|
...the ACME Crossassembler for Multiple Environments
|
|
|
|
--- change log ---
|
|
|
|
|
|
This text only contains descriptions of changes independent of the
|
|
platform used. There should be another help file in this archive
|
|
outlining the platform specific changes.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.94.4
|
|
----------------------------------------------------------------------
|
|
|
|
Added "apple" output format.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.94.3
|
|
----------------------------------------------------------------------
|
|
|
|
"Target out of range" error now includes info on how much the range was
|
|
exceeded. Thanks to Bitbreaker/VOZ for the suggestion.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.94.2
|
|
----------------------------------------------------------------------
|
|
|
|
Added missing newline after "no output file specified" message.
|
|
Fixed bug in "!to" and "!sl" (colon in filename is interpreted as command
|
|
separator in later passes).
|
|
Changed verbose output hex prefix from $ to 0x.
|
|
Changed --help output
|
|
Changed EOR to XOR in docs and comments (the ACME operator, not the 6502
|
|
opcode)
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.94.1
|
|
----------------------------------------------------------------------
|
|
|
|
New CLI switch: "-D" allows to set global labels via the command line.
|
|
New CLI switch: "-Wno-label-indent" switches off warnings about
|
|
indented implicit label definitions.
|
|
New PO: "!ifndef" (finally a companion for "!ifdef"...)
|
|
When setting the program counter via "*=", modifiers ("overlay" and
|
|
"invisible") allow to suppress warnings about segment overlap.
|
|
Float values without leading digits are now accepted.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.93
|
|
----------------------------------------------------------------------
|
|
|
|
Change: If "Offset assembly still active at end of segment", it no
|
|
longer gets switched off.
|
|
Change: Operators ASR and LSL/ASL now can also handle FP (LSR still
|
|
makes no sense).
|
|
Change: Added distinction between '/' and "DIV" operators: DIV always
|
|
gives integer results, while '/' depends on operands.
|
|
New functions: added int() and float() functions.
|
|
Internal change: default fill value for !align is now CPU-specific
|
|
(but still 234)
|
|
New CLI switch: "--use-stdout" prints errors to stdout instead of
|
|
stderr (a fix for the "Relaunch64" IDE I have nothing to do with)
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.92
|
|
----------------------------------------------------------------------
|
|
|
|
Text versions of arithmetic/logic operators (XOR, DIV, MOD, etc.) no
|
|
longer need to be in upper case.
|
|
Experimental support for floating point maths.
|
|
Support for mathematical functions:
|
|
sin(), cos(), tan(), arcsin(), arccos(), arctan()
|
|
New errors:
|
|
"Argument out of range.", "Unknown function."
|
|
These operators always deliver ints:
|
|
not, and, or, xor, lowbyteof, highbyteof, bankbyteof, mod, asl,
|
|
lsl, asr, lsr
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.91
|
|
----------------------------------------------------------------------
|
|
|
|
Added anonymous labels (- + -- ++ --- +++ etc.). Every other assembler
|
|
seems to support them, so I added them to ACME as well... :)
|
|
New POs: "!warn MESSAGE", "!error MESSAGE", "!serious MESSAGE"
|
|
New CLI option: "--maxdepth NUMBER" sets maximum recursion depth for
|
|
macro calls and the "!source" pseudo opcode.
|
|
ACME now gives a warning when assembling JMP($xxff) on 6502/6510
|
|
because that instruction is broken on those CPUs.
|
|
After giving the error "Target out of range", the error "Number out of
|
|
range" is now suppressed.
|
|
Corrected code example in QuickRef.txt (why didn't anyone tell me? :))
|
|
Added additional example source code.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.90
|
|
----------------------------------------------------------------------
|
|
|
|
Arithmetic shift right now has some watchdog code and should work
|
|
regardless of compiler.
|
|
Corrected some typos in error messages and docs.
|
|
New CLI option: "--cpu CPU_TYPE"
|
|
The output file format chosen with "--format FORMAT" is now used as
|
|
default when "!to" is used without format keyword.
|
|
Again: Tidier code.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.89
|
|
----------------------------------------------------------------------
|
|
|
|
Support for more undocumented ("illegal") opcodes: anc, arr, asr, sbx,
|
|
dop, top, jam. See Illegals.txt for more info.
|
|
Change in shift operators: Logical shift right (">>" or "LSR") has on
|
|
most platforms actually been an arithmetic shift right all the
|
|
time! Therefore, ">>" now *officially* performs an arithmetic
|
|
shift right (can also be written as "ASR"), while ">>>" has been
|
|
added to perform a logical shift right (can also be written as
|
|
"LSR"). Note: This is about ACME's maths parser and has nothing to
|
|
do with the 6502 mnemonics "asl" and "lsr".
|
|
Finally added a "-o" command line option to set the output file! See
|
|
QuickRef.txt for info on the other new CLI options (--format,
|
|
--labeldump, --maxerrors, --setpc, --initmem, --version).
|
|
Fixed bug: "!align" could be used while program counter undefined.
|
|
Fixed bug: Numbers before mnemonics are no longer skipped (or rather,
|
|
implicit label definitions are no longer accepted if the label
|
|
name starts with a digit).
|
|
Change: Much better algorithm to compute to-the-power-of (read: it's
|
|
no longer braindead).
|
|
Some more internal tidying.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.88
|
|
----------------------------------------------------------------------
|
|
|
|
Fixed architecture-dependent bug introduced in release 0.87.
|
|
Fixed bug: Unknown !cpu keywords could cause crashes.
|
|
Fixed bug in !ct "filename" nesting.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.87
|
|
----------------------------------------------------------------------
|
|
|
|
Support for some undocumented ("illegal") opcodes: slo, rla, sre, rra,
|
|
sax, lax, dcp, isc. To use these, choose the 6510 cpu.
|
|
Two error messages gone: "Sorry, feature not yet implemented." and
|
|
"Chosen CPU does not support this command and/or addressing mode."
|
|
Explanation of new error message ("There's more than one character.")
|
|
added to docs.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.86
|
|
----------------------------------------------------------------------
|
|
|
|
The "!convtab" pseudo opcode can now be given the file name of a
|
|
conversion table. The file must hold exactly 256 bytes.
|
|
Improved docs a bit (more and better examples, more info on verbosity
|
|
CLI switch).
|
|
If no "!to" pseudo opcode has been found, ACME will tell you so.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.86 beta
|
|
----------------------------------------------------------------------
|
|
|
|
Macros can now be used with call-by-reference semantics, therefore
|
|
allowing some kind of return value. Call-by-reference is
|
|
indicated by prefixing the relevant parameter(s) with a '~'
|
|
character. This has to be done at both the macro definition and
|
|
the macro call.
|
|
Different macros are allowed to have the same name as long as their
|
|
parameter lists differ in size (number of arguments) or type
|
|
(call-by-value vs. call-by-reference)
|
|
Macros do not have a limit on parameter count anymore.
|
|
Macro size is unlimited now.
|
|
The expression parser does not have a limit on recursion depth
|
|
anymore, so you can use as many parentheses as you like.
|
|
Loop block size is unlimited now.
|
|
Label name and string lengths are unlimited now.
|
|
The recursion depth of "!source" and macro calls is set to 64. The
|
|
only reason there still *is* a limit is to be able to spot
|
|
infinite recursions.
|
|
Offset assembly now has block support and can be nested. Using the old
|
|
syntax still works, but gives a warning.
|
|
Pseudo opcodes "!convtab", "!cpu", "!al", "!as", "!rl" and "!rs" now
|
|
have block support and can be nested.
|
|
Using "!to" without file format indicator now gives a warning (but
|
|
still works).
|
|
Fixed bug: The statement
|
|
!to "outfile" ANY_SPECIAL_CHARACTER_BUT_COMMA GARBAGE
|
|
wasn't flagged as an error.
|
|
Fixed bug: The statement
|
|
!source "a file that cannot be opened"
|
|
did not give an error, but was just ignored.
|
|
If a global label starts with a shift-space character, a warning is
|
|
issued (because it is highly likely that it is a typing error).
|
|
*Much* cleaner internals. *Very* *much* cleaner internals actually.
|
|
More bug checking at runtime.
|
|
Tree lookups should be a bit faster.
|
|
Initialising the memory should be a bit faster.
|
|
Writing the output file should be a bit faster.
|
|
The expression parser now uses repeated multiplication instead of the
|
|
math library's pow() call, so it is no longer necessary to include
|
|
the C math library when compiling.
|
|
The number of errors displayed before assembly stops was reduced from
|
|
20 to 10. I really should make this configurable via a CLI switch.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.85 alpha
|
|
----------------------------------------------------------------------
|
|
|
|
Fixed bug: Handling of parentheses in new expression parser was badly
|
|
screwed up. Thanks go to Nathan Smith for reporting that bug.
|
|
Verbosity messages for segments and output file now contain size info.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.84 alpha
|
|
----------------------------------------------------------------------
|
|
|
|
Some changes in documentation (mainly corrected typos)
|
|
Usage count for labels (Unused ones are marked in label dump file)
|
|
New PO: "!8" (for 8-bit values, as "!byte" / "!by" / "!08")
|
|
Finally removed the dreaded only-two-input-files restriction
|
|
Improved PO: "!to" has parameter for choosing output file format
|
|
Fixed bug: Blanks after "!for"'s "}" character stopped assembly
|
|
Rewritten expression parser and label tree handler (should be faster)
|
|
Generally tidied up the source.
|
|
Skipped some version numbers to get a "less frightening" one. :)
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.08 beta
|
|
----------------------------------------------------------------------
|
|
|
|
Fixed really serious bug: The 65816's indirect DP addressing caused
|
|
wrong opcodes to be generated. Thanks to Doc Bacardi/The Dreams
|
|
for reporting it.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.07 beta
|
|
----------------------------------------------------------------------
|
|
|
|
Fixed really serious bug: Indirect JMP / JSR were assembled without
|
|
target addresses. Thanks to YTM/Alliance for reporting that one.
|
|
Fixed bug in value parser's handling of parentheses: Expressions like
|
|
"a*(b-c)+d" gave "a*((b-c)+d)", obviously not the same.
|
|
Fixed bug: "!set LABEL = VALUE" now *really* works correctly.
|
|
Fixed bug: ACME gave "too late for postfix" error when reading a
|
|
predefined label of known size. Only occurred when using macros.
|
|
Fixed bug: Error messages given from within macro definitions used
|
|
truncated file names.
|
|
Fixed bug: Calling of local macros didn't work at all.
|
|
Fixed bug: "}" chars directly after macro calls were not found.
|
|
Fixed bug: Spaces after ":" and "{" gave syntax errors.
|
|
Fixed bug: Line counting inside loops was screwed up.
|
|
Fixed bug: Changed argument order of MVP and MVN (now it's "opcode,
|
|
source, target")
|
|
New PO: "!08" (for 8-bit values, as "!byte" / "!by")
|
|
New PO: "!16" (for 16-bit values, as "!word" / "!wo")
|
|
New PO: "!24" (for 24-bit values)
|
|
New PO: "!32" (for *signed* 32-bit values)
|
|
New PO: "!pseudopc" (starts offset assembly)
|
|
New PO: "!realpc" (ends offset assembly)
|
|
New PO: "!for LABEL, TIMES { LINES }" for easier loops.
|
|
New PO: "!initmem BYTE" to define empty memory.
|
|
New PO: "!endoffile" (short "!eof") replaces "!end".
|
|
New PO: "!ifdef" (only use this if you *really* know what you are
|
|
doing. Otherwise, just don't use it)
|
|
New PO: "!convtab CONVERSION" (short "!ct") selects the default
|
|
character conversion, making "!cbm" obsolete.
|
|
Improved PO: "!binary" now has "skip" parameter.
|
|
Change: "!cbm" outputs a warning when used - use "!ct pet" instead.
|
|
Change: "!end" no longer works - use "!eof" instead.
|
|
Change: "*=VALUE" is now segment change instead of offset assembly.
|
|
Change: Argument order of MVN/MVP is now as is standard.
|
|
The typecast system has been rewritten - now it works as intended.
|
|
BIT without any parameters no longer works - use a macro instead.
|
|
Leading zeros are stored in label structures and acted upon.
|
|
The documentation is in several files now.
|
|
Negative numbers are now handled much more sensibly.
|
|
'ACME' environment variable only needed when *really* needed.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.05 beta
|
|
----------------------------------------------------------------------
|
|
|
|
Fixed bug: No more multiple error messages.
|
|
Fixed bug: Zone names now work correctly (First char wasn't stored).
|
|
Fixed bug: "!set label = label" now works correctly (I hope).
|
|
Fixed bug: "stz ...,y" gave "number too big" instead of "illegal
|
|
combination of command and addressing mode"
|
|
New PO: "!subzone" (short "!sz") for nested zones.
|
|
Added support for library tree when using "!source" or "!binary".
|
|
Single-character strings can now be given in single quotes as well.
|
|
Real icons.
|
|
Startup errors now exit correctly with EXIT_FAILURE code.
|
|
Example program now includes "Expected_Output" file.
|
|
Further tidied up the sources.
|
|
Tidied up the general help file:
|
|
-Changed "Freeware" to "free software"
|
|
-Corrected the information given on "!align".
|
|
-Added examples for most of the pseudo opcodes.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.04 beta
|
|
----------------------------------------------------------------------
|
|
|
|
Corrected some small bugs.
|
|
New PO: "!zone" (short "!zn") replaces "!module" (short "!mod")
|
|
Tidied up the sources a lot.
|
|
Changed bad style C code reported by lint.
|
|
Added GNU GPL hint in every source file.
|
|
Added startup message in verbose mode.
|
|
Added "Error: " to startup error messages.
|
|
Added Amiga, Linux and OS/2 versions
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.03 beta
|
|
----------------------------------------------------------------------
|
|
|
|
Generally tidied up the source.
|
|
Moved RISC OS-specific CLI options to platform file.
|
|
Added pathname conversion from UNIX style to current platform style.
|
|
Added context variables (enabling "!source"s and macros).
|
|
Translated all documentation to english.
|
|
Changed string pseudo opcodes to allow numeric values.
|
|
Added verbose mode (CLI option "v").
|
|
Added output buffer, removing the need for additional output pass (and
|
|
now the "!to" pseudo opcode can be placed anywhere).
|
|
More than one "label = pc" definition per statement now illegal.
|
|
Instead added possibility to have several statements on a single line
|
|
by using ":" as a separator character.
|
|
Added new keywords: "!set", "!if", "else", "!do", "until", "while" and
|
|
"!macro"
|
|
Added support for "!source".
|
|
Added basic support for blocks.
|
|
Added support for "!if {...} else {...}".
|
|
Added support for zone titles.
|
|
Added support for loops (endless loops are only detected if producing
|
|
code).
|
|
Added support for macros (even nested definitions are possible now).
|
|
Added DOS version.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: New in release 0.02 alpha
|
|
----------------------------------------------------------------------
|
|
|
|
Er, I don't know anymore. It was a bad ugly hack and it only ran on
|
|
RISC OS. :-)
|