

                                 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.




Changes:




***   Offset assembly / segment assembly

Offset assembly is now done using new Pseudo Opcodes called
"!pseudopc" and "!realpc". Have a look at "AllPOs.txt" for further
information on their 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.




***   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.




***   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




***   !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.




***   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 the following 1-byte command

and

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

respectively.




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

