Release notes Vesta Basic 8.0

Welcome to Vesta Technology Inc.
Single Board Computers for the 21st Century
07/01/2002

Copyright 1998-2002  Vesta Technology


Thank you for purchasing the Vesta Basic Integrated Development Environment. 
This file contains release history information for the MC2000-077, SBC2000-074, 
MC2000-074 and SBC2000-062. Descriptions refer to both hardware and software 
problems, fixes, and features. This is because Vesta Basic on these boards is 
inseparable from the hardware.

The major release numbers (before the decimal point) refer to differences in 
the code for the Basic engine on the SBC2000. Minor release numbers (after 
the decimal point) refer to changes which do not affect the Basic runtime 
engine on the SBC2000.


07/01/2002 Release Notes (Rev 7.4)

New features in this release:

The IDE now supports compiler directives in program source code. If there 
is a mismatch between the compiler option(s) set in the source code and the 
IDE settings, the IDE will inform you of the mismatch so that you can change 
one or the other to correct the situation. Compiler options have the form:

	REM COMPILER_OPTION option

where the REM appears at the start of a line, with one space between it and 
the word COMPILER_OPTION, and one space between COMPILER_OPTION and the option 
itself. Allowed options are DEBUG, NODEBUG, 062, 074, and 077.

Bugs and problems fixed in this release:

   - The MC2000-077 now correctly addresses variables "spilled" to stack space.
   - LCD_DISPLAY() now works correctly on the MC2000-077.
   - Parity now works correctly on the MC2000-077 DEV port.

Known bugs and problems:

On the SBC2000-074 and SBC2000-062, HIBERNATE() will not work reliably beyond 
about 4 minutes; the system will wake up before time has expired without a wakeup 
event. If you need to hibernate for longer periods, it must be done in a series 
of shorter hibernations. The MC2000-077 does not have this problem. The only way 
to tell whether HIBERNATE() has exited because the time has elapsed or because of 
an interrupt is to check the system time before and after the call to HIBERNATE().
If you use long lines and/or a narrow IDE window, individual lines can wrap to a 
second or third line on the display. The IDE counts these as separate lines; the 
compiler does not. This means that the control-L function of the IDE (to report 
the line number) can report a different number for a line than the compiler. This 
does not affect the highlighting of lines by the IDE for single-stepping and animation.
On the SBC2000-062, holding down certain key combinations on the keypad will 
interfere with output to the LCD.

If you have a print statement where there is a missing comma between the arguments, 
the compiler may list the error as occurring on a different line. The following 
line shows an example which will cause the problem:

	PRINT x "string literal"

Due to the limits of number representation, you cannot use 32767 or -32768 as the 
final value of a FOR..NEXT loop. Also, if you use an increment which goes beyond 
the limiting value and causes a wrap from positive to negative or vice-versa, the 
loop will not terminate properly. As an example, the following loop will never 
terminate (because the loop index 'x' never reaches 32766 exactly, and the next 
value reached beyond it is -32768, which is less than 32766):

	GLOBAL x AS INTEGER
	FOR x = 32760 TO 32766 STEP 4
		PRINT x, "\009"
	NEXT


05/22/2002 Release Notes (Rev 7.3)

New features in this release:

Support for the MC2000-077 board has been added. Note that due to differences between 
the boards, some applications that use internal RAM locations defined by the runtime 
engine (such as the CALENDAR.TXT example) will not run correctly on the MC2000-077.

Compiler code generation has been improved for some constructs. The generated code 
can be slightly shorter and faster.

The report produced by View | Program Info has been reworked to be more understandable.


Bugs and problems fixed in this release:

BYTE constants can now be used as array indices.

RESTORE will no longer overwrite the first two bytes of global RAM.


Known bugs and problems:

On the SBC2000-074 and SBC2000-062, HIBERNATE() will not work reliably beyond about 4 
minutes; the system will wake up before time has expired without a wakeup event. If you 
need to hibernate for longer periods, it must be done in a series of shorter hibernations. 
The MC2000-077 does not have this problem. The only way to tell whether HIBERNATE() has 
exited because the time has elapsed or because of an interrupt is to check the system time 
before and after the call to HIBERNATE().

If you use long lines and/or a narrow IDE window, individual lines can wrap to a second or 
third line on the display. The IDE counts these as separate lines; the compiler does not. 
This means that the control-L function of the IDE (to report the line number) can report a 
different number for a line than the compiler. This does not affect the highlighting of 
lines by the IDE for single-stepping and animation.

On the SBC2000-062, holding down certain key combinations on the keypad will interfere 
with output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the 
compiler may list the error as occurring on a different line. The following line shows 
an example which will cause the problem:

	PRINT x "string literal"

Due to the limits of number representation, you cannot use 32767 or -32768 as the final 
value of a FOR..NEXT loop. Also, if you use an increment which goes beyond the limiting 
value and causes a wrap from positive to negative or vice-versa, the loop will not terminate 
properly. As an example, the following loop will never terminate (because the loop index 'x' 
never reaches 32766 exactly, and the next value reached beyond it is -32768, which is less 
than 32766):

	GLOBAL x AS INTEGER
	FOR x = 32760 TO 32766 STEP 4
		PRINT x, "\009"
	NEXT



03/07/2002 Release Notes (Rev 7.2)

New features in this release:

New manuals are provided.


Bugs and problems fixed in this release:

None.


Known bugs and problems:

If you use long lines and/or a narrow IDE window, individual lines can wrap to a second or 
third line on the display. The IDE counts these as separate lines; the compiler does not. 
This means that the control-L function of the IDE (to report the line number) can report a 
different number for a line than the compiler. This does not affect the highlighting of lines 
by the IDE for single-stepping and animation.

On the SBC2000-062, holding down certain key combinations on the keypad will interfere 
with output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the 
compiler may list the error as occurring on a different line. The following line shows an 
example which will cause the problem:

	PRINT x "string literal"

Due to the limits of number representation, you cannot use 32767 or -32768 as the final 
value of a FOR..NEXT loop. Also, if you use an increment which goes beyond the limiting 
value and causes a wrap from positive to negative or vice-versa, the loop will not terminate 
properly. As an example, the following loop will never terminate (because the loop index 'x' 
never reaches 32766 exactly, and the next value reached beyond it is -32768, which is less 
than 32766):

	GLOBAL x AS INTEGER
	FOR x = 32760 TO 32766 STEP 4
		PRINT x, "\009"
	NEXT



05/16/2001 Release Notes (Rev 7.1)

New features in this release:

A few new example programs have been provided.


Bugs and problems fixed in this release:

An IDE problem which oocasionally caused loss of communications with the SBC has been fixed.

Some problems in example programs have been corrected.


Known bugs and problems:

If you use long lines and/or a narrow IDE window, individual lines can wrap to a second or 
third line on the display. The IDE counts these as separate lines; the compiler does not. 
This means that the control-L function of the IDE (to report the line number) can report a 
different number for a line than the compiler. This does not affect the highlighting of 
lines by the IDE for single-stepping and animation.

On the SBC2000-062, holding down certain key combinations on the keypad will interfere with 
output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the compiler 
may list the error as occurring on a different line. The following line shows an example which 
will cause the problem:

	PRINT x "string literal"

Due to the limits of number representation, you cannot use 32767 or -32768 as the final value 
of a FOR..NEXT loop. Also, if you use an increment which goes beyond the limiting value and 
causes a wrap from positive to negative or vice-versa, the loop will not terminate properly. 
As an example, the following loop will never terminate (because the loop index 'x' never 
reaches 32766 exactly, and the next value reached beyond it is -32768, which is less 
than 32766):

	GLOBAL x AS INTEGER
	FOR x = 32760 TO 32766 STEP 4
		PRINT x, "\009"
	NEXT



01/29/2001 Release Notes (Rev 7.0)

New features in this release:

BYTE, INTEGER, and FLOAT variables can now be assigned to specific addresses in RAM. 
This allows for simpler and faster code to access machine registers and I/O ports. 
The syntax is:
	GLOBAL name AS TYPE = address 
Two new statements, BINPUT and BPRINT, have been added. These work similarly to INPUT and 
PRINT, but use binary representation for numbers rather than ASCII representation. That is, 
BPRINTing the integer value 511 will send the two bytes 0xFF, 0x01, rather than the bytes 
0x20, 0x35, 0x31, 0x31 (" 511").

Access speed for GLOBAL and STATIC BYTE variables has been increased. Referencing these 
variables is no longer slower than accessing GLOBAL and STATIC INTEGER variables.

Timeout errors on input now return separate error codes for the COM (error 89) and DEV 
(error 90) ports.


Bugs and problems fixed in this release:

ADDR_OF() and SIZE_OF() now work properly with RAM variables.

INPUT no longer terminates erroneously on a valid incoming character if the last error 
which occurred was a timeout error.

The compiler will now catch errors where too few arguments are passed in the call to a 
built-in subroutine.



Known bugs and problems:

If you use long lines and/or a narrow IDE window, individual lines can wrap to a second or 
third line on the display. The IDE counts these as separate lines; the compiler does not. 
This means that the control-L function of the IDE (to report the line number) can report a 
different number for a line than the compiler. This does not affect the highlighting of lines 
by the IDE for single-stepping and animation.

On the SBC2000-062, holding down certain key combinations on the keypad will interfere with 
output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the compiler 
may list the error as occurring on a different line. The following line shows an example which 
will cause the problem:

	PRINT x "string literal"

Due to the limits of number representation, you cannot use 32767 or -32768 as the final value 
of a FOR..NEXT loop. Also, if you use an increment which goes beyond the limiting value and 
causes a wrap from positive to negative or vice-versa, the loop will not terminate properly. 
As an example, the following loop will never terminate (because the loop index 'x' never 
reaches 32766 exactly, and the next value reached beyond it is -32768, which is less 
than 32766):

	GLOBAL x AS INTEGER
	FOR x = 32760 TO 32766 STEP 4
		PRINT x, "\009"
	NEXT



4/11/2000 Release Notes (Rev 6.0)

New features in this release:

Constant bit declarations are now allowed. The only legal values which can be used for bit constants 
are -1 and 0. Examples:

	CONSTANT True  AS BIT = -1
	CONSTANT False AS BIT =  0

The Help file is now in HTML format.

The file VSTBD.EXE is now in the distribution. This is a downloader program which will transfer a 
compiled VSTB application to an SBC2000-074 or SBC2000-062. It is intended so that you can distribute 
upgrades to your applications without having to release your Basic source code. Your compiled 
application image will be in the VSTBasic2 subdirectory with the name "Program1.tsk". You will 
need to copy it elsewhere or rename it before you exit the IDE, or the IDE will delete it as 
part of its cleanup routine. The downloader is a DOS application, and takes a command line of 
the following form (the "/p" and following number are optional, but must follow the file name 
if present):

	VSTBD  /p 


Bugs and problems fixed in this release:

TX() with inverted (RS232-level) polarity now properly sets the idle state of the line at the 
end of a transmission.

Improper array references (assignments to an array name without specifying a particular element) 
are now caught by the compiler.

Zero-length strings are now handled properly.

Strings can now contain "\000" to include an embedded null character.


Known bugs and problems:

If you use long lines and/or a narrow IDE window, individual lines can wrap to a second or third 
line on the display. The IDE counts these as separate lines; the compiler does not. This means 
that the control-L function of the IDE (to report the line number) can report a different number 
for a line than the compiler. This does not affect the highlighting of lines by the IDE for single-
stepping and animation.

On the SBC2000-062, holding down certain key combinations on the keypad will interfere with output 
to the LCD.

If you have a print statement where there is a missing comma between the arguments, the compiler may 
list the error as occurring on a different line. The following line shows an example which will 
cause the problem:

	PRINT x "string literal"

Due to the limits of number representation, you cannot use 32767 or -32768 as the final value of 
a FOR..NEXT loop. Also, if you use an increment which goes beyond the limiting value and causes 
a wrap from positive to negative or vice-versa, the loop will not terminate properly. As an 
example, the following loop will never terminate (because the loop index 'x' never reaches 32766 
exactly, and the next value reached beyond it is -32768, which is less than 32766):

	GLOBAL x AS INTEGER
	FOR x = 32760 TO 32766 STEP 4
		PRINT x, "\009"
	NEXT



2/07/2000 Release Notes (Rev 5.0)

New features in this release:

Writing to EEPROM now causes a read operation to be performed first, to determine if the write is 
necessary. If it is not, the write operation is not performed. This causes a slight performance 
penalty in the case where a write is required, but a speedup if it is not required. It also helps 
to minimize "wear" on the EEPROM.

Faster execution on the SBC2000-062. The speedup which was applied to the SBC2000-074 in revision 
4 has now been applied to the SBC2000-062. Detailed information about the execution time of specific 
statements and the speedup factor on both boards is available in the Examples\Vesta ST Basic
\Applications\Speed subdirectory.


Bugs and problems fixed in this release:

Timeouts now work properly for RX() and COMM() function calls.

Line numbers where errors occur are now reported more reliably by the compiler.

Correct debug information for watching local variables is now produced by the compiler when forward 
procedure declarations are used.

LCD output and VAST operations no longer interfere with the upper 4 bits of port D on the SBC2000-074.


Known bugs and problems:

If you use long lines and/or a narrow IDE window, individual lines can wrap to a second or 
third line on the display. The IDE counts these as separate lines; the compiler does not. 
This means that the control-L function of the IDE (to report the line number) can report 
a different number for a line than the compiler. The highlighting of lines by the IDE 
for single-stepping and animation is not affected by this problem.

On the SBC2000-062, holding down certain key combinations on the keypad will interfere 
with output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the 
compiler may list the error as occurring on a different line. The following line shows 
an example which will cause the problem:

	PRINT x "string literal"



10/11/1999 Release Notes (Rev 4.0)

New features in this release:

Faster execution on the SBC2000-074. This version of Vesta Basic runs applications more 
quickly than previous versions. The speedup you see will depend upon the particular mix 
of instructions in your program. Transcendental functions on the SBC2000-074, for example, 
show about a 7% improvement in speed. Integer operations show a much larger speed 
improvement (up to 80%).

Analog input has been added as a built-in function. See the examples for information on 
setting up and using the AIN() function.

VAST_SPI_XFER() on the SBC2000-074 now supports active-low as well as active-high serial 
clock for peripheral devices (notably, the VADC24). This is implemented via the new 
VAST_CLOCK() built-in subroutine. VAST_CLOCK(0), which is the powerup default, provides an 
active-high clock. Passing a value of 2 or 3 to VAST_CLOCK() will provide an active-low clock.

The limit of 16 bit variables has been removed.

A new compiler option allows you to permit global and static variables to "overflow" into 
the bottom of the stack area. If you have an application with a large number of global 
variables which does not use much stack space, this can be helpful. It is a capability 
which requires care in use, though. See the document "Variable Spilling.WRI" for more information.

A new example has been added ("embedded interface") which includes a Windows 95 application 
to allow you to monitor/modify variables and EEPROM array elements.


Bugs and problems fixed in this release:

Integer comparisons would fail if the numerical difference between the two arguments was 
greater than 32767, as would happen in the call MAX(30000, -30000), or FOR x = -20000 TO 20000.

The third (clock rate) argument has been removed from the built-in function VAST_SPI_XFER(), 
since it did nothing.

Floating-point constant values which were used in parameter lists for subroutines and 
functions were being passed in with incorrect values in the low-order bits.


Known bugs and problems:

On the SBC2000-062, holding down certain key combinations on the keypad will interfere with 
output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the 
compiler may list the error as occurring on a different line. The following line shows 
an example which will cause the problem:

	PRINT x "string literal"



02/17/1999 Release Notes (Rev 3.2)

New features in this release:

None.


Bugs and problems fixed in this release:

A compiler problem which caused a General Protection Fault has been corrected.

BYTE variables can now be watched when debugging.

The help file and manuals have been updated since the previous release.


Known bugs and problems:

On the SBC2000-062, holding down certain key combinations on the keypad will 
interfere with output to the LCD.

If you have a print statement where there is a missing comma between the arguments, the 
compiler may list the error as occurring on a different line. The following line shows an 
example which will cause the problem:

	PRINT x "string literal"



02/01/1999 Release Notes (Rev 3.1)

New features in this release:

None.


Bugs and problems fixed in this release:

The compiler now flags as an error the allocation of an array which is too large to fit 
into the specified EEPROM space.


Known bugs and problems:

On the SBC2000-062, holding down certain key combinations on the keypad will interfere with output to the LCD.

The IDE's "Debug | Add Watch" function does not work properly for BYTE variables.



01/22/1999 Release Notes (Rev 3.0)

New features in this release:

Variables of type BYTE may now be declared and used. A BYTE variable's contents can range 
from 0-255. Assigning a value outside that range will cause the low byte of the value to 
be assigned to the variable. BYTE variables take up only one byte of memory, but are 
converted to the corresponding integer value when used within expressions. The declaration 
syntax is:

	GLOBAL name AS BYTE

BYTE arrays in EEPROM are permitted. The declaration syntax is:

	DIM name[size] AS BYTE

The "View | Program Info" menu selection will now show how much EEPROM and global RAM is 
left in addition to how much is used by an application. The EEPROM space figures do not 
include any arrays positioned at specific addresses; only those which are automatically 
allocated by the compiler are counted. 


Bugs and problems fixed in this release:

Character output to LCD displays has been slowed down so that certain displays which had 
problems will now work reliably.

The reliability problems with LCD initialization at powerup have been fixed.

Reading individual input bits with the VTEST() function in the example file "Examples\Vesta 
ST Basic\Peripherals\VAST Opto-relay-TTL Digital\VAST DigitalIO.txt" did not work properly 
for all bits. This has been corrected.

MAX() and MIN() were not returning correct values when both arguments were negative floating-
point numbers.

Assignment of values to floating-point arrays in EEPROM wrote incorrect values. Constant arrays 
of float and integer values did not exhibit this problem.

RX() and TX() did not work properly when the transfer size was specified as 16 bits.


Known bugs and problems:

On the SBC2000-062, holding down certain key combinations on the keypad will interfere with 
output to the LCD.

The IDE's "Debug | Add Watch" function does not work properly for BYTE variables.


Miscellaneous information:

Between revisions 1 and 2, the initialization for the COM port was rewritten. This improved 
the reliability of input on the COM port. To get the same reliability on revision 1 boards, 
put the following two lines at the start of your application:

	POKE(0x98, PEEK(0x98) AND 0xFB)
	POKE(0x99, 31)



11/20/1998 Release Notes (Rev 2.0)

New features in this release:

None.


Bugs and problems fixed in this release:

Executing an INPUT statement would cause a 0x20 to be written to I/O Port A.

SELECT ... CASE did not work with floating-point variables.

MAX() and MIN() did not work properly with floating-point values.

Holding two or more keys down on the keypad would give an indication of "no key down".

LCD output was not reliable when VAST peripherals were connected to the SBC2000-074.

Resistor R3 on the SBC2000-074 should be 100 ohms, not 10k ohms. This prevented data 
from being read correctly from VAST peripherals such as analog-to-digital converters.

TX() does not work on some revision 1 SBC2000-074s.


Known bugs and problems:

On the SBC2000-062, holding down certain key combinations on the keypad will interfere 
with output to the LCD. 

LCD initialization is not always reliable, particularly on the SBC2000-062. A workaround 
for this is to duplicate the LCD initialization sequence in your application using the 
following statements:

	LCD_Command(0x28)
	LCD_Command(0x0C)
	LCD_Command(0x06)
	LCD_Command(0x01)



10/14/1998 Release Notes (Rev 1.1)

New features in this release:

None.


Bugs fixed in this release:

Not all files necessary for operation were included on the previous CDROMs.

Watching local variables did not show correct values.


Known bugs in this release:

None.


10/09/98 Release Notes (Rev 1)

New features in this release:

None.


Bugs fixed in this release:

Printing floating-point numbers to the LCD did not work.


Known bugs in this release:

None.


10/06/98 Release Notes (Rev 0)

New features in this release:

None - this is the first release.


Bugs fixed in this release:

None - this is the first release.


Known bugs in this release:

On the SBC2000-074, printing a floating-point value to the LCD will not display 
the correct value. The following program shows a workaround  for this problem.

REM   This subroutine will print a floating-point number. It is to 
REM   be used when printing a floating-point value to the LCD. 
REM   Printing floating-point values to the serial ports works
REM   correctly.

SUBROUTINE FPRINT(arg AS FLOAT)
LOCAL index    AS INTEGER
LOCAL DIGIT    AS INTEGER
LOCAL EXPONENT AS INTEGER

	REM   Short-circuit test for zero.
	IF arg = 0.0
		PRINT " 0.00000E+00"
		RETURN
	ENDIF

	REM   Print the sign character, and make sure we're working with a
	REM   positive value.
	IF arg < 0.0
		PRINT "-"
		arg = ABS(arg)
	ELSE
		PRINT " "
	ENDIF

	REM   Scale the number down into the range 1.0 <= x < 10.0
	DO WHILE arg > 10.0
		EXPONENT = EXPONENT + 1
		arg = arg / 10.0
	LOOP

	REM   Scale the number up into the range 1.0 <= x < 10.0
	DO WHILE arg < 1.0
		EXPONENT = EXPONENT - 1
		arg = arg * 10.0
	LOOP

	REM   Now we have a number in the proper range. Get the leading 	
REM   digit and print it.
	DIGIT = arg
	PRINT CHR(digit + 48)
	PRINT "."			: REM   Print the decimal point

	REM   Print the remaining digits of the number
	FOR index = 1 TO 5
		arg = arg - DIGIT
		arg = arg * 10
		DIGIT = arg
		PRINT CHR(digit + 48)
	NEXT index

	REM   Now print the exponent.
	PRINT "E"
	IF EXPONENT < 0
		PRINT "-"
		EXPONENT = ABS(EXPONENT)
	ELSE
		PRINT "+"
	ENDIF
	PRINT CHR(EXPONENT/10 + 48)
	PRINT CHR(EXPONENT\10 + 48)
END

REM   Declare a working variable
GLOBAL fvalue AS FLOAT

DO WHILE 1
	PIPE PRINT COMM0
	PRINT "\013\010"
	PRINT fvalue		: REM   Print the value to the COM port

	PIPE PRINT LCD
	LCD_Command(0x80)
	FPRINT(fvalue)		: REM   Print the value to the LCD
	fvalue = fvalue + 1
LOOP