ZBasic Virtual Machine Revision History v2.3.0 - 26 August 2007 ------------------------- - Added support for the ZX-1280. - Added support for integral string-to-value conversion (to support ValueI and ValueL). - Added a check for writing beyond the end of Persistent Memory. - Added code to deselect the external EEPROM before going into sleep mode, allowing lower power draw during sleep. - Added some stub ISRs that may be useful for awakening from sleep modes. - Corrected a problem writing to Program Memory. - Fixed a problem in the software UART code that occurred when the receive queue was full. - Fixed a problem where StatusCom() did not return the correct value for Com1 until OpenCom() was called the first time for channel 1. - Fixed a problem where interrupts were re-enabled too early - before the setup for WaitForInterrupt() had been completed. - Corrected a problem with the setup for INT3-7. - Fixed a problem where the "timer busy" flag did not get reset when the last of channels Com3 to Com6 was closed. This caused subsequent calls to OpenCom() to fail. v2.1.0 - 22 February 2007 ------------------------- - Added support for the ZX-1281, ZX-128e, ZX-1281e - Added an API for entering the command mode. - Fixed a problem in GetPin() where the pullup was sometimes deactivated. v2.0.0 - 24 January 2007 ------------------------- - Implemented improvements in the VM to reduce instruction execution time. The maximum instruction speed is now 185K ips for mega32-based devices and 175K ips for mega644-based devices. - Added support for CRC computations. - Modified the SW UART to support 8-bit plus parity and to optionally strip the parity bit. Also, added support for different width and parity modes on the HW UART. These capabilities are not supported on the mega32-based devices. - Added support for the ParityCheck() function. - Added support for MemCmp() and BitCopy(); the latter is not available on the mega32. - Added support for new X-10 functions that operate in the background (except for the mega32). - Added support for a timeout parameter to InputCapture(). Also, the InputCapture() data array is initialized to the value 0xfffe before running. - Added support for additional PutPin() modes - toggle and pulse. - Added support for ShiftIn() sampling relative to the trailing clock edge. - Added support for IsTaskValid(). - Modified the EEPROM writing code to only write a particular address if the data is changing. - Added support for Register.Timer0Busy and Register.Timer2Busy. Related to this, modified OpenCom() to fail if the UART timer is busy. - Added support for PWM functions. - Added support for PortBit(). - Added constants for Persistent sizes. - Added support for bootloading user code from an SPI device. - Initial changes to support DTR-less downloading. - Modified the task management code to defer changing the task state to HALTED until the task control block is removed from the task list. - Added support for host queries of EEPROM data. - Fixed a problem in strToFloat() that accepted an arbitrary character following trailing whitespace. - Fixed a problem in OutputCapture() where the Timer1Busy flag would be left asserted if a zero data count or zero repeat count were specified. v1.4.0 - 16 October 2006 ------------------------- - Added support for invoking tasks with parameters. - Fixed an interaction problem with multiple active WaitForInterrupt() invocations. v1.3.0 - 21 August 2006 ------------------------- - Changed the RAM organization. The string heap has been moved to User RAM which has increased in size to 1.5K on the mega32-based ZX models. - Added support for awaiting an analog comparator interrupt using WaitForInterrupt. - Added support for Register.FaultData2. This will contain the instruction pointer address when a stack fault is detected. - Fixed a problem with the software I2C implementation that was introduced when support for a 16-bit count was added. Channel 0 is unaffected. - Corrected an error in the implementation of ShiftIn() that rendered it incompatible with BasicX. It now samples the input after the leading edge of the clock pulse. - Modified the firmware update procedure so that it does not toggle I/O lines for the ZX-40 and ZX-44. v1.2.0 - 04 May 2006 ------------------------- - Added support for GetDayNumber(), GetDayOfYear(), GetQueueStr(), StrCompare(), StrFind(), Register.CPUFrequency and Register.RTCTickFrequency. - Added support for extended versions of DefineCom(), GetDate(), GetDayOfWeek(), I2CCmd(), SPICmd(), X10Cmd(). - Modified X10Cmd() so that it outputs burst signals at the zero crossing only. It no longer outputs burst signals for the other two phases of a three-phase system. - Modified the "Identify" command to also return the size and CRC of the last program downloaded. This requires the use of compiler version v1.1.21 or later. - Added code to erase the protection bits in the EEPROM before attempting to download a program. This only affects the ZX-40 and ZX-44 being used with EEPROMs that had been previously used in other applications. - Modified the handling of the RTC tick so that it is rolled over whenever a value greater than the maximum daily value is detected. - Fixed an error in the implementation of PeekQueueData() that potentially would result in incorrect data being returned. - Fixed a potential problem in the implementation of CPUSleep(). v1.1.6 - 19 March 2006 ------------------------- - Fixed an error in the implementation of inverted mode for COM3-COM6. - Register.ResetFlags wasn't being set properly at boot time. Also, the reset flags in Register.MCUCSR weren't being cleared at boot time. - Fixed a problem with run-time generated strings used as the selection expression in a Select Case. v1.1.5 - 22 February 2006 ------------------------- - Modified the pin table for the ZX-40 to make PortD bits 0 and 1 invalid (TxD, RxD). - Corrected a problem with Mid() when used on the left hand side of an expression. The length limiting logic was not implemented properly. - Corrected a problem with IIf() when used with certain string operands. If the second of the two operands was selected and it was the result of an expression evaluation, it was inadvertently freed. v1.1.2 - 02 January 2006 ------------------------- - Fixed an error in the implementation of Long and UnsignedLong multiplication. - Added support for minimum version confirmation during downloading. - Added support for the RunTask() system library routine. v1.1.0 - 13 December 2005 ------------------------- - Added support for SetBits() and ToggleBits() library routines. - Added support for other types of EEPROM. This is only useful with the ZX-40. If a non-standard device is used, the ZX must be configured for it. See the -z option of the ZLoad command. - Fixed a problem in I2CCmd() that would occur if no data was written. The data read was not returned properly. - Fixed a problem where 0^N did not produce the correct result. v1.0.2 - 06 December 2005 ------------------------- - Corrected a problem with handling assignments to fixed-length strings. v1.0.0 - 18 November 2005 ------------------------- - First public release.