

                                 ACME

         ...the ACME Crossassembler for Multiple Environments

                          - free  software -

                       (C) 1998-2020 Marco Baye


----------------------------------------------------------------------
Section:   Copyright
----------------------------------------------------------------------

ACME - a crossassembler for producing 6502/65c02/65816 code.
Copyright (C) 1998-2020 Marco Baye
The ACME icon was designed by Wanja "Brix" Gayk

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA  02111-1307  USA


----------------------------------------------------------------------
Section:   Introduction
----------------------------------------------------------------------

ACME is a crossassembler for the 65xx range of processors. It knows
about the standard 6502, the 65c02 and the 65816. It also supports
the undocumented ("illegal") opcodes of the NMOS versions of the 6502,
like the 6510 variant that is used in the Commodore C=64, and it also
supports extensions to the intruction set done by other parties.

This text and the other files in the same directory only describe the
basic functions independent of the platform used. There should be
another help file in this archive that outlines the features specific
to your platform.

The files in the docs directory and what they contain:

    65816.txt      Stuff specific to the 65816 processor
    AddrModes.txt  How to choose non-standard addressing modes
    AllPOs.txt     Lists ACME's pseudo opcodes. Use as a reference.
    Changes.txt    The change log
    COPYING        Version 2 of the GNU General Public License
    Errors.txt     Lists ACME's error messages and what they mean.
    Example.txt    Information on how to assemble the example sources.
    Floats.txt     About the support for floating-point values
    Help.txt       ...is this text.
    Illegals.txt   Support for undocumented opcodes
    Lib.txt        Information about the library
    QuickRef.txt   All the basic stuff about ACME       <- START HERE!
    Source.txt     How to compile ACME
    Upgrade.txt    Incompatibilities to earlier versions
    cputypes/      Instruction sets of target CPUs

IMPORTANT: If you upgrade from an earlier version of ACME, don't
forget to read the files "Changes.txt" and "Upgrade.txt". Adding new
features can not always be done in a 100% compatible way, so newer
versions may behave slightly differently. To solve this problem, the
"--dialect" CLI switch can be used.

If you want to start using ACME right away, read the file
"QuickRef.txt", it contains the main help text.


----------------------------------------------------------------------
Section:   What it can and does
----------------------------------------------------------------------

ACME is a crossassembler.
ACME can produce code for the 6502, 65c02 and 65816 processors.
It does this *fast*.
It can produce at most 64 KBytes of code.
You can use global labels, local labels and anonymous labels.
It is fast.
You can use global and local macros.
You can use conditional assembly.
You can use looping assembly.
You can include other source files.
You can include binary files (either whole or parts) directly into the
    output.
You can use offset assembly (code that is designed to run at a
    different address).
It is fast.
ACME's maths parser uses operator priorities, so 1+2*3 will correctly
    give 7 (unlike some other free assemblers that give 9 instead).
ACME's maths parser has no problems concerning parentheses and
    indirect addressing modes.
ACME's maths parser knows a shit load of different operations.
ACME supports both integer and floating point maths operations.
In addition to numbers, symbols can also hold strings or lists.
You can dump the global symbols into a file.
ACME supports a library of commonly used macros and symbols.
It always takes as many passes as are needed.
ACME exists on several platforms, meaning you can easily exchange your
    sources with other people (preferring other OSes).
ACME can convert its strings to PetSCII and screen code (Okay, this is
    C64-specific).
ACME has a rudimentary type checking system to catch errors like
    missing '#' characters.
Did I mention that it is fast?


----------------------------------------------------------------------
Section:   What it can't and doesn't
----------------------------------------------------------------------

ACME cannot transfer data to a C64 or another computer.
ACME does not produce ".o65"-format linkable object files.
ACME cannot produce more than 64 KB (would be useful for the 65816).
ACME cannot disassemble or relocate given code files.


----------------------------------------------------------------------
Section:   Platform independence
----------------------------------------------------------------------

ACME was initially developed under RISC OS. Currently there are
platform-specific versions available for AmigaOS, DOS, Linux, Windows
and RISC OS. The Linux sources should be ready to compile on most
other UNIX-like systems as well. In the future there will hopefully
also be a version that runs on the C64/128.
Though the source code does not exactly look like it *g*, ACME was
written with portability in mind: Some of its limitations were
included on purpose, just to allow a C64/128 version. To successfully
assemble multi-file source codes from other platforms, the file names
have to be altered as little as possible. Please name all your files
that may be distributed in a sensible way, for example by limiting
their file names to 8+3 format. I really hate this stupid will-it-
ever-die DOS convention, but using it is the only way to ensure
portability of files.

Please use ".a" as the file name extension of ACME source code files.

All file names used inside source code files have to be given in UNIX
style, ACME will convert them to the current host platform style if
needed.

There should be no problems concerning newline characters, ACME was
designed to cope with CR, LF and CRLF.

A minor problem is the different character tables used on different
systems. As all predefined ACME keywords only use 7-bit ASCII, the
assembler will work on any system that uses a superset of this
character table: UTF-8, ANSI, ISO 8859, etc.
Symbol names can contain top-bit-set characters - these may look
strange if the sources are edited on a different platform, but ACME
will still work.

If you want to port ACME to another platform, please inform me so that
I can add your version to the ones already present on the ACME
homepage. As the sources are released under the GNU General Public
License, you are not forced to do this; but it would help to make ACME
available to other users.
The same goes for any changes or enhancements to the sources: Please
send me a copy so that the changes can be incorporated into the next
"official" release on the ACME home page.


----------------------------------------------------------------------
Section:   Contacting the author
----------------------------------------------------------------------

The newest version of ACME can be found at the ACME homepage:
http://sourceforge.net/p/acme-crossass/

If you want to report a bug or make a suggestion, then simply send
me an email:
mailto:marco@baye.de
