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