
			AVA CHANGES
			Uros Platise (c) 1998,1999
			Special thanks to Denis Chertykov.


0.1.3 -> 0.1.4 (8. Januar, 1999)
================================
 * keyword: ds.X is now fixed: storage size can now also
            be given as a set macros

 * public/common symbols are added
            Public macro can now be defined multiple times
            only and only if they completely match.

            An example of usage: 
              #define public __AVR_WRAP_AROUND

            The symbol __AVR_WRAP_AROUND must be put into the
            object file otherwise linker will never get it.
            Usually if more than one source has defined a public
            sym, ava produces error; but in this case not.
            Because __AVR_WRAP_AROUND is defined with the same 
            macro "1".

 * wrap around option added (already included in arch.inc)
            macro: __AVR_WRAP_AROUND

 * BUG FIX: Remarks starting with ; can be now written as:
            #define test;remark, remark, remark

 * BUG FIX: extern virtual symbols now work and also public references
            cross files are now fixed.


0.1.4 -> 0.1.5 (9. Januar, 1999)
================================
 * BUG FIX: "dc.w -1" produced wrong output: "ffffffff" instead "ffff"

 * System macros, can now be declared before arch.inc is loaded.
            Example:
              #define __X1	/* system macros should start with */
              #define __X2      /* two underlines "__" */
            Usage: to redefine segment length as __ERAM_SIZE
              #define AT90S8515 /* at this point, arch.inc is included */

 * BUG FIX: ava is now "friendly" compiled with egcs++ compiler

 * Expressions are now added to #ifdef statements. For example:
             #ifdef A | B
             ...
             #endif
             All symbols that are not defined at the #ifdef statement,
             are taken as zeros.

 * Expression parser is now extended to the following operations:
             a>b, a<b, a==b, a<=b, a>=b
             It returns 1 or 0, depending on condition.
             You can use them anywere where expressions are allowed
             (including the ifdef statements)

             Note: to support above feature, character = has moved
                   from CONTROL group to MATH group (since it was not
                   thought to be a part of expressions at early begining).
            
             I hope I did not miss something: if you find somewhere a 
             somewhat correct notation (as: seg abs=1 flash) but you
             get error at '=' character; this is because = has changed
             its group. (In that case, immediatelly report me an error).

 The following changes were submitted by Denis:
 ----------------------------------------------
 * FILES are now linked in the same order as listed in the command line

 * -e option added to disable reports

 * On return, ava return number of errors (returns zero on success)

 * BUG FIX: ld rX,Z


0.1.5 -> 0.1.6 (15. Januar, 1999)
=================================
 * Listing file -L switch is now specifed to the compiler and to
   the linker any more. To files, which were assembled with -L switch, 
   a listing is generated; other are skipped. (new)

 * Command line parameters are now given in a little bit different form.
   Parameters -DLIl should be written as:
 
	ava -Dmacro_name -Lasm_source -Iinclude_directory -llog_file
  
   	Output file remained the same:

     	ava -o out_file

 * Setting the log file (the -l <log_filename>) multiple times (new)

   	This feature is somehow intented for use with avr-gcc which is by 
   	default run with -e option. If user wants to get the segment 
        information,  he must declare new log file as:

		avr-gcc ....... -Xlinker -lava.log

 * BUG FIX: #ifdef 
     	ava -Dmacro generate "Bad format: macro" report in #ifdef
     	statements. 
 
  * #ifdef <extern_symbol> (new)
	Now you can test the following case:
     
    	extern _idle
    	#ifdef _idle
    	rcall _idle 
    	#endif

    	This features enhances modular programming.

  * arch.inc: Protection of the register and io_space (new)
	All models excluding the AT90S1200 have memory mapped
	register and io_space. It might happen that user forget
	to fill or skip that area (from 0 to 0x5F).
	
	To avoid this problem, two fixed abs and size segments
	are declared (see arch.inc for details).

  * arch.inc: segment: eram.sram (removed)
	It showed up it is useless.


0.1.6 -> 0.1.6.1 (15. Januar, 1999)
===================================
  * BUG FIX: #else
	The following code did not work:
	#ifdef A
	#ifdef B
		clr r0
	#else
		tst r0
	#endif
	#endif

	It produced code for "tst r0". Every #else in the second or higher
	stack level returned wrong result.


0.1.6.1 -> 0.1.7 (18. Januar, 1999)
===================================
  * BUG FIX: expression termination
	The following example did not work: 
		ldi r16,3+123+2		out PORTB,21

	In the case that two or more instructions were in the same line,
	what is often used in macros, expression yawned an error
	"Operator is required before out". Now it is fixed and it only
	yawns that error when expression is not closed as in example:

		 ldi r16,3+(6+2		out PORTB,21

	This is malformed expression and operator should be placed between
	2 and out token.

  * BUG FIX: sortRefs() function cycled when Abstract and Non-Abstract 
	types were used within the same sub-segment.

  * New machanism for output streams is developed (new)
	
  * Empty Segments are now given an absolute address (new)
 	This feature allows you to put the segment size in your code.
	Example:
		
		seg flash.list
		seg flash.list.T

		seg flash.code
		dc.w _flash_list_T - _flash_list

  * Segment Align Option (new)
	With align option, linker checks the sizes of segments and if
	they not much with the align size, it extends them.
	See next item for example.
	By default align equals 1. If another value is specifed all
	childs will use the same allignment. If child has specifed its
	own align size, it must be the same as the parent's one.
	Unless error is produced.

  * Mirror Segments (new)
	You can mirror one segment to another. Only one mirror per
	segment is possible. Mirror segment must be already declared.
	Example:

		seg align=2 flash.data
		seg abstract mirror=flash.data eram.data

	All data from eram.data will be copied from eram.data to flash.data
	This feature is required by GCC.

	Mirror segment can be declared only once. Otherwise, error will
	be produced.

  * For use with Denis avr-gcc, prep program is not needed anymore with new
	crt1.s 


0.1.7 -> 0.1.7.1 (23. Januar, 1999)
===================================
  * FEATURE FIX: Abstract flag is now forwared cross files to the same
    segments. An example:
	
	Segment declared as:	
		seg abstract eram.test

	And in other file:
		seg eram.test

	Was not abstract anymore, since the other segment did not specify
	it.

  * Little (new) and Big Endian (previous format) DC formats
	Keyword "dc.x" defines constant of length x. Now you may also define
	the output format of the dc.x keyword. These are:
	 * big endian (0x1234 is translated in its original form)
         * little endian (0x1234 - bytes are swaped - 0x3412)

        The user may choose which format he wants to use. 
	Examples:
		dc.b	23,21,51	/* normal bytes */
		dc.w	0x1234		/* little endian, output is 0x3412 */
		dc.W	0x1234		/* big endian - output: 0x1234 */
		dc.l	0x12345678	/* little end. - output: 0x78563412 */
		dc.L	0x12345678	/* big endian - output: 0x12345678 */

	This feature was required by the avr-gcc compiler (which requires
	little endian format)

  * FEATURE FIX: ParseMacro() add one space between two tokens
	Space is now added if lxP->stick is false - that means, 
	tokens were seperated in the original source.

  * FEATURE FIX: Removable Mirror Segments
	Even removable segment can now be mirror segment. At least one
	public label must be referenced within the segment and it won't
	be removed.

  * Preprocessor Directive: #arch (new)
	To avoid conflicits with selecting the device, special directive
	"#arch device_name" was added which does excatly the same as 
	the first non-system define.

  * FEATURE FIX: Segment Size can now be redefined to bigger one
	Problem: libgcc and crt1 are compiled with default minimum
	  __ERAM_SIZE values. If users specifes bigger values in target.inc
	  or before #arch directive, linker reported an error.
	
	Solution: if two segments have different sizes, bigger one is
	          used.

	Note: Due to this feature, YOU SHOULD re-assemble crt1.s and
	      libgcc.s files again!

  * FEATURE FIX: Segment warning "Extending segment for x byte" is moved
	to info and is not put to the stderr anymore if -l or -e option
	is specified.

  * Multiple errors are now reported (new)
	When assembler catches syntax error, unrolls the line and
	continues with syntax analyses.


0.1.7.1 -> 0.1.7.2 (24. Januar, 1999)
=====================================
  * New AVR models are added: AT90S*33, AT90S*34 and AT90S*35
  
  * avr.inc has been extensively changed
	avr.inc now selectively include Atmel's AVR definition
	files according to the device selection.
	It also includes some more macros - see: avalib/avr.inc

	Atmel's AVR definition files are provided in
	the "avalib/avr" directory.

	Note: the user should include "avr.inc" only after the 
	      "#arch ..." directive.

  * Some little changes are done to warning and info reports ...


0.1.7.2 -> 0.2 (7. February, 1999)
==================================
  * BUG FIX: mul instruction is moved away from the ATmega families

  * target.inc is now automatically included if -T command line 
    swithc is specified.

  * ava development directory structure a little bit organised and
    installation procedures are included within the Makefiles.

  * some variables were given init values to satisfy c++ compiler
    when executed with -O option

  * BUG FIX: AVR_WRAP_AROUND options removed from AT90S4* models.

  * BUG FIX: #else produced stack error if used out of #ifdef/#endif
    statement

  * NEW: new preproc. directive: #if 			(avr.inc fix)
	This directive now replaces former #ifdef since version 0.1.5. 
        Because of C compatibility, #ifdef checks for presence of symbol
	only and #if evaluates expression. 

	  Note: avr.inc can be also used by GNU C compiler.

	You shall get an error message if ifdef is used in wrong way.

  * NEW: command line option: -p (pipe)
	The AVA can read input from stdin and output to the stdout
	unless output file name is specifed.
	Linker cannot read from stdin but can output to stdout:

		ava test.o -o stdout

	This will do.

  * EXTENDED: macros are now also enabled during PASS2
        This extendes the use of macros - they can be defined anywhere in
        the source.
	Attributes (extern, virtual) now make effect on macros too.
	See documentation for help on usage.

  * NEW: 32 bit CRC Error Detection is added to Object Files
	ava-0.1.7.2 object files are not compatible with 0.2 

  * NEW: 32 bit CRC Error Detection is added to uasm output file.
	The uisp versions 0.1.3 and lower will simply ignore it.

  * NEW: User's Manual is now available in doc directory. :)


0.2 -> 0.2.1 (18. February, 1999)
=================================
  * NEW: command line (cmd) option -v (verbose) added and -e "removed"
	Info messages are now disabled by default. Add -v to enable
	them.
	
	-e option is not removed but does nothing - dummy switch.
	It will be removed far in the future.
	

  * NEW: cmd option -T extended
	Target Def. File may be specified besides the -T switch as:
		-Ttargetfile	example: -Tpsb.inc
 
	(psb = power supply board :))
	The key point of this file is that is parsed before the source
	code.

  * NEW: cmd option -A added
	Declare target device as:	
		-Adevice	example: -AAT90S1200

	Might be useful for different kind of testing.

  * EXTENDED: switch -I extended to files
	If additional file needs to be included temporarly to a source
	use the following syntax:

		-Ifilename

	The file 'filename' will be search in the current directories
	and those on the search list specified by:

		-Idirname

	option.
	The order of the -I switch in the command line does only effect
	on the order these include files are included. Source is processed
	last. 
	
	The target file is always included before include files.

  * NEW: preprocessor directive: #error
	Produces error and prints string followed by the #error directive.
	Example1:
		#ifndef __AGE
		#  error "Macro __AGE is not defined."
		#endif

	Example2:
		#if A==2
		#  error A
		#endif

  * NEW: preprocessor directive: #print
	Prints text numbers and macros ...
	Example:
		#print "A equals: " A

  * EXTENDED: To AVA User's Manual examples are added.
	(and of course, new switches are also documented).

  * BUG FIX (avr.inc): macro mmio was disabled and not enabled if
  	RAM (SRAM or and ERAM) was present.

  * EXTENDED: Macro parameters may be split into several lines.
    	Example1:
    		#define macro_xxx_yyy(
    			long_parameter_1,	/* comment 1 */
    			long_parameter_2	/* comment 2 */
    			)	\
    		   function	
    		
  
0.2.1 -> 0.2.2 (19. February, 1999)
===================================
  * BUG FIX: Segment Fitter
  	Serious problem with absolute segments is fixed.


0.2.2 -> 0.2.3 (2. March, 1999)
===============================
  * NEW: command line option --help added
	Does the same as -h; needed by the GNU C compiler


0.2.3 -> 0.2.4 (12. March, 1999)
================================
  * NEW: AVR-CORE Bug Checking Mechanism
  	Special flag -favr_noskipbug is provided to disable
  	the checking mechanism. 	
	See ava User's Manual for details of this bug.
  	
  * NEW: -f option to declare public macros via the command line
  

0.2.4 -> 0.2.5 (23. March, 1999)
================================
  * BUG FIX: Segment tmp variable was not cleared in the function parse()
  	(Thanks to Nicolas Graffet who has found that strange behaviour.)
  
  * NEW: Out of space report now informs the status of the size of
  	required bytes per segment and available bytes per segment.

