mirror of
https://github.com/uffejakobsen/acme.git
synced 2024-11-26 15:49:18 +00:00
8d2719db8a
message now includes symbol name, fixed bug in type system (!for loop counters), added address() as alternative to addr(), fixed bug in report listing generator (CR in input caused additional blank lines in output). git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@63 4df02467-bbd4-4a76-a152-e7ce94205b78
419 lines
16 KiB
Plaintext
419 lines
16 KiB
Plaintext
|
|
|
|
ACME
|
|
|
|
...the ACME Crossassembler for Multiple Environments
|
|
|
|
--- error messages ---
|
|
|
|
|
|
Here's a sorted list of all error messages ACME can give, possible
|
|
reasons and what you can do to sort it out.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: Errors on startup
|
|
----------------------------------------------------------------------
|
|
|
|
Cannot open toplevel file "FILENAME".
|
|
Maybe you mistyped its name?
|
|
|
|
Error in CLI arguments: ...
|
|
There are several of these errors, but they should be quite self-
|
|
explanatory.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: Warnings during assembly
|
|
----------------------------------------------------------------------
|
|
|
|
!warn: ...
|
|
This is given when the pseudo opcode "!warn" is executed. The
|
|
actual message varies according to the pseudo opcode's arguments.
|
|
|
|
Assembling buggy JMP($xxff) instruction
|
|
The original 6502 processor has a bug: When executing an indirect
|
|
JMP instruction where the low byte of the argument equals $ff, it
|
|
fetches the high byte of the jump target address not from memory
|
|
location ARGUMENT + 1, but from ARGUMENT - 255. Therefore ACME
|
|
issues this warning if you are about to generate such an
|
|
instruction.
|
|
Note that this warning is only given for CPU types 6502 and 6510,
|
|
because 65c02 and 65816 have been fixed in this respect.
|
|
|
|
Assembling unstable LXA #NONZERO instruction
|
|
This warning is only ever given for CPU type 6510. LXA is one of
|
|
the undocumented ("illegal") opcodes of this CPU (opcode 0xab),
|
|
and it only works reliably if its argument is zero. Therefore ACME
|
|
issues this warning if you are about to generate this instruction
|
|
with a non-zero argument.
|
|
|
|
Bug in ACME, code follows
|
|
A situation has been encountered implying there is a bug in ACME.
|
|
See the last section in this file.
|
|
|
|
C-style "==" comparison detected.
|
|
To check for equality, use a single '=' character instead.
|
|
|
|
Converted to integer for binary logic operator.
|
|
Applying binary logic to float values does not make much sense,
|
|
therefore floats will be converted to integer in this case.
|
|
|
|
"EOR" is deprecated; use "XOR" instead.
|
|
This means the operator, not the mnemonic.
|
|
|
|
Found old "!for" syntax.
|
|
Please update your sources to use the new "!for" syntax. See
|
|
AllPOs.txt for details.
|
|
You can suppress this warning using the "-Wno-old-for" switch.
|
|
|
|
Found new "!for" syntax.
|
|
When using the "-Wno-old-for" switch to disable the warning about
|
|
the older syntax, the new syntax will trigger this warning.
|
|
|
|
Label name not in leftmost column.
|
|
A label definition has blanks before the label name.
|
|
Imagine this source code:
|
|
lda #00
|
|
imx
|
|
rts
|
|
Obviously, there's a typo in the middle line (imx instead of inx),
|
|
but ACME does not recognize this: It looks just like a label
|
|
definition! Therefore releases 0.89 and higher warn you when a
|
|
label name does not start in column 1. Releases 0.94 and higher
|
|
support a command line option to switch off this warning
|
|
("-Wno-label-indent").
|
|
|
|
Label name starts with a shift-space character.
|
|
The name of a global label starts with a shift-space character. It
|
|
is highly likely that this is a typing error, therefore this
|
|
warning is issued.
|
|
|
|
Memory already initialised.
|
|
The "!initmem" command was given more than once (or in addition to
|
|
the "--initmem" command line option). Only use it once.
|
|
|
|
Output file already chosen.
|
|
The "!to" command was given more than once (or in addition to the
|
|
"--outfile" command line option). Only use it once.
|
|
|
|
Segment reached another one, overwriting it.
|
|
The program counter has just reached the start of another segment.
|
|
Because some people might want to assemble "onto" a binary file
|
|
that was loaded before, this warning can be switched off using
|
|
modifier keywords when changing the program counter via "* =".
|
|
Future versions of ACME might throw an error instead of a warning
|
|
in this case.
|
|
|
|
Segment starts inside another one, overwriting it.
|
|
The given value in a "* =" command is located inside another
|
|
segment. Because some people might want to assemble "onto" a
|
|
binary file that was loaded before, this warning can be switched
|
|
off using modifier keywords when changing the program counter via
|
|
"* =".
|
|
Future versions of ACME might throw an error instead of a warning
|
|
in this case.
|
|
|
|
Symbol list file name already chosen.
|
|
The "!sl" command was given more than once (or in addition to the
|
|
"--symbollist" command line option). Only use it once.
|
|
|
|
Used "!to" without file format indicator. Defaulting to "cbm".
|
|
Now that "!to" can be given a file format keyword (either "plain"
|
|
or "cbm"), using "cbm" as default seems inappropriate. It still
|
|
works though.
|
|
|
|
Using oversized addressing mode.
|
|
ACME just assembled a command using an addressing mode that was
|
|
larger than needed. This only happens if ACME could not work out
|
|
the argument's value in the first pass, therefore assuming a 16-
|
|
bit addressing mode. If, in a later pass, ACME finds out that the
|
|
argument is small enough to fit in 8 bits, then this warning is
|
|
shown. If you define all your zeropage symbols *before* they are
|
|
first used, this shouldn't happen. If you know that a specific
|
|
argument fits in 8 bits, you can force ACME to use 8 bits
|
|
addressing by postfixing the command with "+1". Example:
|
|
lda+1 label
|
|
ACME will then use an 8-bit addressing mode, regardless of whether
|
|
the label is known or not. If the label value happens to be too
|
|
large to fit in 8 bits, ACME will show an error of course (To
|
|
always truncate a value to 8 bits, use the '<' operator).
|
|
More about the postfixing method can be found in "AddrModes.txt".
|
|
|
|
Wrong type - expected address.
|
|
Wrong type - expected integer.
|
|
Wrong type for loop's END value - must match type of START value.
|
|
These warnings are only given when type checking has been enabled
|
|
using the "-Wtype-mismatch" switch. Make sure the argument type
|
|
matches the instruction's addressing mode.
|
|
In "!for" loops, START and END must have the same type, which then
|
|
gets used for the loop counter.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: Errors during assembly
|
|
----------------------------------------------------------------------
|
|
|
|
"ACME" environment variable not found.
|
|
This will be shown if the source code references any files from
|
|
the library, but the library location variable wasn't set. This
|
|
can only be given on systems using the said variable.
|
|
|
|
"!cbm" is obsolete; use "!ct pet" instead.
|
|
This is given when the now obsolete "!cbm" pseudo opcode is
|
|
encountered.
|
|
|
|
"!pseudopc/!realpc" is obsolete; use "!pseudopc {}" instead.
|
|
This is given when one of the now obsolete !pseudopc/!realpc
|
|
pseudo opcodes is encountered.
|
|
|
|
"!subzone {}" is obsolete; use "!zone {}" instead.
|
|
This is given when the now obsolete "!subzone" pseudo opcode is
|
|
encountered.
|
|
|
|
!error: ...
|
|
This is given when the pseudo opcode "!error" is executed. The
|
|
actual message varies according to the pseudo opcode's arguments.
|
|
|
|
Cannot open input file.
|
|
ACME had problems opening an input file ("!bin", "!convtab" or
|
|
"!src"). Maybe you mistyped its name.
|
|
|
|
Conversion table incomplete.
|
|
The conversion table file is too small. It needs to be exactly 256
|
|
bytes in size.
|
|
|
|
Division by zero.
|
|
Guess what - you attempted to divide by zero.
|
|
|
|
Exponent is negative.
|
|
Using negative exponents only give sensible results when using
|
|
floating point maths.
|
|
|
|
File name quotes not found ("" or <>).
|
|
File names have to be given in quotes. Either "" quoting for files
|
|
located in the current directory or <> quoting for library files.
|
|
|
|
Found '}' instead of end-of-file.
|
|
ACME encountered a '}' character when it expected the file to end
|
|
instead (because no blocks were open).
|
|
|
|
Garbage data at end of statement.
|
|
There are still arguments when there should not be any more.
|
|
|
|
Illegal combination of command and addressing mode.
|
|
The given command cannot be used with the given addressing mode on
|
|
the CPU you have chosen.
|
|
|
|
Illegal combination of command and postfix.
|
|
The given command cannot be used with the addressing mode
|
|
indicated by the given postfix.
|
|
|
|
Illegal postfix.
|
|
You used a postfix other than "+1", "+2" or "+3".
|
|
|
|
Macro already defined.
|
|
Macros can only be defined once. If you define a macro twice, ACME
|
|
will help you find the definitions by giving a warning for the
|
|
first definition and a serious error (stopping assembly) for the
|
|
second definition.
|
|
|
|
Macro not defined (or wrong signature).
|
|
You tried to call a macro that either wasn't defined yet (always
|
|
define macros before using them) or was called with an illegal
|
|
argument list. There must be a 1:1 match between the definition's
|
|
formal parameters and the call's actual arguments.
|
|
|
|
Macro parameter twice.
|
|
The same symbol name is used two (or more) times in the same macro
|
|
parameter list.
|
|
|
|
Negative value - cannot choose addressing mode.
|
|
Because the argument is a negative value, ACME does not know what
|
|
addressing mode (8 bits, 16 bits, on a 65816 even 24 bits) to use.
|
|
You can overcome this problem using the postfix method. Or correct
|
|
your program to use positive addresses instead.
|
|
|
|
No string given.
|
|
ACME expects a string but doesn't find it.
|
|
|
|
Number out of range.
|
|
A value is too high or too low.
|
|
|
|
Program counter is unset.
|
|
You didn't set the program counter, so ACME didn't know where to
|
|
start.
|
|
|
|
Quotes still open at end of line.
|
|
You forgot the closing quotes.
|
|
|
|
Source file contains illegal character.
|
|
Your source code file contained a null byte.
|
|
|
|
Symbol already defined.
|
|
You defined a symbol that already had a different value. To change
|
|
a symbol's value, use the "!set" pseudo opcode.
|
|
|
|
Syntax error.
|
|
Guess what - there's a syntax error.
|
|
|
|
Target not in bank (0xTARGET).
|
|
You tried to branch to an address not in the 0x0000..0xffff range.
|
|
Relative addressing (branch commands or PER) cannot leave the
|
|
current code bank of 64 KiB.
|
|
|
|
Target out of range (N; M too far).
|
|
Branch commands use relative addressing, which only has a limited
|
|
range. You exceeded it. N is the attempted offset, M is the
|
|
difference to the limit - so if you succeed in optimizing M bytes
|
|
away, the code would assemble.
|
|
|
|
There's more than one character.
|
|
You used a text string in an arithmetic expression, but the string
|
|
contained more than a single character.
|
|
|
|
Too late for postfix.
|
|
You can only postfix symbols at the start, before they are used for
|
|
the first time.
|
|
|
|
Too many '('.
|
|
A formula ends before all parentheses were closed.
|
|
|
|
Too many ')'.
|
|
There are more closing than opening parentheses in a formula.
|
|
|
|
Unknown encoding.
|
|
You used the "!convtab" command with a keyword ACME does not know.
|
|
|
|
Unknown operator.
|
|
You used an arithmetic/logical operator ACME does not know.
|
|
|
|
Unknown output format.
|
|
You used the "!to" command with a keyword ACME does not know.
|
|
|
|
Unknown processor.
|
|
You used the "!cpu" command with a keyword ACME does not know.
|
|
|
|
Unknown pseudo opcode.
|
|
You have mistyped a "!" command.
|
|
|
|
Unknown "* =" segment modifier.
|
|
You used a modifier keyword ACME does not know.
|
|
|
|
Value not defined (SYMBOL NAME).
|
|
A value could not be worked out. Maybe you mistyped a symbol name.
|
|
Whether this is given as a "normal" or as a serious error depends
|
|
on the currently parsed pseudo opcode.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: Serious errors (stopping assembly)
|
|
----------------------------------------------------------------------
|
|
|
|
!serious: ...
|
|
This is given when the pseudo opcode "!serious" is executed. The
|
|
actual message varies according to the pseudo opcode's arguments.
|
|
|
|
Found end-of-file instead of '}'.
|
|
The file ended when ACME expected the block to be closed instead
|
|
(because there was at least one block left open).
|
|
|
|
Loop count is negative.
|
|
You used the "!for" command with a negative loop count (getting
|
|
this error is only possible when using the now deprecated syntax).
|
|
|
|
Macro already defined.
|
|
Macros can only be defined once. If you define a macro twice, ACME
|
|
will help you find both definitions by giving a warning for the
|
|
first definition and a serious error (stopping assembly) for the
|
|
second definition.
|
|
|
|
Missing '{'.
|
|
ACME didn't find the expected '{' character. Remember that '{'
|
|
characters must be given on the same line as the command they
|
|
belong to.
|
|
|
|
Out of memory.
|
|
When ACME runs out of memory, it stops assembly, giving this
|
|
error. Free some memory and try again. It's highly unlikely anyone
|
|
will ever see this error, though. ;)
|
|
|
|
Produced too much code.
|
|
The program counter reached address $10000, leaving the output
|
|
buffer. At the moment, ACME can only produce a maximum of 64 KB.
|
|
|
|
Syntax error.
|
|
This is only given as a _serious_ error if it's in a "!do" loop
|
|
condition.
|
|
|
|
Too deeply nested. Recursive macro calls?
|
|
The only reason for ACME to have a limit on macro call nesting
|
|
at all is to find infinite recursions. Current limit is 64.
|
|
|
|
Too deeply nested. Recursive "!source"?
|
|
The only reason for ACME to still have a limit on "!source"
|
|
nesting at all is to find infinite recursions. Current limit is
|
|
64.
|
|
|
|
Value not yet defined.
|
|
A value could not be worked out. Maybe you mistyped a symbol name.
|
|
Whether this is given as a "normal" or as a serious error depends
|
|
on the currently parsed pseudo opcode.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: Errors on closedown
|
|
----------------------------------------------------------------------
|
|
|
|
Cannot open symbol list file "FILENAME".
|
|
Cannot open output file "FILENAME".
|
|
Make sure the name doesn't contain wildcard characters and you
|
|
have write access to the directory.
|
|
|
|
No output file specified (use the "-o" option or the "!to" pseudo opcode).
|
|
You didn't specify the output file, so ACME did not create one.
|
|
|
|
|
|
----------------------------------------------------------------------
|
|
Section: Bugs in ACME
|
|
----------------------------------------------------------------------
|
|
|
|
The warning "Bug in ACME, code follows" is always followed by a
|
|
serious error message, stopping assembly. The second message
|
|
actually gives a hint about the bug's location in the source code.
|
|
If you ever get this combination of warning and serious error,
|
|
please send me an e-mail and tell me about it. If possible,
|
|
include a piece of source code that triggers it.
|
|
|
|
Please don't get this wrong - there are no known bugs. I just left
|
|
some debugging code in place in case there is a bug I failed to
|
|
notice during testing. In practice, this warning is not expected
|
|
to be given at all. That's the reason why I want to be notified if
|
|
it *does* decide to show up.
|
|
|
|
The hint messages are of no real interest to the end user, but here
|
|
they are for completeness' sake.
|
|
|
|
IllegalGroupIndex
|
|
The mnemonic tree contains a group that I didn't add.
|
|
|
|
IllegalBlockTerminator
|
|
A RAM block (macro or loop) was terminated incorrectly.
|
|
|
|
IllegalOperatorHandle
|
|
The expression parser found an operator that does not exist.
|
|
|
|
OperandStackNotEmpty
|
|
The expression parser has finished though there are still operands
|
|
left to parse.
|
|
|
|
OperatorStackNotEmpty
|
|
The expression parser has finished though there are still
|
|
operators left to parse.
|
|
|
|
StrangeInputMode
|
|
The input state machine has reached a state that does not exist.
|
|
|
|
StrangeParenthesis
|
|
The expression parser found a non-existing operator.
|