6502/vasm/doc/vasm_main.texi

468 lines
16 KiB
Plaintext

This chapter describes the module-independent part of the assembler. It
documents the options and extensions which are not specific to a certain
target, syntax or output driver. Be sure to also read the chapters on the
backend, syntax- and output-module you are using. They will
likely contain important additional information like data-representation
or additional options.
@node General Assembler Options
@section General Assembler Options
@command{vasm} is run using the following syntax:
@example
@command{vasm<target>_<syntax> [options] file}
@end example
The following options are supported by the machine independent part
of @command{vasm}:
@table @option
@item -chklabels
Issues a warning when a label matches a mnemonic or directive name
in either upper or lower case.
@item -D<name>[=expression]
Defines a symbol with the name <name> and assigns the value of the
expression when given. The assigned value defaults to 1 otherwise.
@item -depend=<type>
Print all dependencies while assembling the source with the given
options. No output is generated. <type> may be @option{list} for
printing one file name in each new line, or @option{make} for printing
a sequence of file names on a single line, suitable for Makefiles.
When the output file name is given by @option{-o} then
@command{vasm} will also print @code{outname:} in front of it.
Note that unlike with @option{-dependall} only relative include
file dependencies will be listed (which is the common case).
@item -dependall=<type>
Prints dependencies in the same way as @option{-depend}, but
will also print all include files with absolute paths.
@item -depfile <filename>
Used together with @option{-depend} or @option{-dependall} and
instructs vasm to output all dependencies to a new file, instead
of stdout. Code will be generated in parallel to the dependencies
output.
@item -dwarf[=<version>]
Automatically generate DWARF debugging sections, suitable for
source level debugging. When the version specification is missing
DWARF V3 will be generated. The only difference to V2 is that it
creates a @code{.debug_ranges} section, with address ranges for all
sections, instead of a bad workaround by specifying
@code{DW_AT_low_pc=0} and @code{DW_AT_high_pc=~0}.
Note that when you build vasm from source, you may have to specify
your host operating system with @code{-Dname} in the Makefile to
include the appropriate code which can determine the current
work directory. Otherwise, the default would be to set the current
work directory to an empty string. Currently supported are:
@code{UNIX}, @code{AMIGA}, @code{ATARI}, @code{MSDOS},
@code{_WIN32}.
@item -esc
Enable escape character sequences. This will make vasm treat the
escape character \ in string constants similar as in the C language.
@item -F<fmt>
Use module <fmt> as output driver. See the chapter on output
drivers for available formats and options.
@item -I<path>
Define another include path. They are searched in the order of
occurence on the command line.
@item -ignore-mult-inc
When the same file is included multiple times with the same path
this is silently ignored, causing the file to be processed only
once. Note that you can still include the same file twice when
using different paths to access it.
@item -L <listfile>
Enables generation of a listing file and directs the output into
the file <listfile>.
@item -Ll<lines>
Set the number of lines per listing file page to <lines>.
@item -Lnf
Do not emit any form feed code into the listing file, for starting
a new page.
@item -Lns
Do not include symbols in the listing file.
@item -maxerrors=<n>
Defines the maximum number of errors to display before assembly
is aborted. When <n> is 0 then there is no limit. Defaults to 5.
@item -maxmacrecurs=<n>
Defines the maximum of number of recursions within a macro.
Defaults to 1000.
@item -nocase
Disables case-sensitivity for everything - identifiers, directives
and instructions. Note that directives and instructions may already
be case-insensitive by default in some modules.
@item -noesc
No escape character sequences. This will make vasm treat the
escape character \ as any other character. Might be useful for
compatibility.
@item -noialign
Perform no automatic alignment for instructions. Note that
unaligned instructions make your code crash when executed!
Only set when you know what you do!
@item -nosym
Strips all local symbols from the output file and doesn't include
any other symbols than those which are required for external
linkage.
@item -nowarn=<n>
Disable warning message <n>. <n> has to be the number of a valid
warning message, otherwise an error is generated.
@item -o <ofile>
Write the generated assembler output to <ofile> rather than
@file{a.out}.
@item -pic
Try to generate position independant code. Every relocation is
flagged by an error message.
@item -quiet
Do not print the copyright notice and the final statistics.
@item -unnamed-sections
Sections are no longer distinguished by their name, but only by
their attributes. This has the effect that when defining a second
section with a different name but same attributes as a first one,
it will switch to the first, instead of starting a new section.
@item -unsshift
The shift-right operator (@code{>>}) treats the value to shift as
unsigned, which has the effect that 0-bits are inserted on the
left side. The number of bits in a value depend on the target
address type (refer to the appropriate cpu module documentation).
@item -w
Hide all warning messages.
@item -wfail
The return code of vasm will no longer be 0 (success), when there
was a warning. Errors always make the return code fail.
@item -x
Show an error message, when referencing an undefined symbol.
The default behaviour is to declare this symbol as externally
defined.
@end table
Note that while most options allow an argument without any separating blank,
some others require it (e.g. @option{-o} and @option{-L}).
@section Expressions
Standard expressions are usually evaluated by the main part of vasm
rather than by one of the modules (unless this is necessary).
All expressions evaluated by the frontend are calculated in terms
of target address values, i.e. the range depends on the backend.
The available operators include all those which are common in assembler as
well as in C expressions.
C like operators:
@itemize
@item Unary: @code{+ - ! ~}
@item Arithmetic: @code{+ - * / % << >>}
@item Bitwise: @code{& | ^}
@item Logical: @code{&& ||}
@item Comparative: @code{< > <= >= == !=}
@end itemize
Assembler like operators:
@itemize
@item Unary: @code{+ - ~}
@item Arithmetic: @code{+ - * / // << >>}
@item Bitwise: @code{& ! ~}
@item Comparative: @code{< > <= >= = <>}
@end itemize
Up to version 1.4b the operators had the same precedence and associativity as
in the C language. Newer versions have changed the operator priorities to
comply with the common assembler behaviour. The expression evaluation
priorities, from highest to lowest, are:
@enumerate 1
@item @code{+ - ! ~} (unary +/- sign, not, complement)
@item @code{<< >>} (shift left, shift right)
@item @code{&} (bitwise and)
@item @code{^ ~} (bitwise exclusive-or)
@item @code{| !} (bitwise inclusive-or)
@item @code{* / % //} (multiply, divide, modulo)
@item @code{+ -} (plus, minus)
@item @code{< > <= >=} (less, greater, less or equal, greater or equal)
@item @code{== != = <>} (equality, inequality)
@item @code{&&} (logical and)
@item @code{||} (logical or)
@end enumerate
Operands are integral values of the target address type. They can either be
specified as integer constants of different bases (see the documentation
on the syntax module to see how the base is specified) or character
constants. Character constants are introduced by @code{'} or @code{"}
and have to be terminated by the same character that started them.
Multiple characters are allowed and a constant is built according to the
endianess of the target.
When the @option{-esc} option was specified, or automatically enabled by
a syntax module, vasm interprets escape character sequences as in the
C language:
@table @code
@item \\
Produces a single @code{\}.
@item \b
The bell character.
@item \f
Form feed.
@item \n
Line feed.
@item \r
Carriage return.
@item \t
Tabulator.
@item \"
Produces a single @code{"}.
@item \'
Produces a single @code{'}.
@item \e
Escape character (27).
@item \<octal-digits>
One character with the code specified by the digits
as octal value.
@item \x<hexadecimal-digits>
One character with the code specified by the digits
as hexadecimal value.
@item \X<hexadecimal-digits>
Same as @code{\x}.
@end table
Note, that the default behaviour of vasm has changed since V1.7! Escape
sequence handling has been the default in older versions. This has been
changed to increase compatibility with other assemblers. Use @option{-esc}
to assemble sources with escape character sequences. It is still the
default in the @code{std} syntax module, though.
@section Symbols
You can define as many symbols as your available memory permits. A symbol
may have any length and can be of global or local scope. Internally, there
are three types of symbols:
@table @code
@item Expression
These symbols are usually not visible outside the
source, unless they are explicitely exported.
@item Label
Labels are always addresses inside a program section. By
default they have local scope for the linker.
@item Imported
These symbols are externally defined and must be
resolved by the linker.
@end table
Beginning with vasm V1.5c one expression symbol is always defined to allow
conditional assembly depending on the assembler being used: @code{__VASM}.
Its value depends on the selected cpu module. There may be other symbols which
are pre-defined by the syntax- or by the cpu module.
@section Include Files
Vasm supports include files and defining include paths. Whether this
functionality is available depends on the syntax module, which has to
provide the appropriate directives.
On startup vasm will define at least one default include path: the
current working directory, where the assembler program was launched from.
When the input file is loaded from a different directory, i.e. the input
file is a relative or absolute path and not a single file name, then the
path to the input file name will be added as another include path.
Include paths are searched in the following order:
@enumerate 1
@item Current work directory.
@item Paths specified by @option{-I} in the order of occurence on the
command line.
@item Path to the input source file.
@item Paths specified by directives inside the source text (in the order
of occurence).
@end enumerate
@section Macros
Macros are supported by vasm, but the directives for defining them have
to be implemented in the syntax module. The assembler core supports 9
macro arguments by default to be passed in the operand field,
which can be extended to any number by the syntax module.
They can be referenced inside the macro either by name (@code{\name}) or by
number (@code{\1} to @code{\9}), or both, depending on the syntax module.
Recursions and early exits are supported.
Refer to the selected syntax module for more details.
@section Structures
Vasm supports structures, but the directives for defining them
have to be implemented in the syntax module.
@section Conditional Assembly
Has to be provided completely by the syntax module.
@section Known Problems
Some known module-independent problems of @command{vasm} at the moment:
@itemize @minus
@item None.
@end itemize
@section Credits
All those who wrote parts of the @command{vasm} distribution, made suggestions,
answered my questions, tested @command{vasm}, reported errors or were otherwise
involved in the development of @command{vasm} (in descending alphabetical order,
under work, not complete):
@itemize
@item Jordan Zebor
@item Joseph Zatarski
@item Frank Wille
@item Henryk Richter
@item Sebastian Pachuta
@item Esben Norby
@item Gunther Nikl
@item George Nakos
@item Timm S. Mueller
@item Gareth Morris
@item Dominic Morris
@item Jean-Paul Mari
@item Mauricio Mu@~noz Lucero
@item J@"org van de Loo
@item Robert Leffmann
@item Andreas Larsson
@item Miro Kropacek
@item Mikael Kalms
@item Matthew Hey
@item Philippe Guichardon
@item Romain Giot
@item Francois Galea
@item Tom Duin
@item Karoly Balogh
@end itemize
@section Error Messages
The frontend has the following error messages:
@itemize @minus
@item 1: illegal operand types
@item 2: unknown mnemonic <%s>
@item 3: unknown section <%s>
@item 4: no current section specified
@item 5: internal error %d in line %d of %s
@item 6: symbol <%s> redefined
@item 7: %c expected
@item 8: cannot resolve section <%s>, maximum number of passes reached
@item 9: instruction not supported on selected architecture
@item 10: number or identifier expected
@item 11: could not initialize %s module
@item 12: multiple input files
@item 13: could not open <%s> for input
@item 14: could not open <%s> for output
@item 15: unknown option <%s>
@item 16: no input file specified
@item 17: could not initialize output module <%s>
@item 18: out of memory
@item 19: symbol <%s> recursively defined
@item 20: fail: %s
@item 21: section offset is lower than current pc
@item 22: target data type overflow (%d bits)
@item 23: undefined symbol <%s>
@item 24: trailing garbage after option -%c
@item 25: missing pacro parameters
@item 26: missing end directive for macro "%s"
@item 27: macro definition inside macro "%s"
@item 28: maximum number of %d macro arguments exceeded
@item 29: option %s was specified twice
@item 30: read error on <%s>
@item 31: expression must be constant
@item 32: initialized data in bss
@item 33: missing end directive in repeat-block
@item 34: #%d is not a valid warning message
@item 35: relocation not allowed
@item 36: illegal escape sequence \%c
@item 37: no current macro to exit
@item 38: internal symbol %s redefined by user
@item 39: illegal relocation
@item 40: label name conflicts with mnemonic
@item 41: label name conflicts with directive
@item 42: division by zero
@item 43: illegal macro argument
@item 44: reloc org is already set
@item 45: reloc org was not set
@item 46: address space overflow
@item 47: bad file-offset argument
@item 48: assertion "%s" failed: %s
@item 49: cannot declare structure within structure
@item 50: no structure
@item 51: instruction has been auto-aligned
@item 52: macro name conflicts with mnemonic
@item 53: macro name conflicts with directive
@item 54: non-relocatable expression in equate <%s>
@item 55: initialized data in offset section
@item 56: illegal structure recursion
@item 57: maximum number of macro recursions (%d) reached
@item 58: data has been auto-aligned
@item 59: register symbol <%s> redefined
@item 60: cannot evaluate constant huge integer expression
@item 61: cannot evaluate floating point expression
@item 62: imported symbol <%s> was not referenced
@item 63: symbol <%s> already defined with %s scope
@item 64: unexpected "else" without "if"
@item 65: unexpected "endif" without "if"
@item 66: maximum if-nesting depth exceeded (%d levels)
@item 67: "endif" missing for conditional block started at %s line %d
@item 68: repeatedly defined symbol <%s>
@item 69: macro <%s> does not exist
@item 70: register <%s> does not exist
@item 71: register symbol <%s> has wrong type
@item 72: cannot mix positional and keyword arguments
@item 73: undefined macro argument name
@item 74: required macro argument %d was left out
@item 75: label <%s> redefined
@end itemize