ZBasic Virtual Machine Revision History v3.0.5 - 02 February 2011 ------------------------- - Corrected a problem ValueI() where, if passed a temporary string, the string wasn't being freed. This problem does not exist in the mega32-based devices so the update is not needed for them. v3.0.4 - 10 May 2010 ------------------------- - Corrected a problem with the software UART inverted mode introduced in v3.0.0. This problem does not exist in the mega32-based devices so there is no update for them. v3.0.3 - 01 March 2010 ------------------------- - Corrected a problem with VM update introduced recently. The problem only affects devices having more than 64K of Flash memory (e.g. ZX-1281, ZX-1280). For the affected devices having VM v3.0 through v3.0.2, updating the VM will require using the "emergency update" mode. v3.0.2 - 25 February 2010 ------------------------- - Corrected a problem in CloseCom() that could result in an infinite loop. v3.0.1 - 22 February 2010 ------------------------- - Corrected a problem in InputCapture() where some input segments equal to or slightly longer than the timer full-count period would be stored as a small value. The corrected code now stores such segments as an overflow. Also, an input segment having the length of &Hfffe units (the "no data" value) is now stored as an overflow. v3.0.0 - 01 February 2010 ------------------------- - Added support for ZBasic Object Extensions - Added support for serial channel flow control. - Added support for MemFind() and ProgMemFind(). - Modified StatusCom() to return a bit indicating a SW UART channel. - Corrected a problem where the task status did not get updated properly when a task is suspended waiting for InputCapture or OutputCapture. - Modified defineCom() so that invocation with the 'stopBits' parameter larger than the maximum results in 1 stop bit, matching the documentation. v2.7.0 - 08 April 2009 ------------------------- - Added support for pattern searches via SearchQueue(). - Added support for half duplex and bussed Tx line in the software UART. v2.6.6 - 21 March 2009 ------------------------- - Added a VM instruction for indirect calling through a ProgMem dispatch table. - Added support for GetDayNumber(year, month, day). - Added support for active high chip select in OpenSPI() and SPICmd(). - Corrected a string corruption problem that would occur if an allocated string variable is assigned to itself. - Corrected an error in the implementation of Boolean negation. v2.6.3 - 19 November 2008 ------------------------- - Corrected a problem with the string-to-value routines (e.g. ValueS(), ValueI()) where, if passed a temporary string, the string wasn't being freed. - Corrected a potential interrupt timing error in the GetMicroTime() implementation. - Relaxed the ATN reset timing to allow it to work with some virtual COM drivers. v2.6.2 - 03 November 2008 ------------------------- - Modified OpenCom() to first close the specified channel. - Corrected a few problems with conversion between day numbers and year/month/day. v2.6.1 - 03 October 2008 ------------------------- - Added support for higher resolution timing routines (but not for mega32-based devices). - Corrected a problem in the mega32-based devices where I2CCmd() did not work correctly. v2.6.0 - 15 September 2008 ------------------------- - Added support for System.HeapHeadRoom, PortMask(), Register.Port(), and 8-bit PWM routines. - Added code to prevent writes to Com channel receive queues and reads from Com channel transmit queues. v2.5.1 - 26 June 2008 ------------------------- - Corrected a problem with the low level X-10 functions (OpenX10(), etc.) v2.5.0 - 16 June 2008 ------------------------- - Added support for enabling and disabling interrupts and updating the RTC. - Added support for GetQueueSpace(). - Added support for setting the heap limit. - Added support for a fourth parameter on CmdSPI() regulating receive timing. - Removed the limit on heap allocation size. - For most devices, the ZVM is now built using the ZX Library. v2.3.1 - 13 April 2008 ------------------------- - Added support for the ZX-24pe. - Corrected a problem in the PWM timer programming. - Corrected a problem in the code for terminating capture in devices with timers 3, 4 and 5. - Fixed a problem in float-to-string conversion where the value 0.002 came out as 1.1e-3. - Corrected a problem where DefineCom() on Com1 didn't work. 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.