This commit is contained in:
Andre Fachat 2023-11-14 21:32:35 +01:00
parent 4efdd2a59a
commit f1799614fc
23 changed files with 141 additions and 68 deletions

View File

@ -399,7 +399,8 @@ xa-2.3.14
xa-2.4.0
* Listing feature in plain text or HTML.
* Listing feature in plain text or HTML, along with .listbytes to control
how hex bytes get listed in the output.
* Add -E commandline option to not stop after 20 errors, but show all
of them.
* Introduce -X compatibility set commandline option, to distinguish
@ -407,7 +408,7 @@ xa-2.4.0
0x and 0 to specify hex or octal. As a result, -M is now deprecated,
and colons in comments may become the default in a future version.
* Implement CA65 "cheap local labels", ":=" label definitions,
and various pseudo opcodes (.include, .import, .importzp,
and various pseudo-opcodes (.include, .import, .importzp,
.zeropage, .proc (anonymous only), .endproc, .code, .org, .reloc).
* -U option to allow all undefined labels in relocation mode; this
allows exporting them to an o65 file and link at a later time (or
@ -419,15 +420,21 @@ xa-2.4.0
* Main Makefile fixes.
* Fixed parallel make in tests, incorporating a patch from Sergei
Trofimovich.
* Added a test case that failed in 2.3.14 from Tom Hargreaves.
* Some 2.3.x features still allowed with -XXA23, which is obviously
deprecated.
* The quote escape character is now the \ (backslash), except if -XXA23.
* Recursive /* */ comments are no longer allowed, except if -XXA23.
* XA_MAJOR and XA_MINOR predefined macros, except if -XXA23.
* Testsuite expanded.
* Deprecated options (16-bit mvn/mvp argument, -S, -x) finally removed.
If you need this support, you must use 2.3.x.
* Testsuite greatly expanded.
* The old loader/ testsuite and doc/ archive are now in attic/, which is
the repository for old unsupported components. It may be purged in a
future version.
* -M is now deprecated (use -XMASM), just in case you forgot.
* printcbm(1) is now deprecated (use VICE petcat, it does a lot more).
* Previously deprecated options (16-bit mvn/mvp argument, -S, -x) finally
removed. If you need this support, you must use 2.3.x.
-- André Fachat <afachat@gmx.de> 13 October, 2023
-- Cameron Kaiser <ckaiser@floodgap.com> XXX
-- André Fachat <afachat@gmx.de> and
-- Cameron Kaiser <ckaiser@floodgap.com>, 17 November, 2023

View File

@ -5,10 +5,18 @@ under most ANSI C compilers. It is distributed under the GNU Public License
The current version is 2.4.0, the first new feature release literally in
years. It builds upon the improvements in 2.3.x and its unified 6502/65816
assembler core, removes deprecated features, and adds listing capability,
greater flexibility with relocatable objects, and greater cross-compatibility
with other popular cross-assemblers (notably ca65) because once you use xa,
you'll want to keep on using it. :)
assembler core by adding listing capability, greater flexibility with
relocatable objects, and better cross-compatibility with other popular
cross-assemblers (notably ca65) because once you use xa, you'll want to keep
on using it. :)
Certain long-deprecated options and non-standard syntaxes have also been
removed in this release, so it is possible some very old code may not
assemble without errors. These changes have been a long time coming and we
gave lots of warnings, so if you require these features and cannot change
your code to work without them, you must use xa 2.3.14. Fortunately, most
code should continue to work just fine and the test suite is even bigger to
catch these sorts of regressions.
To install on a generic Unixy thing, you should be able to just type
@ -19,9 +27,8 @@ To install on a generic Unixy thing, you should be able to just type
This will create xa along with its various support utilities. Try assembling
the cpk depacker in examples/ as a test. xa also comes with uncpk (a program
for generating cpk archives) and printcbm (a program for listing Commodore
BASIC test) and file65, ldo65 and reloc65 for displaying, linking and
relocating o65 files in Andre's relocatable format (see doc/fileformats.txt).
The loader/ directory also has goodies for managing relocatable binaries.
BASIC test, now deprecated as of 2.4) and file65, ldo65 and reloc65 for
displaying, linking and relocating o65 files in Andre's relocatable format.
Don't forget the man pages in man/. Install these into your MANPATH at your
leisure, or read them with nroff -man (and/or groff -man).

View File

@ -1,4 +1,6 @@
These are files that have been superseded and may be removed in the future.
loader/ Rewritten as tests/loader/
doc/ Replaced by man/
(for o65, see http://www.6502.org/users/andre/o65/ )

View File

@ -1,3 +1,3 @@
Also look at ../doc/ for previous documentation files and the Change log.
Also look at ../attic/doc/ for previous documentation files.
Cameron Kaiser

View File

@ -1,4 +1,4 @@
.TH FILE65 "1" "11 April 2006"
.TH FILE65 "1" "17 November 2023"
.SH NAME
file65 \- print information for o65 object files

View File

@ -1,4 +1,4 @@
.TH LDO65 "1" "11 April 2006"
.TH LDO65 "1" "17 November 2023"
.SH NAME
ldo65 \- linker for o65 object files

View File

@ -1,7 +1,17 @@
.TH PRINTCBM "1" "11 April 2006"
.TH PRINTCBM "1" "DEPRECATED"
.SH NAME
printcbm \- list a Commodore BASIC file
printcbm \- list a Commodore BASIC file (DEPRECATED)
.SH NOTICE
As of
.B xa
2.4,
.B printcbm
is deprecated and will be removed in a future version. Please consider
migrating your usage to VICE
.BR petcat(1) ,
which has many more options.
.SH SYNOPSIS
.B printcbm

View File

@ -1,4 +1,4 @@
.TH RELOC65 "1" "11 April 2006"
.TH RELOC65 "1" "17 November 2023"
.SH NAME
reloc65 \- relocator for o65 object files

View File

@ -1,4 +1,4 @@
.TH UNCPK "1" "11 April 2006"
.TH UNCPK "1" "17 November 2023"
.SH NAME
uncpk \- manage c64 cpk archives

View File

@ -1,4 +1,4 @@
.TH XA "1" "24 November 2021"
.TH XA "1" "17 November 2023"
.SH NAME
xa \- 6502/R65C02/65816 cross-assembler
@ -125,7 +125,7 @@ preprocessor macros. This option is inherently deprecated and may be removed
in the next 2.x or 3.x release.
.TP
.B \-M
This option is deprecated; use
This option is deprecated and will be removed in a future version; use
.B \-XMASM
instead. Allows colons to appear in comments for MASM compatibility. This does
not affect colon interpretation elsewhere, and may become the default in a
@ -480,12 +480,10 @@ or zero page value, do not attempt to optimize to a zero page argument
for those opcodes that support it (i.e., keep as 16 bit word)
.TP
.B @
render as 24-bit quantity for 65816 (must specify
render as 24-bit quantity for 65816, even if smaller than 24 bits (must specify
.B \-w
command-line option, must not specify
.BR \-XCA65 ).
.B This is required to specify any
.B 24-bit quantity!
.BR \-XCA65 )
.TP
.B `
force further optimization, even if the length of the instruction cannot
@ -609,7 +607,8 @@ repetitions of
will be inserted into the assembled object. For example,
.B .dsb 5,$10
will insert five bytes, each being 16 decimal, into the object. The arguments
may be expressions. See
may be expressions. If only a single argument is provided, then the argument
is treated as a number of null bytes to insert. See
.B LINKING
for how to use this pseudo-op to link multiple objects.
.TP
@ -618,8 +617,10 @@ Inlines a binary file without further interpretation specified by
.B filename
from offset
.B offset
to length
.BR length .
(relative to the beginning of the file)
for
.B length
bytes.
This allows you to insert data such as a previously assembled object file
or an image or other binary data structure, inlined directly into this
file's object. If
@ -644,7 +645,7 @@ one level deep). Sixteen levels of scoping are permitted.
.IP
.B \.block
is accepted as a synonym for
.BR \&.) ,
.BR \&.( ,
as well as
.B \.proc
(but you cannot specify an explicit scope name as in
@ -657,7 +658,6 @@ Closes a block.
or
.B .endproc
are accepted as synonyms.
.
.TP
.B \.as \.al \.xs \.xl
Only relevant in 65816 mode (with the
@ -715,19 +715,30 @@ Includes another file in place of the pseudo-op, as if the preprocessor had
done so with an
.B #include
directive (see
.BR PREPROCESSOR ).
.BR PREPROCESSOR ),
but at the assembler
phase after preprocessing has already occurred.
.LP
The following pseudo-op applies to listing mode.
.TP
.B \.listbytes number
In the listing output, sets the maximum number of hex bytes to be printed
in the listing for pseudo-ops like
.BR .byt ,
by default 8. The special argument
.B unlimited
sets no upper limit. If listing mode is disabled, this pseudo-op has no
observable effect.
.LP
The following pseudo-ops apply primarily to relocatable
.B .o65
objects.
A full discussion of the relocatable format is beyond the
scope of this manpage. Documentation
on the proposed v1.2 format is in
.B doc/fileformat.txt
within the
.B xa
installation directory.
scope of this manpage; see
.B http://www.6502.org/users/andre/o65/
for the most current specification.
.TP
.B .text .data .bss .zero
These pseudo-ops switch between the different segments,
@ -743,7 +754,7 @@ being uninitialized zero page space for allocation. In
and
.BR .zero ,
only labels are evaluated. These pseudo-ops
are valid in relative and absolute modes.
are valid in relocating and absolute modes.
.TP
.B .code
For
@ -761,7 +772,7 @@ compatibility, this is currently mapped to
Aligns the current segment to a byte boundary (2, 4 or 256) as specified by
.B
value
(and places it in the header when relative mode is enabled). Other values
(and places it in the header when relocating mode is enabled). Other values
generate an error.
.TP
.B .fopt type, value1, value2, value3, ...
@ -941,12 +952,6 @@ satisfied, then the source code between the directive and its terminating
.B #endif
are expunged and not assembled. Up to fifteen levels of nesting are supported.
.TP
.B #endif
Closes a conditional block.
.TP
.B #else
Implements alternate path for a conditional block.
.TP
.B #ifdef DEFINE
True only if macro
.B DEFINE
@ -977,6 +982,12 @@ is defined
.I and
assigned with a value.
.I This works on labels, not macros!
.TP
.B #else
Implements alternate path for a conditional block.
.TP
.B #endif
Closes a conditional block.
.LP
Unclosed conditional blocks at the end of included files generate warnings;
unclosed conditional blocks at the end of assembly generate an error.
@ -1160,17 +1171,6 @@ Indiscriminately forcing the issue can be fraught with peril, however, and
is not recommended; to discourage this, the assembler will complain about its
use in addressing mode situations where no ambiguity exists, such as indirect
indexed, branching and so on.
.LP
Also, as a further consequence of the way optimization is managed, we repeat
that
.B all
24-bit quantities and labels that reference a 24-bit quantity in 65816 mode,
anteriorly declared or otherwise,
.B MUST
be prepended with the
.B @
prefix. Otherwise, the assembler will attempt to optimize to 16 bits, which
may be undesirable.
.SH "SEE ALSO"
.BR file65 (1),
@ -1188,7 +1188,7 @@ Original xa package (C)1989-1997 Andre Fachat. Additional changes
(C)1989-2023 Andre Fachat, Jolse Maginnis, David Weinehall,
Cameron Kaiser. The official maintainer is Cameron Kaiser.
.SH 30 YEARS OF XA
.SH OVER 30 YEARS OF XA
Yay us?
.SH WEBSITE

View File

@ -46,6 +46,8 @@ void usage(FILE *fp)
fprintf(fp,
"Usage: %s [OPTION]... [FILE]...\n"
"List CBM BASIC programs\n"
"This tool is deprecated as of xa 2.4 and will be removed in a future version.\n"
"Please consider migrating to VICE petcat, which has many more options.\n"
"\n"
" --version output version information and exit\n"
" --help display this help and exit\n",

View File

@ -1,13 +1,19 @@
This is a directory of test suites for complex or pathological cases that
have been repaired (?) in the current version. It is primarily for internal
testing, but is here for your interest.
testing, but is here for your interest. It requires a reasonably compatible
`make` and Perl.
Starting with 2.3.6, you should not normally need to run these directly
unless 'make test' fails. If you do, use harness:
You can run specific tests from the main source directory with
make test TESTS=test,test,test,...
or, if `make test` doesn't work right on your system, you can run the Perl
harness directly:
./harness -cc=... -cflags=... -make=... -tests=testdir,testdir,testdir,...
If -tests is omitted, all tests are run.
Don't run the makefiles directly, if they exist; they may not work properly.
If a Makefile is not present, then the test harness assembles "test.s" and
compares it with "ok".
@ -52,6 +58,7 @@ recucom/ Recursive comments test
aserror/ Tests of .assert and #error syntax/function
loader/ Old ../loader tests, moved into test suite proper
reset_segment/ Verifies conditions under which a segment is reset
expando/ Test of preprocessor expansion (thanks Tom Hargreaves)
Cameron Kaiser, André Fachat

1
xa/tests/expando/ok Normal file
View File

@ -0,0 +1 @@


23
xa/tests/expando/test.s Normal file
View File

@ -0,0 +1,23 @@
PBI=6
#define NIB(x) PBI+((x&1)>>0), \
PBI+((x&2)>>1), \
PBI+((x&4)>>2), \
PBI+((x&8)>>3)
tab0
.byt NIB(10),NIB(12),NIB(0), NIB(0)
.byt NIB(10),NIB(12),NIB(15),NIB(0)
.byt NIB(10),NIB(12),NIB(0), NIB(15)
.byt NIB(10),NIB(12),NIB(15),NIB(15)
; oh well.
tab1
.byt PBI+0,PBI+1,PBI+0,PBI+1,PBI+0,PBI+0,PBI+1,PBI+1
.byt PBI+0,PBI+0,PBI+0,PBI+0,PBI+0,PBI+0,PBI+0,PBI+0
.byt PBI+0,PBI+1,PBI+0,PBI+1,PBI+0,PBI+0,PBI+1,PBI+1
.byt PBI+1,PBI+1,PBI+1,PBI+1,PBI+0,PBI+0,PBI+0,PBI+0
.byt PBI+0,PBI+1,PBI+0,PBI+1,PBI+0,PBI+0,PBI+1,PBI+1
.byt PBI+0,PBI+0,PBI+0,PBI+0,PBI+1,PBI+1,PBI+1,PBI+1
.byt PBI+0,PBI+1,PBI+0,PBI+1,PBI+0,PBI+0,PBI+1,PBI+1
.byt PBI+1,PBI+1,PBI+1,PBI+1,PBI+1,PBI+1,PBI+1,PBI+1

View File

@ -27,8 +27,6 @@ CC = $cc
CFLAGS = $cflags
MAKE = $make
MAKEFLAGS = $makeflags
tests to run: $dtests
EOF
# Get a list of all directories. If there is a Makefile there, do it.
@ -36,9 +34,26 @@ EOF
# Otherwise, do nothing (acknowledge and ignore directories we don't grok).
opendir(D, ".") || die("test harness failed: $!\n");
W: while($x = readdir(D)) {
next W if ($x =~ /^\./);
next W if (length($tests) && ($tests !~ /$x/));
while($x = readdir(D)) {
next if ($x =~ /^\./ || $x =~ /\s/);
next if (length($tests) && ($tests !~ /$x/));
next if (! -d $x);
if (-r "$x/Makefile") {
push(@mtests, $x);
} else {
push(@stests, $x);
}
}
closedir(D);
@tests = ();
push(@tests, sort @mtests) if (scalar(@mtests));
push(@tests, sort @stests) if (scalar(@stests));
print "matching tests: ";
print join(",", @tests);
print "\n\n";
W: foreach $x (@tests) {
next W if (!chdir($x));
$x = substr($x . " " . ("." x 79), 0, 50);
print STDOUT "$x > ";
@ -69,7 +84,6 @@ W: while($x = readdir(D)) {
}
chdir("..");
}
closedir(D);
print STDOUT "=" x 79, "\n";
if ($ntests) { # ntestacy is a terrible thing
print STDOUT "\n## ALL SELECTED TESTS PASS ($dtests, n=$ntests) ##\n";