

                                 ACME

         ...the ACME Crossassembler for Multiple Environments

                    --- compatibility problems ---


If you haven't used ACME before, you don't need to read this text.
It is only of use to people who upgraded from ACME 0.05 (or earlier)
to ACME 0.07 (or later).

You might encounter some slight incompatibilities: I have done a few
changes to ACME's workings.
Because backwards compatibility is the root of all evil (*g*), I did
not include any possibility to enforce the old behaviour. If one of
the following changes applies to your source files, assemble them with
this new release of ACME and then compare new and old output files.

Sorry for this inconvenience, but at least I think that there won't be
any further changes in the future.


----------------------------------------------------------------------
Section:   Offset assembly / segment assembly
----------------------------------------------------------------------

Offset assembly is now done using a new pseudo opcode called
"!pseudopc". Have a look at "AllPOs.txt" for further information on
its syntax and usage.
The old way of just redefining the program counter by using more than
one "* = EXPRESSION" statements does something totally different now:
Whenever the program counter is redefined, ACME will actually change
its pointer into the output buffer, so you can write your code in
distinct segments. These segments can be given in any order. After
assembly, ACME stores everything from the lowest address used to the
highest address used. Have a look at "AllPOs.txt" for an example on
how to use this facility.


----------------------------------------------------------------------
Section:   Argument order of MVP/MVN
----------------------------------------------------------------------

The syntax of the 65816 opcodes MVN and MVP is usually given as

    MVN source_bank, destination_bank

All previous versions of ACME did it the other way round: First the
destination bank, then the source bank. This has been fixed, ACME now
uses the syntax given above.


----------------------------------------------------------------------
Section:   Typecast
----------------------------------------------------------------------

You can use leading zeros to make ACME use a bigger addressing mode
than needed. Until now, this did not work when using labels. The
source code

	label1 = $fa
	label2 = $00fa

		lda $fa
		lda $00fa
		lda label1
		lda label2

was assembled to:

		lda $fa
		lda $00fa
		lda $fa
		lda $fa

Release 0.07 of ACME now correctly assembles the given source code to:

		lda $fa
		lda $00fa
		lda $fa
		lda $00fa


----------------------------------------------------------------------
Section:   !endoffile
----------------------------------------------------------------------

Previous versions of ACME knew a pseudo opcode called "!end" that
marks the end of a source code file. Because the word "end" doesn't
actually specify *what* is about to end, I changed this to
"!endoffile". You can also use a short version, called "!eof". The old
PO "!end" no longer works.


----------------------------------------------------------------------
Section:   Using the BIT command without parameters
----------------------------------------------------------------------

Release 0.07 of ACME will complain if you try to assemble BIT without
any parameter. Previous versions did just output the byte $2c - a
commonly known trick to mask the following 2-byte command on the 6502
processor. If you still want to do this, use

		!src <6502/std.a>	; parse library file

to include some standard macros. Then you can use

		+bit8	; output $24 to mask following 1-byte command

and

		+bit16	; output $2c to mask following 2-byte command

respectively.


That's all. Again, sorry for the inconvenience...
