Recent ZBasic Compiler Revision History

v2.1.0 - 22 February 2007
-------------------------
- Added support for the ZX-1281, ZX-128e and ZX-1281e.

- Added support for Option RamSize, Option HeapSize and Option ExtRamConfig.

- Fixed an unusual code generation problem where code was omitted that
  initialized a variable but the value was later used.


v2.0.0 - 24 January 2007
-------------------------
- Added support for PWM generation routines.

- Added support for CRC16() and CRC32().

- Added support for SizeOfU(), like SizeOf() but returning UnsignedInteger.

- Added support for new X-10 functions that operate in the background.

- Added support for an optional fourth parameter to InputCapture() as the timeout value.

- Added support for TaskIsValid().

- Added the MidWord() function.

- Added support for MemCopy() as a synonym for BlockMove() but with parameters in a different order.
  Also, added MemCmp() and BitCopy().

- Added GetProgMem/PutProgMem as synonyms for GetEEPROM/PutEEPROM.

- Added compile-time validation of Comm port values for some built-in procedures.

- Added support for embedding arbitrary characters in the initialization data
  for ProgMem item strings.

- Added support for ProgMem structures as well as ordinary and Based ProgMem variables.

- Added support for a Persistent modifier for data definitions.  This allows
  a broader range of Persistent types to be defined.

- Modified the structure of the tables generated for StringVectorData and
  StringTableData for compatibility with other bounded string types.

- Added support for ByteAlign attribute for variables.

- Added support for Persistent structures and Based Persistent variables.

- Added support for arrays of PersistentString and BoundedString.

- Added support for defining a function that returns a structure.

- Modified the Alias syntax to allow a host to be specified without array indices.

- Added code to allow a reference to an array to be made with an empty index list.

- Improved the code generated for a For loop when the step value is +/- 1.

- Added detection of, and an error message for, the case where statically
  allocated variables consume all available User RAM.

- Changed Register.PersistentStart, Register.PersistentSize and Register.RamStart
  to be constant types, allowing them to be used in constant expressions.

- Added busy flags for the other timers on the processor, e.g. Register.Timer0Busy and Register.Timer2Busy.

- Modified the PortBit() function to be able to convert a pin number to an encoded port/bit value.

- Modified the code to to allow use of the .DataAddress property on sub-byte data items if
  they are Aliases of integral byte types but only if there are no index expressions given.

- Added minimum firmware version information to the listing and map files.

- Introduced some new names to refer to the target device:
     Option TargetDevice    replaces     Option TargetCPU
	 Option.TargetDevice    replaces     Option.TargetCPU
	 --target-device=       replaces     --target-CPU=

  In all cases, the replaced syntax is still supported but deprecated.

- Fixed an optimization problem that occurs when passing literal strings to CStr().

- Fixed a problem in the conditional expression parser when encountering an
  unbalanced left parenthesis.

- Corrected an error in the estimated task stack size - it did not include the task control block size.

- Fixed an optimization error relating to Based variables.

- Fixed an optimization error relating to expressions containing Const values.

- Fixed an optimization problem relating to function return values.

- Fixed an internal error that occurred with functions returning an Enum

- Fixed a problem with #define within a false conditional being processed as if
  it were in a true conditional.

- Fixed problems in the code generation for structure comparison.


v1.4.3 - 30 October 2006
-------------------------
- Added a built-in string constant Option.CPUType.

- Added support for Register.PersistentStart, Register.PersistentSize
  and Register.PersistentUsed.

- Fixed a code generation problem for parameters that are arrays of Strings.

- Fixed an incorrect warning about duplicate cases involving strings
  differing only in alphabetic case and a related optimization problem
  for string expressions with relational operators.


v1.4.2 - 18 October 2006
-------------------------
- Added support for bootloading user code.


v1.4.1 - 17 October 2006
-------------------------
- Fixed a code generation problem where not all of the elements of an array of
  structures got initialized properly.  This was only an issue for structures
  that contained String members.


v1.4.0 - 16 October 2006
-------------------------
- Added support for Oak Micros' ZX-24e and ZX-24ae.

- Added the ability to invoke tasks with parameters.

- Added support for specifying a task's stack by giving its address.

- Added code to output the target device in the .zxb file.  This allows the
  downloader to detect a mismatch between the generated code and the target.

- Added built-in constants Pin.RedLED and Pin.GreenLED for the applicable devices.

- Improved the code optimization to reduce or eliminate successive type conversions.

- Changed to allow Based and Alias variables to be declared as arrays without
  specifying the dimensions.

- Fixed a problem with missing temp variables for strings being passed to
  system functions that are implemented in "user code".

- Fixed a problem with code generation for exponentiation.  Added an optimization for 2^x.

- Fixed some problems with using an enumeration as a structure member.  Also, added
  detection for attempting to use different enumeration types in an equality test.

- Fixed a code generation problem that would occur with an Exit Do inside a Case
  with no statments following the Do.


v1.3.2 - 07 September 2006
-------------------------
- Fixed an internal error that would occur when encountering code that increments or
  decrements a Single variable, e.g. f = f + 1.0 and equivalent variations.


v1.3.0 - 21 August 2006
-------------------------
- Added Right() and Left() string functions.

- Added the ability for WaitForInterrupt() to await an analog comparator interrupt.

- Added compile-time parameter validation for WaitForInterrupt().

- Fixed an error in resolving enumeration member names.

- Fixed an optimization error where assignments inside an If statement
  were sometimes erroneously being deemed useless.

- Fixed a code generation error that caused integral exponentiation results to be
  truncated rather than rounded.
