1
0
mirror of https://github.com/fachat/xa65.git synced 2024-06-08 07:29:39 +00:00
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 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 * Add -E commandline option to not stop after 20 errors, but show all
of them. of them.
* Introduce -X compatibility set commandline option, to distinguish * 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, 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. and colons in comments may become the default in a future version.
* Implement CA65 "cheap local labels", ":=" label definitions, * 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). .zeropage, .proc (anonymous only), .endproc, .code, .org, .reloc).
* -U option to allow all undefined labels in relocation mode; this * -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 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. * Main Makefile fixes.
* Fixed parallel make in tests, incorporating a patch from Sergei * Fixed parallel make in tests, incorporating a patch from Sergei
Trofimovich. 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 * Some 2.3.x features still allowed with -XXA23, which is obviously
deprecated. deprecated.
* The quote escape character is now the \ (backslash), except if -XXA23. * The quote escape character is now the \ (backslash), except if -XXA23.
* Recursive /* */ comments are no longer allowed, except if -XXA23. * Recursive /* */ comments are no longer allowed, except if -XXA23.
* XA_MAJOR and XA_MINOR predefined macros, except if -XXA23. * XA_MAJOR and XA_MINOR predefined macros, except if -XXA23.
* Testsuite expanded. * Testsuite greatly expanded.
* Deprecated options (16-bit mvn/mvp argument, -S, -x) finally removed. * The old loader/ testsuite and doc/ archive are now in attic/, which is
If you need this support, you must use 2.3.x. 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 -- André Fachat <afachat@gmx.de> and
-- Cameron Kaiser <ckaiser@floodgap.com> XXX -- 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 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 years. It builds upon the improvements in 2.3.x and its unified 6502/65816
assembler core, removes deprecated features, and adds listing capability, assembler core by adding listing capability, greater flexibility with
greater flexibility with relocatable objects, and greater cross-compatibility relocatable objects, and better cross-compatibility with other popular
with other popular cross-assemblers (notably ca65) because once you use xa, cross-assemblers (notably ca65) because once you use xa, you'll want to keep
you'll want to keep on using it. :) 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 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 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 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 for generating cpk archives) and printcbm (a program for listing Commodore
BASIC test) and file65, ldo65 and reloc65 for displaying, linking and BASIC test, now deprecated as of 2.4) and file65, ldo65 and reloc65 for
relocating o65 files in Andre's relocatable format (see doc/fileformats.txt). displaying, linking and relocating o65 files in Andre's relocatable format.
The loader/ directory also has goodies for managing relocatable binaries.
Don't forget the man pages in man/. Install these into your MANPATH at your 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). 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. These are files that have been superseded and may be removed in the future.
loader/ Rewritten as tests/loader/ 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 Cameron Kaiser

View File

@ -1,4 +1,4 @@
.TH FILE65 "1" "11 April 2006" .TH FILE65 "1" "17 November 2023"
.SH NAME .SH NAME
file65 \- print information for o65 object files 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 .SH NAME
ldo65 \- linker for o65 object files ldo65 \- linker for o65 object files

View File

@ -1,7 +1,17 @@
.TH PRINTCBM "1" "11 April 2006" .TH PRINTCBM "1" "DEPRECATED"
.SH NAME .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 .SH SYNOPSIS
.B printcbm .B printcbm

View File

@ -1,4 +1,4 @@
.TH RELOC65 "1" "11 April 2006" .TH RELOC65 "1" "17 November 2023"
.SH NAME .SH NAME
reloc65 \- relocator for o65 object files 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 .SH NAME
uncpk \- manage c64 cpk archives 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 .SH NAME
xa \- 6502/R65C02/65816 cross-assembler 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. in the next 2.x or 3.x release.
.TP .TP
.B \-M .B \-M
This option is deprecated; use This option is deprecated and will be removed in a future version; use
.B \-XMASM .B \-XMASM
instead. Allows colons to appear in comments for MASM compatibility. This does instead. Allows colons to appear in comments for MASM compatibility. This does
not affect colon interpretation elsewhere, and may become the default in a 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) for those opcodes that support it (i.e., keep as 16 bit word)
.TP .TP
.B @ .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 .B \-w
command-line option, must not specify command-line option, must not specify
.BR \-XCA65 ). .BR \-XCA65 )
.B This is required to specify any
.B 24-bit quantity!
.TP .TP
.B ` .B `
force further optimization, even if the length of the instruction cannot 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, will be inserted into the assembled object. For example,
.B .dsb 5,$10 .B .dsb 5,$10
will insert five bytes, each being 16 decimal, into the object. The arguments 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 .B LINKING
for how to use this pseudo-op to link multiple objects. for how to use this pseudo-op to link multiple objects.
.TP .TP
@ -618,8 +617,10 @@ Inlines a binary file without further interpretation specified by
.B filename .B filename
from offset from offset
.B offset .B offset
to length (relative to the beginning of the file)
.BR length . for
.B length
bytes.
This allows you to insert data such as a previously assembled object file 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 or an image or other binary data structure, inlined directly into this
file's object. If file's object. If
@ -644,7 +645,7 @@ one level deep). Sixteen levels of scoping are permitted.
.IP .IP
.B \.block .B \.block
is accepted as a synonym for is accepted as a synonym for
.BR \&.) , .BR \&.( ,
as well as as well as
.B \.proc .B \.proc
(but you cannot specify an explicit scope name as in (but you cannot specify an explicit scope name as in
@ -657,7 +658,6 @@ Closes a block.
or or
.B .endproc .B .endproc
are accepted as synonyms. are accepted as synonyms.
.
.TP .TP
.B \.as \.al \.xs \.xl .B \.as \.al \.xs \.xl
Only relevant in 65816 mode (with the 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 done so with an
.B #include .B #include
directive (see 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 .LP
The following pseudo-ops apply primarily to relocatable The following pseudo-ops apply primarily to relocatable
.B .o65 .B .o65
objects. objects.
A full discussion of the relocatable format is beyond the A full discussion of the relocatable format is beyond the
scope of this manpage. Documentation scope of this manpage; see
on the proposed v1.2 format is in .B http://www.6502.org/users/andre/o65/
.B doc/fileformat.txt for the most current specification.
within the
.B xa
installation directory.
.TP .TP
.B .text .data .bss .zero .B .text .data .bss .zero
These pseudo-ops switch between the different segments, These pseudo-ops switch between the different segments,
@ -743,7 +754,7 @@ being uninitialized zero page space for allocation. In
and and
.BR .zero , .BR .zero ,
only labels are evaluated. These pseudo-ops only labels are evaluated. These pseudo-ops
are valid in relative and absolute modes. are valid in relocating and absolute modes.
.TP .TP
.B .code .B .code
For 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 Aligns the current segment to a byte boundary (2, 4 or 256) as specified by
.B .B
value 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. generate an error.
.TP .TP
.B .fopt type, value1, value2, value3, ... .B .fopt type, value1, value2, value3, ...
@ -941,12 +952,6 @@ satisfied, then the source code between the directive and its terminating
.B #endif .B #endif
are expunged and not assembled. Up to fifteen levels of nesting are supported. are expunged and not assembled. Up to fifteen levels of nesting are supported.
.TP .TP
.B #endif
Closes a conditional block.
.TP
.B #else
Implements alternate path for a conditional block.
.TP
.B #ifdef DEFINE .B #ifdef DEFINE
True only if macro True only if macro
.B DEFINE .B DEFINE
@ -977,6 +982,12 @@ is defined
.I and .I and
assigned with a value. assigned with a value.
.I This works on labels, not macros! .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 .LP
Unclosed conditional blocks at the end of included files generate warnings; Unclosed conditional blocks at the end of included files generate warnings;
unclosed conditional blocks at the end of assembly generate an error. 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 is not recommended; to discourage this, the assembler will complain about its
use in addressing mode situations where no ambiguity exists, such as indirect use in addressing mode situations where no ambiguity exists, such as indirect
indexed, branching and so on. 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" .SH "SEE ALSO"
.BR file65 (1), .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, (C)1989-2023 Andre Fachat, Jolse Maginnis, David Weinehall,
Cameron Kaiser. The official maintainer is Cameron Kaiser. Cameron Kaiser. The official maintainer is Cameron Kaiser.
.SH 30 YEARS OF XA .SH OVER 30 YEARS OF XA
Yay us? Yay us?
.SH WEBSITE .SH WEBSITE

View File

@ -46,6 +46,8 @@ void usage(FILE *fp)
fprintf(fp, fprintf(fp,
"Usage: %s [OPTION]... [FILE]...\n" "Usage: %s [OPTION]... [FILE]...\n"
"List CBM BASIC programs\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" "\n"
" --version output version information and exit\n" " --version output version information and exit\n"
" --help display this help 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 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 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 You can run specific tests from the main source directory with
unless 'make test' fails. If you do, use harness:
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,... ./harness -cc=... -cflags=... -make=... -tests=testdir,testdir,testdir,...
If -tests is omitted, all tests are run. If -tests is omitted, all tests are run.
Don't run the makefiles directly, if they exist; they may not work properly. 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 If a Makefile is not present, then the test harness assembles "test.s" and
compares it with "ok". compares it with "ok".
@ -52,6 +58,7 @@ recucom/ Recursive comments test
aserror/ Tests of .assert and #error syntax/function aserror/ Tests of .assert and #error syntax/function
loader/ Old ../loader tests, moved into test suite proper loader/ Old ../loader tests, moved into test suite proper
reset_segment/ Verifies conditions under which a segment is reset reset_segment/ Verifies conditions under which a segment is reset
expando/ Test of preprocessor expansion (thanks Tom Hargreaves)
Cameron Kaiser, André Fachat 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 CFLAGS = $cflags
MAKE = $make MAKE = $make
MAKEFLAGS = $makeflags MAKEFLAGS = $makeflags
tests to run: $dtests
EOF EOF
# Get a list of all directories. If there is a Makefile there, do it. # 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). # Otherwise, do nothing (acknowledge and ignore directories we don't grok).
opendir(D, ".") || die("test harness failed: $!\n"); opendir(D, ".") || die("test harness failed: $!\n");
W: while($x = readdir(D)) { while($x = readdir(D)) {
next W if ($x =~ /^\./); next if ($x =~ /^\./ || $x =~ /\s/);
next W if (length($tests) && ($tests !~ /$x/)); 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)); next W if (!chdir($x));
$x = substr($x . " " . ("." x 79), 0, 50); $x = substr($x . " " . ("." x 79), 0, 50);
print STDOUT "$x > "; print STDOUT "$x > ";
@ -69,7 +84,6 @@ W: while($x = readdir(D)) {
} }
chdir(".."); chdir("..");
} }
closedir(D);
print STDOUT "=" x 79, "\n"; print STDOUT "=" x 79, "\n";
if ($ntests) { # ntestacy is a terrible thing if ($ntests) { # ntestacy is a terrible thing
print STDOUT "\n## ALL SELECTED TESTS PASS ($dtests, n=$ntests) ##\n"; print STDOUT "\n## ALL SELECTED TESTS PASS ($dtests, n=$ntests) ##\n";