mirror of
https://github.com/pfusik/xasm.git
synced 2025-02-20 11:29:04 +00:00
xasm 3.1.0 release.
This commit is contained in:
parent
389f7446e0
commit
5970a93423
@ -81,8 +81,7 @@ a project as described in the `Makefile`. You can find my Makefiles in
|
|||||||
Download
|
Download
|
||||||
--------
|
--------
|
||||||
|
|
||||||
A release is coming soon.
|
[xasm 3.1.0](https://github.com/pfusik/xasm/releases) for Windows, OS X, Ubuntu and Fedora.
|
||||||
Meanwhile you can download Windows binaries from the [old website](http://xasm.atari.org/).
|
|
||||||
|
|
||||||
Links
|
Links
|
||||||
-----
|
-----
|
||||||
|
2
debian/changelog
vendored
2
debian/changelog
vendored
@ -2,4 +2,4 @@ xasm (3.1.0-1) UNRELEASED; urgency=low
|
|||||||
|
|
||||||
* First deb packaging.
|
* First deb packaging.
|
||||||
|
|
||||||
-- Piotr Fusik <fox@scene.pl> Wed, 11 Jun 2014 10:46:15 +0200
|
-- Piotr Fusik <fox@scene.pl> Sun, 20 Jul 2014 19:08:15 +0200
|
||||||
|
98
xasm.1.txt
98
xasm.1.txt
@ -44,11 +44,11 @@ is 'SOURCE_FILE' with the extension changed to `.lst`.
|
|||||||
[[new_makefile]]*/M*::
|
[[new_makefile]]*/M*::
|
||||||
Prints a rule for use in a `Makefile`.
|
Prints a rule for use in a `Makefile`.
|
||||||
First line of the rule lists 'OBJECT_FILE' as the target of the rule
|
First line of the rule lists 'OBJECT_FILE' as the target of the rule
|
||||||
and all source files (including the ones specified by `icl` and `ins` directives)
|
and all source files (including the ones specified with `icl` and `ins` directives)
|
||||||
as dependencies. The second line contains the command line with `OBJECT_FILE`
|
as dependencies. The second line contains the command line with `OBJECT_FILE`
|
||||||
replaced by the *make* macro `$@` and `SOURCE_FILE` replaced by the macro `$<`.
|
replaced by the *make* macro `$@` and `SOURCE_FILE` replaced by the macro `$<`.
|
||||||
Dollars in the command line are doubled.
|
Dollars in the command line are doubled.
|
||||||
Your `make` or shell may require more escaping.
|
Your `make` or shell may require further escaping.
|
||||||
|
|
||||||
*/o*':OBJECT_FILE'::
|
*/o*':OBJECT_FILE'::
|
||||||
Sets output file name.
|
Sets output file name.
|
||||||
@ -58,11 +58,11 @@ The default is 'SOURCE_FILE' with the extension changed to `.obx`.
|
|||||||
Prints absolute paths in listing and error messages.
|
Prints absolute paths in listing and error messages.
|
||||||
|
|
||||||
[[new_quiet]]*/q*::
|
[[new_quiet]]*/q*::
|
||||||
Quiet mode. Prevents *xasm* from printing the logo and the summary.
|
Quiet mode. Prevents *xasm* from printing its banner and compilation summary.
|
||||||
|
|
||||||
*/t*'[:LABEL_FILE]'::
|
*/t*'[:LABEL_FILE]'::
|
||||||
Generates label table.
|
Generates label table.
|
||||||
If 'LABEL_FILE' is omitted then the table is appended to the listing.
|
If 'LABEL_FILE' is omitted then the table is appended at the end of the listing.
|
||||||
|
|
||||||
[[new_unlabels]]*/u*::
|
[[new_unlabels]]*/u*::
|
||||||
Issues a warning message for each label whose value is unused.
|
Issues a warning message for each label whose value is unused.
|
||||||
@ -91,7 +91,7 @@ You define a label by putting its name at the beginning of a line
|
|||||||
The label will be assigned the current value of the 'origin counter'
|
The label will be assigned the current value of the 'origin counter'
|
||||||
(i.e. the address of the compiled instruction),
|
(i.e. the address of the compiled instruction),
|
||||||
unless you use it with the `EQU` directive where it is assigned
|
unless you use it with the `EQU` directive where it is assigned
|
||||||
the value of the argument.
|
the value of the `EQU` argument.
|
||||||
|
|
||||||
Instructions and directives must be preceded with some whitespace.
|
Instructions and directives must be preceded with some whitespace.
|
||||||
Without leading whitespace they are treated as label names.
|
Without leading whitespace they are treated as label names.
|
||||||
@ -103,7 +103,7 @@ is a 6502 instruction, whereas
|
|||||||
----
|
----
|
||||||
nop
|
nop
|
||||||
----
|
----
|
||||||
defines a label called `nop`.
|
(without leading space) defines a label called `nop`.
|
||||||
|
|
||||||
Whole-line comments must start with a semicolon, an asterisk or a pipe,
|
Whole-line comments must start with a semicolon, an asterisk or a pipe,
|
||||||
with optional label definition and spaces before.
|
with optional label definition and spaces before.
|
||||||
@ -120,12 +120,12 @@ To assemble a single line several times,
|
|||||||
precede the repeat count with a colon, for example:
|
precede the repeat count with a colon, for example:
|
||||||
-----------------
|
-----------------
|
||||||
:4 asl @
|
:4 asl @
|
||||||
table :32*5 dta 5
|
mask_lookup :32 dta $80,$40,$20,$10,8,4,2,1
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
In lines with instructions or directives, a comment starts immediately
|
In lines with instructions or directives, a comment starts immediately
|
||||||
after the instruction/directive has been successfully parsed.
|
after the instruction/directive has been successfully parsed.
|
||||||
That is, in these lines *xasm* does not require a special character
|
That is, in such lines *xasm* does not require a special character
|
||||||
to start a comment.
|
to start a comment.
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
lda foo ; this is a comment
|
lda foo ; this is a comment
|
||||||
@ -134,7 +134,7 @@ to start a comment.
|
|||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
|
|
||||||
[[new_pairing]]
|
[[new_pairing]]
|
||||||
You may put two instructions in one line so they share the operand.
|
You may put two instructions in one line so they share their operand.
|
||||||
For example:
|
For example:
|
||||||
------------
|
------------
|
||||||
eor:sta foo
|
eor:sta foo
|
||||||
@ -227,7 +227,7 @@ The following 'binary operators' are supported:
|
|||||||
[[new_unary]]
|
[[new_unary]]
|
||||||
The following 'unary operators' are supported:
|
The following 'unary operators' are supported:
|
||||||
|
|
||||||
- `+` Plus (does nothing)
|
- `+` Plus (no operation)
|
||||||
- `-` Minus (changes the sign)
|
- `-` Minus (changes the sign)
|
||||||
- `~` Bitwise NOT (complements all bits)
|
- `~` Bitwise NOT (complements all bits)
|
||||||
- `!` Logical NOT (changes true to false and vice versa)
|
- `!` Logical NOT (changes true to false and vice versa)
|
||||||
@ -245,8 +245,8 @@ The operator precedence is following:
|
|||||||
- `&&` (binary)
|
- `&&` (binary)
|
||||||
- last: `||` (binary)
|
- last: `||` (binary)
|
||||||
|
|
||||||
Although the operators are similar to those used in C, C++ and Java,
|
NOTE: Although the operators are similar to those used in C, C++ and Java,
|
||||||
their priorities are different than in these languages.
|
their priorities are different.
|
||||||
|
|
||||||
Compare and logical operators assume that zero is false and a non-zero
|
Compare and logical operators assume that zero is false and a non-zero
|
||||||
is true. They return 1 for true.
|
is true. They return 1 for true.
|
||||||
@ -268,7 +268,7 @@ here equ *
|
|||||||
|
|
||||||
[[new_opt]]*OPT* - set assembler options::
|
[[new_opt]]*OPT* - set assembler options::
|
||||||
|
|
||||||
Five options are available:
|
Six options are available:
|
||||||
|
|
||||||
- `F` - fill the space between memory areas with `$FF`
|
- `F` - fill the space between memory areas with `$FF`
|
||||||
- `G` - Atari 5200 mode for hardware register abbreviations
|
- `G` - Atari 5200 mode for hardware register abbreviations
|
||||||
@ -312,7 +312,7 @@ of uninitialized data (label is assigned with `*`
|
|||||||
before the `ORG` directive is executed).
|
before the `ORG` directive is executed).
|
||||||
+
|
+
|
||||||
[[new_orgr]]Starting with version 2.6.0, *xasm* supports code
|
[[new_orgr]]Starting with version 2.6.0, *xasm* supports code
|
||||||
that is relocated in the memory at runtime. Let's say you want your code
|
that is relocated at run time. Let's say you want your code
|
||||||
to be located on page zero. You can't normally load it directly into this
|
to be located on page zero. You can't normally load it directly into this
|
||||||
place, so you load it at a different address and then move in your program.
|
place, so you load it at a different address and then move in your program.
|
||||||
`org r:` changes the address that it used for code generation
|
`org r:` changes the address that it used for code generation
|
||||||
@ -333,9 +333,8 @@ code_length equ *-code_zpage
|
|||||||
--------------------------------------
|
--------------------------------------
|
||||||
+
|
+
|
||||||
Note that both `*` and label definitions use the counter used
|
Note that both `*` and label definitions use the counter used
|
||||||
for code generation. There is no direct access to the other counter,
|
for code generation. There is no direct access to the other counter.
|
||||||
because I think this is not useful. If you really need it, you can
|
You can only calculate it:
|
||||||
always type something like:
|
|
||||||
+
|
+
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
where_am_i equ *-code_zpage+code_loaded
|
where_am_i equ *-code_zpage+code_loaded
|
||||||
@ -354,17 +353,17 @@ where_am_i equ *-code_zpage+code_loaded
|
|||||||
You may enter many expressions in parentheses and combine different types
|
You may enter many expressions in parentheses and combine different types
|
||||||
of data in single line, separating things with commas.
|
of data in single line, separating things with commas.
|
||||||
|
|
||||||
You may also define a sine lookup table. The syntax is:
|
You may also build a sine lookup table. The syntax is:
|
||||||
-------------------------------
|
-------------------------------
|
||||||
sin(center,amp,size,first,last)
|
sin(center,amp,period,first,last)
|
||||||
-------------------------------
|
-------------------------------
|
||||||
where:
|
where:
|
||||||
|
|
||||||
* `center` is an integer which is added to every sine value
|
* `center` is an integer which is added to every sine value
|
||||||
* `amp` is the sine amplitude
|
* `amp` is the sine amplitude
|
||||||
* `size` is the sine period
|
* `period` is the number of values per sine period
|
||||||
* `first,last` define the range of sine arguments.
|
* `first,last` define the range of sine arguments.
|
||||||
They are optional. The default are `0,size-1`.
|
They are optional. The default are `0,period-1`.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
----------------------------
|
----------------------------
|
||||||
@ -415,12 +414,12 @@ This way your sources will compile under Windows and Linux.
|
|||||||
*END* - end assembling file::
|
*END* - end assembling file::
|
||||||
|
|
||||||
May be used if the source file ends with something which shouldn't
|
May be used if the source file ends with something which shouldn't
|
||||||
be read by *xasm* (e.g. your notes). At the end of file it's optional.
|
be read by *xasm* (e.g. your notes).
|
||||||
|
|
||||||
*INS* - insert contents of file::
|
*INS* - insert contents of file::
|
||||||
|
|
||||||
Copies every byte of the specified file into the object file and updates
|
Copies every byte of the specified file into the object file and updates
|
||||||
the origin counter, as if these bytes were defined with `DTA`.
|
the origin counter, as if these bytes were written using `DTA`.
|
||||||
You may specify a range of the file to insert. The syntax is:
|
You may specify a range of the file to insert. The syntax is:
|
||||||
+
|
+
|
||||||
-----------------------------
|
-----------------------------
|
||||||
@ -456,7 +455,7 @@ is equivalent to:
|
|||||||
Example:
|
Example:
|
||||||
+
|
+
|
||||||
------------
|
------------
|
||||||
ini showpic
|
ini showloadingpic
|
||||||
------------
|
------------
|
||||||
|
|
||||||
*ERT* - generate error if expression evaluates to true::
|
*ERT* - generate error if expression evaluates to true::
|
||||||
@ -491,7 +490,7 @@ widescr equ 1
|
|||||||
sta $22f
|
sta $22f
|
||||||
-------------
|
-------------
|
||||||
+
|
+
|
||||||
NOTE: the above example may be rewritten using the 'repeat line' feature:
|
NOTE: The above example may be rewritten using the 'repeat line' feature:
|
||||||
+
|
+
|
||||||
--------------------------
|
--------------------------
|
||||||
noscr equ 1
|
noscr equ 1
|
||||||
@ -506,14 +505,14 @@ PSEUDO COMMANDS
|
|||||||
---------------
|
---------------
|
||||||
'Pseudo commands' are built-in macros. There are no user-defined macros in *xasm*.
|
'Pseudo commands' are built-in macros. There are no user-defined macros in *xasm*.
|
||||||
|
|
||||||
*ADD* - addition without carry::
|
*ADD* - add without carry::
|
||||||
|
|
||||||
If you have ever programmed a 6502, you must have noticed that you had
|
If you have ever programmed a 6502, you must have noticed that you had
|
||||||
to use a `CLC` before `ADC` for every simple addition.
|
to use a `CLC` before `ADC` for every simple addition.
|
||||||
+
|
+
|
||||||
*xasm* can do it for you. `ADD` replaces two instructions: `CLC` and `ADC`.
|
*xasm* can do it for you. `ADD` replaces two instructions: `CLC` and `ADC`.
|
||||||
|
|
||||||
*SUB* - subtraction::
|
*SUB* - subtract::
|
||||||
|
|
||||||
It is `SEC` and `SBC`.
|
It is `SEC` and `SBC`.
|
||||||
|
|
||||||
@ -555,7 +554,7 @@ Example:
|
|||||||
+
|
+
|
||||||
In the above example the 16-bit variable `ptr` is incremented by 40.
|
In the above example the 16-bit variable `ptr` is incremented by 40.
|
||||||
|
|
||||||
*JCC, JCS, JEQ, JMI, JNE, JPL, JVC, JVS* - conditional jumps::
|
*JCC, JCS, JEQ, JMI, JNE, JPL, JVC, JVS* - conditional jump::
|
||||||
|
|
||||||
These are long branches. While standard branches (such as `BNE`)
|
These are long branches. While standard branches (such as `BNE`)
|
||||||
have range of -128..+127, these jumps have range of 64 kB.
|
have range of -128..+127, these jumps have range of 64 kB.
|
||||||
@ -600,30 +599,30 @@ and substitutes two commands:
|
|||||||
|
|
||||||
[[new_mwinde]]*MWA, MWX, MWY* - move word using accumulator, X or Y::
|
[[new_mwinde]]*MWA, MWX, MWY* - move word using accumulator, X or Y::
|
||||||
|
|
||||||
These pseudo commands require two operands and are combinations of two `MV*`'s:
|
These pseudo commands require two operands and are combinations of two `MVA`/`MVX`/`MWY`:
|
||||||
one to move the low byte, and the other to move the high byte.
|
one to move the low byte, and the other to move the high byte.
|
||||||
You can't use indirect nor pseudo addressing mode with `MW*`.
|
You can't use indirect nor pseudo addressing mode with `MWA`/`MWX`/`MWY`.
|
||||||
Destination must be an absolute address, optionally indexed.
|
Destination must be an absolute or zeropage address, optionally indexed.
|
||||||
When source is also an absolute address, an `mw* source dest` expands to:
|
When source is also an absolute or zeropage address, an `mwa source dest` expands to:
|
||||||
+
|
+
|
||||||
--------------------
|
--------------------
|
||||||
mv* source dest
|
mva source dest
|
||||||
mv* source+1 dest+1
|
mva source+1 dest+1
|
||||||
--------------------
|
--------------------
|
||||||
+
|
+
|
||||||
When source is an immediate value, an `mw* #immed dest` expands to:
|
When source is an immediate value, an `mwa #immed dest` expands to:
|
||||||
+
|
+
|
||||||
------------------
|
------------------
|
||||||
mv* <immed dest
|
mva <immed dest
|
||||||
mv* >immed dest+1
|
mva >immed dest+1
|
||||||
------------------
|
------------------
|
||||||
+
|
+
|
||||||
When `<immed` equals `>immed` and `immed` is not forward-referenced,
|
When `<immed` equals `>immed` and `immed` is not forward-referenced,
|
||||||
*xasm* skips the second `LD*`:
|
*xasm* skips the second `LDA`, generating the following code:
|
||||||
+
|
+
|
||||||
----------------
|
----------------
|
||||||
mv* <immed dest
|
mva <immed dest
|
||||||
st* dest+1
|
sta dest+1
|
||||||
----------------
|
----------------
|
||||||
+
|
+
|
||||||
If possible, `MWX` and `MWY` use increment/decrement commands.
|
If possible, `MWX` and `MWY` use increment/decrement commands.
|
||||||
@ -687,11 +686,24 @@ and pseudo commands, except for `MWA`, `MWX` and `MWY`:
|
|||||||
HISTORY
|
HISTORY
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
Version 3.1.0 (2014-07-20)
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
- OS X, Ubuntu and Fedora distributions
|
||||||
|
- `INS` can be repeated (suggested by Marek Pavlik) and taken "opcode" of
|
||||||
|
- `OPT U-` disables <<new_unlabels,*/u*>> unused label warnings
|
||||||
|
(suggested by Marek Pavlik)
|
||||||
|
- if the file to be included cannot be open, report error in the `ICL` line
|
||||||
|
(suggested by Peter Dell)
|
||||||
|
- removed duplicate filenames for <<new_makefile,*/M*>>
|
||||||
|
- implemented <<new_fullpaths,*/p*>> outside Windows
|
||||||
|
- source code updated from D1 to D2
|
||||||
|
- project moved to GitHub
|
||||||
|
|
||||||
Version 3.0.2 (2009-10-17)
|
Version 3.0.2 (2009-10-17)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- fixed "Branch out of range" error message - was overstated by 256 bytes
|
- fixed "Branch out of range" error message - was overstated by 256 bytes
|
||||||
for backward branches
|
for backward branches
|
||||||
- <<new_makefile,new command-line option */M* prints Makefile rule>>
|
- <<new_makefile,new command-line option */M* prints a Makefile rule>>
|
||||||
- command-line options are now case-insensitive
|
- command-line options are now case-insensitive
|
||||||
- on Windows error messages are printed in red, warnings in yellow
|
- on Windows error messages are printed in red, warnings in yellow
|
||||||
|
|
||||||
@ -704,7 +716,7 @@ Version 3.0.1 (2007-04-22)
|
|||||||
Version 3.0.0 (2005-05-22)
|
Version 3.0.0 (2005-05-22)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
- rewritten from the x86 assembly language to the
|
- rewritten from the x86 assembly language to the
|
||||||
http://www.digitalmars.com/d[D programming language] - Linux version
|
http://dlang.org/[D programming language] - Linux version
|
||||||
is now available and DOS is no longer supported
|
is now available and DOS is no longer supported
|
||||||
- no limits for line length, number of `ICLs`, `ORGs`,`IFTs` and labels
|
- no limits for line length, number of `ICLs`, `ORGs`,`IFTs` and labels
|
||||||
- Unix-style command-line options are supported
|
- Unix-style command-line options are supported
|
||||||
@ -863,4 +875,4 @@ Piotr Fusik <fox@scene.pl>
|
|||||||
SEE ALSO
|
SEE ALSO
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Website: http://xasm.atari.org[]
|
Website: https://github.com/pfusik/xasm[]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user