xa-2.1.0 * Rewrite of command line option handling to better look like usual (cc) options. * Removed ^M from all files. * Removed all external declarations to header files, and made all static functions static. | Now compiles almost without warning with 'gcc -W -Wall'. -- André Fachat 31 Oct, 1996 xa-2.1.0a * Introduced concept of code relocation. Now each label being set to the program counter is a 'pointer', that gets an entry in a relocation table. Simple arithmetic operations are allowed. The relocation table is still just printed unsortedly. -- André Fachat 31 Oct, 1996 xa-2.1.0b * Produces some preliminary kind of relocatable file, including header etc. Problems -- relocation table does as if file is assembled for address 0. Need a) a better way to set program counter. b) pseudo opcodes for distinguishing segments. c) a way to temporarily disable relocation. d) a way to include extra headers and options into the file. -- André Fachat 31 Oct, 1996 * Assembler now produces a relocatable file format, as described in the file ``fileformat.txt''. Temporarily disabling relocation is with the ``*=value'' directive, while switching back to relocation mode goes with ``*='' (without value). New pseudo opcodes ``.text'', ``.data'', ``.bss'', ``.zero'' switch between the segments. -- André Fachat 02 Nov, 1996 xa-2.1.0e * There was a bug in the arithmetic routine that had set all pointer to the text segment, if something was added. * There also was a bug in the loader when actually using options. * A new pseudo opcode was added -- ``.fopt''. | Works like ``.byte'', but puts these bytes in a file option. | The length in the file option is automagically set. ``.fopt'' | may appear anywhere in the file, but it should be at the | beginning | (might be mandatory in a later version). -- André Fachat 06 Nov, 1996 xa-2.1.0f * Added a command line switch ``-M'' to ignore colons in a comment after a semicolon. * Without it, a colon separates complete mnemonics, including the semicolon comment. | Well, actually this switch is a ``MASM'' compatibility switch, and will surely be expanded someday, when I get more info on MASM. * Now ``*'' and ``='' can be separated for the definition of the program counter and ``.byte'' is also accepted. This makes it more MASM compatible. ".end" is ignored. Still missing is ``.include''. -- André Fachat 11 Nov, 1996 xa-2.1.0g * Started working on ``official'' o65 fileformat. If there are no undefined labels, and no relocated code is embedded in absolute code, the thing should work. -- André Fachat 21 Dec, 1996 xa-2.1.1 * ``.dsb'' now has an _optional_ parameter ``fillbyte''. * Undefined references are now put into the relocation table (i.e. handled correctly) if the ``-c'' option is given. * The file format conforms to o65 version 1 file format. * Embedding absolute in relocatable code and vice versa is buggy... -- André Fachat 21 Dec, 1996 xa-2.1.1a * Embedding absolute code in relocatable seems to work now. -- André Fachat 21 Dec, 1996 xa-2.1.1e * The option to embed relocatable code in absolute code has been dropped. Therefore the command line options ``-A'' (make it romable), ``-b?'' (set segment start addresses), and ``-G'' (omit exported globals from file) have been added. * Internally, the whole thing has been made dynamic; except for the preprocessor (and the storage between pass1 and pass2), everything uses dynamically allocated tables. m_alloc, which had been introduced long time ago because of the buggy malloc on the Atari ST is gone now! -- André Fachat 22 Dec, 1996 xa-2.1.1f * Added the ``-a'' and ``-A'' options to file65, so that it can now print the start addresses for following files in the ROM when making romable code. * Added shell (bash) script ``mkrom.sh'' that assembles a given list of files and builds a ROMable file. The first two bytes are single linked list pointers, and then comes the file. -- André Fachat 02 Jan, 1997 xa-2.1.1g * Added the file ``reloc65'', to relocate o65 files without reassembling them. * Fixed quite some bugs in xa (segment numbering in the globals list and switched low/high byte relocation entry type in relocation table. Now conforms to documentation, i.e. fileformat.txt) -- André Fachat 03 Jan, 1997 xa-2.1.2 * Added ``ld65'', a simple linker for o65 files. * Another bug in xa fixed now. -- André Fachat 04 Jan, 1997 xa-2.1.3 * Allows to use ``.data'' etc in absolute mode, too. No relocation entries are generated then. Segment start can be set with ``-b?'' command line options, though. Also the data segment is discarded with this method! This allows to use the normal ``.data'' etc syntax even when assembling a ROM (which is done in absolute mode.) * Fixed a bug where ``.dsb'' in a data segment didn't fill with the right value -- André Fachat 25 Mar, 1997 xa-2.1.3e * Added preprocessor continuation lines, and .block and .bend pseudo-opcodes (They map to ``.('' and ``.)'' respectively.) -- André Fachat 27 Jul, 1997 xa-2.1.4 * Do not leave output file around after an error -- this is better for ``make''. * Also it seems to have settled for a while, so I can release a new version. -- André Fachat 11 Sep, 1997 xa-2.1.4c * Fixed a nasty bug that prevented correct relocation table entries when a ``label2=label1'' contruct was used and ``label2'' was accessed. * Added ``-I'' option. -- André Fachat 30 Dec, 1997 xa-2.1.4d * fixed align code. Now inserts NOP opcodes into text segment, and sets file mode appropriately. -- André Fachat 26 Jan, 1998 xa-2.1.4e * Changed o65 fileformat and adopted it in xa. -- André Fachat 26 Jan, 1998 xa-2.1.4g * Fix handling of !zeropageaddress, that was broken (did not result in absolute address, but gave error message.) * Add cross reference list to labels if switched on on command line. * Fix the filename when multiple files are given on the command line (used to give the first filename for all errors in second pass.) -- André Fachat 25 Nov, 1998 xa-2.1.4h * In file65 added support for undefined labels and globals, also for (some known) file options. * Fix a preprocessor bug. -- André Fachat 12 Dec, 1998 xa-2.2.0-p1-1 * Update COPYING to the latest version (Y2K-fixed + new address to GNU) * Lots of fixes to the Makefiles * Cleaned up the structure of the TODO file * Added manual-pages for file65, ld65, printcbm, reloc65, uncpk, and xa * Commented out LIB-flags -lm, -lcurses and -ltermcap, since they are all unused * Added `--help' and `--version' to all binaries * Removed `-h', `-?' and `-v' options where applicable * Created a file containing the version-function; version.h * Moved common macros to a separate file; xad.h * Restructuring of printcbm to become more readable * Added ifndef/define/endif traps to all header-files * Fixed a few typos * Renamed romadr to romaddr * Renamed all functions matching *such* to *search* * Fixed all warnings * Cleaned up all header-files * Reformatted xa.log -- David Weinehall 20 Aug, 2002 xa-2.3.0 * Version number jump for all the unofficial xa's out there * Fixed addressing bugs for @, ! and completed 65816 merge Thanks to David for the report * Moderate legibility overhaul to xat.c (will continue on this) * More compiler warnings corrected Thanks to David for the report * man files completed * Documentation updated * Last line bug corrected (where last line not assembled if no newline) Thanks to silverdr for the report * ld65 is now ldo65 to avoid conflicts with cc65 package * Post-defined labels work better, or at least somewhat (no longer attempts to optimize in pass 2 and generate bad code). Can be forced with ` Thanks to silverdr for the report * Makefile bugs multiplied * @ now mostly obligatory for 24-bit addressing -- Cameron Kaiser 2 Apr, 2006 xa-2.3.2 * Introduced switch to convert values in quotes to different character sets. Currently supported are ASCII (default) and PETSCII * Fixed some quote bugs -- André Fachat 23 Dec, 2006 Thomas Giesel's reports and suggestions, thank you: * -M works on colons in comments and nowhere else, as documented * macro function arguments are properly recursively evaluated * cpp output now grokked for more complex pre-parsing, rather than reinvent the wheel Other things: * .xl, .xs, .al, .as weren't documented, and now they are (always worked) for 65816 mode * ! for forward-defined labels calculated wrong instruction length, fixed * xap.c cleaned up some, xat.c cleaned up some more Legibility work is going to be a long-term project. * -x is now deprecated * Documentation updated -- Cameron Kaiser 13 Jan, 2007 xa-2.3.3 * Compatibility update for Microsoft Visual Studio and mingw/MSYS (thanks Fabian Nunez and Mikkel Holm Olsen). -- Cameron Kaiser 15 May, 2007 xa-2.3.4 * -p to define alternate synonym for # for preprocessor to avoid cpp/xa preprocessor clashes and messes. * Direct linking into output stream of binary files (.bin). * Minor overhaul of error system to facilitate future expansion. * Documentation updated. -- Cameron Kaiser 1 July, 2008 xa-2.3.5 Most of this was suggested by Martin Wendt. * Fixed bug where .bin was affected by the current character set. * Added PETSCREEN and HIGH character sets. * Added .aasc. * Some more legibility work. * Documentation updated. -- Cameron Kaiser 7 February, 2009 xa-2.3.6 * 'make test' for regression testing framework (requires Perl). * Changed getline() to xa_getline() to avoid collision with glibc 2.10+ * Fixed compile problems with misc/. * Fixed message offsets. -- Cameron Kaiser 11 July 2014 xa-2.3.7 * Fixed buffer overflow and test failure with gcc 4.9 (thanks Adam Sampson). * mvn and mvp now use the standard syntax (thanks Alessandro Gatti). * Copyright message is no longer put in the error log to simplify testing. * Makefile properly triggers a relink for testing or source changes. * Spurious messages quelled. * Documentation updated. * Testsuite expanded. -- Cameron Kaiser 29 December 2014 xa-2.3.8 * Fixed issue with colons in string literals being treated as separators (thanks Simon Rowe). * Testsuite expanded. -- Cameron Kaiser 29 June 2017 xa-2.3.9 * Fixed issue on Windows and DOS systems with the .bin pseudo-op (thanks Bago Zonde). * Documentation updated. * Testsuite expanded. * For the thirty year anniversary of xa, we're changing the name to xxxa. (Just kidding.) -- Cameron Kaiser 31 January 2019 xa-2.3.10 * Three fixes, all from Andre: - Don't crash if a useless segment is referenced outside of relocating mode (thanks Laszlo Barath for the report). - Don't substitute within strings, for better cpp compatibility (thanks Glenn Holmer for the report). I added the -S option for backwards compatibility for the old behaviour; it will be removed in 2.4 and later. - Fix underflow issue if a variable is late-bound (with -L) when that variable is used in computations with negative offsets. * Deprecated options will be removed in 2.4 and everything is warned. * Documentation updated. * Testsuite expanded. -- Cameron Kaiser 9 November 2019 xa-2.3.11 * Compilation fix for gcc 10 (thanks Dan Horak). * Allow pointer arithmetic in relocating mode within the same segment, since the result is segmentless (thanks Andre for the report). * .dsb with negative quantities shouldn't work (thanks Andre for the report). * Stop a divide-by-zero floating point exception (thanks Frederic Cambus). * Testsuite expanded. -- Cameron Kaiser 4 May 2020 xa-2.3.12 * Regression fix for address size validation in 65816 mode (thanks Sam Falvo; we had a pending fix for this but I like his test case). * Testsuite expanded. -- Cameron Kaiser 26 November 2021 xa-2.3.13 * Fix // and /* */ in quoted strings. Incredible no one ever hit this before (thanks ZornsLemma). * Segfault fixes for file65, reloc65 and xa. Remember, kids, if you ever run xa as root all kittens will die. Please save the kittens (thanks Stephen Kitt). * Just compare to null in the preprocessor (thanks Bas Wassink). * Testsuite expanded. -- Cameron Kaiser 25 March 2022 xa-2.3.14 * Fix a segfault when a recursive macro has a smaller arity than the macro it references (thanks Emil Johansson for the report). * Fix for recursive comments, which was a regression from 2.3.13 (note: this may be reexamined for 2.4), and some improvements to the comment parser to fix more edge cases. (Andre) * Now you can just do 'make test TESTS=test,test,test' instead of running ./tests/harness with specific options. ('make test' by itself of course still works fine to run the whole suite.) * Testsuite expanded. -- Cameron Kaiser 7 February 2023 xa-2.4.0 * 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 between MASM and CA65 compatibility options; also adds C option for 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, .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 specify one at a time with -L). * Globals may also be specified manually with -g. * #error allows preprocessor-level assertions. * .assert allows assembler-level assertions. * Better fix for segfault with smaller arity macro issue. * 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 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 and -- Cameron Kaiser , 18 November, 2023 xa 2.4.1 * Allow colon-based unnamed labels to be used separately of CA65 mode (such as with 65816) with -a. Implies -XMASM. * Restore ^ syntax for generating control sequences (e.g., "^m^j" evaluates as 0d 0a) with -k. * Fix a bug using cheap local labels in expressions. * Properly tag and match CPU types in o65 objects during relocation and linking. * Fix a bug with .align when aligning segments. * Better validation of arguments to indexed opcodes. * Testsuite expanded. -- André Fachat and -- Cameron Kaiser , 5 March, 2024