Venom-SC for VM-1 Release Notes
This document provides a detailed list of the development history of
the Venom-SC Language and Operating System as applied to the VM-1
If you are looking for a simple overview of how the language has
changed since the Tutorial Guide was printed then you might want to
see the Tutorial
Installing a new version of Venom-SC on to the VM-1 requires changing
the contents of the flash chip (U3):
See the three sections below for how to do this.
Use the tool provided in the VM-1 Starter Kit to remove the flash
chip from its socket: put the prongs down the open corners of the
socket and firmly squeeze on the handle (there is no need to pull at
all); the chip should pop up.
Lay the flash chip on on top of the socket. Take care to put it the right way
round - there are markings on the chip and its socket that aid correct
orientation. Firmly press down on the chip until it clicks into place.
Most memory device programmers will be able to program the 29F040
flash chips used by VM-1.
- Remove the flash chip from its socket
- Then, either
- Reprogram it with the new version, OR,
- Exchange it for a chip containing the new version
- Replace the chip holding the new version in the
If you don't have a device programmer you may use the 5805
Application Board 2 to burn Venom-SC into a flash
chip. You can only do this if you have at least two flash devices: one
in the VM-1 and one being programmed.
This release note is a reverse history of each formal release of the Venom-SC
Each release is divided into three sections:
- See the Breakout Board (5805) Datasheet for instructions on burning in a
- See our website for the latest Venom-SC image file to burn in.
Lists changes to the language syntax or operation that
mean you may have to alter your source code. We will only make changes
of this kind where there is an overwhelming advantage to doing so.
Check all the Major Changes between the version you have been using and the
current version. If any of them apply to you, please make sure your
application code is changed to suit.
Lists features added to the language or objects.
Lists bugs fixed where the bug may have significantly affected use of the
The following two small sections don't fit into the structure of formal
releases, and so are documented here.
This is a list of known limitations of the current system and features you might
expect to exist but which haven't been written yet. These are not necessarily
regarded as bugs and therefore are not likely to be "fixed" in the next release.
- The ProtAnalyser object only scans floating-point numbers
to 6 figures of precision.
There may be problems if you enter a new definition of a procedure
while a task is running it. Stop all tasks before downloading code to
FAT FileSystem doesn't support FAT32. You should be able to format
cards up to 2Gb in "FAT" (FAT16) with Windows. Most portable devices
(cameras etc.) that use MMC/SD cards can't support FAT32 either.
Second I2C Bus: RealTimeClock can't use it yet.
HTTP doesn't support POST method yet.
To do list
Features that we haven't had time to write as yet, but might do if pressed.
Compare message works on strings but not on text buffers.
Known problems discovered after the current release are listed
This page also lists workarounds and/or proposals for fixing as applicable.
2012 05 31
Ethernet: A new form of the
Ethernet: When Creating an ethernet interface with fixed IP address
or setting the address with
Address('I'), the ethernet interface
attempts to detect an address clash. If the IP address is already in use by
another device on the LAN, Run Time error 29 (Protocol Error) is generated.
When this happens in
New, the ethernet
object is killed; in the
Address message, no change is made
to the ethernet object. Thus the error can be trapped and the operation
safely repeated with a different address.
2010 12 21
Protect(n) will no longer halt if a device
with an unrecognised ID is seen, or the device is not writeable.
This is to allow for new devices whose ID codes we don't know about
COPY(n, flags) will allow programming of unknown devices by
resetting bit 4 in the flags parameter. See the Help File.
XMODEM file transfer using
f.get(serial) to send
contents of file
f via serial port didn't work.
TCP: TCP listener in SYN_RECEIVED state now times out after 60
seconds and reverts to LISTENING state if no further packets are received.
2009 03 17
UDP Time: The UDP Time message now uses SNTP (Simple Network Time
Protocol) and a large pool of automatically selected time servers instead
of the previous and obsolescent "internet time protocol" on port 37 and a
fixed list of time servers. Any VM-1 which used network time synchronisation
will continue to do so but using a different protocol, but in the unlikely
case of a firewall that blocks outbound UDP to port 123 (NTP)
you'll need to use a local time server (you can now do this) or lift the
UDP Time: can take parameters either to force use of a server or to
select an alternative time server (e.g. a local time server on a LAN)
Ethernet: on a large network, the ARP table would overflow causing
random memory corruption and consequent crashes.
IP routing: When default router is specified twice (e.g. by
eth.Address('D') the new default router now replaces the old
one, as it should, instead of both entries remaining in routing table.
UDP.Time: would introduce an offset of about a minute to reported
time in cases where access to timeserver timed out and an estimate was made
based on internal timer.
PPP Debug: This had stopped reporting any LCP exchanges when
PPP.Debug was enabled.
2009 01 20
Address message with the
parameter "DHCP" and an optional second string parameter with a host name
can be used to asssign or renew a DHCP lease and/or to detect whether a
previously unavailable network has now become available.
File System: any empty file would be erroneously removed by the file
system integrity checking code when the system was reset.
UDP and Ethernet: A bug in the UDP checksum computation was affecting
the operation of DHCP in the ethernet object. The same bug may have caused
erratic operation in other protocols that use UDP. (DNS and time)
Ethernet with DHCP: If no DHCP server was found, the MAKE command
for an ethernet interface would hang. It now returns after a timeout.
2008 07 30
DECLARE: This new keyword allows you to pre-define all the
global names you will use in a project to catch spelling mistakes
and other errors more quickly. see the Help file for more
String Flush: The String object now takes the Flush message - which
removes all text from before the Readpoint.
Debug(10): This is a beta release of a 'Global Code Check'.
It checks through every procedure in your code and lists out the
usage of each global variable name, allowing you to see if your code
never writes to it, or never reads it, for example. This is useful
for both removing redundant code and detecting latent bugs. It is
best used immediately after clearing the memory in the VM-1 and
downloading all the code.
- Heap bug: when the block after a block larger than 64K Bytes was
freed then the heap was corrupted.
- MMC card initialisation: This is now being done correctly, before
CS is asserted.
- Array checksum: Calling Valid would correct the checksum,
so Valid only showed a problem the first time it was called.
- Array.Copy: Copy with no parameters copied the array but returned
2008 04 08
FTP Client: could become erratic if more than one task was using
networking protocols (TCP/IP). Responses on the control link can arrive in
unexpected order; the FTP client now handles this correctly.
TCP: Under some conditions a TCP active open would report failure
when the connection had in fact opened succesfully. This also showed up when
using FTP with multiple tasks using networking protocols.
Get message with a string object as 1st
parameter and no second parameter would erroneously allow space character as
a default delimiter.
2008 03 27
RAM File System: The RAM disk no longer uses a proprietary
it now uses the same FAT file system as is used for MMC/SD memory cards.
Advantages over the previous RAM filesystem:
Possible compatibility issues:
- Longer filenames are allowed.
- Subdirectories are allowed.
- Reduction in code size for the Venom system.
- More uniform programmer interface - both filesystems behave in
substantially the same way
- smaller memory overheads
As with the previous RAMDISK, a thorough check on the integrity of the file
system is performed when the file system is created. Any file with corrupt
directory or allocation information is simply removed.
Programs should be designed to recover gracefully from non-existence of any
- File names are no longer case sensitive
- Code that relied on directory listings in a particular format may
have to be rewritten.
- The set of characters allowed in filenames is different, and
is a directory separator in a pathname.
HTTP Server: A bug which could cause erratic behaviour has been found
Safedata Checksum did not compute correctly for EEPROMS with more
than 256 memory locations.
2008 01 16
RAM Filing System occasionally displayed two lines of hex numbers
(debug code) via serial 1.
TCP: Improved scheme for allocation of port numbers to prevent
recent numbers from
being re-used after the VM-1 is reset. This caused occasional refused
when many connections to the same server were opened and closed before and
restarting the VM-1.
When initializing integer arrays of 8 or 16 bit element sizes,
a compiler warning is now generated if an initialiser value is too large
for the array element size.
2007 10 18
Heap: The heap memory allocation system has been extensively
re-written using an different topology to deal with the exessive
time taken to free up blocks in a system where a large number of
blocks have been allocated. This problem had been unseen until the
introduction of the String object and Buffer of Any, which made
creating large numbers of independent objects desirable for the first time.
One of the side effects of adopting the new topology (a
doubly-linked list) is that heap blocks now take an extra two bytes
There is probably no need to change your source code unless you are
using large numbers of objects that nearly fill the RAM.
GraphicsLCD - QVGA: In order to apply the correct power
supply sequencing for the Hitachi SP14Q006 and similar displays,
control over the LCDPWRON/OFF signals coming off the QVGA
Driver module (5809) has been extracted out of the
put in the
On message. It is now necessary use the following
in order to correctly power up the SP14Q006 LCD. If you don't
On message then the display will not be
MAKE p GraphicsLCD (3 320 240)
Note for the Hitachi SP14Q006 and similar: if the LCD bias voltage
is under software control this ideally should be turned on just
before the MAKE, and the MAKE itself should occur within 30mS of
powering up. This requirement implies that it is not good practise
to power up an LCD panel without initialsing it, though it may be
hard to achieve this on every occasion during development.
WAIT 50 ; Wait at least 50mS.
GraphicsLCD - QVGA: On and Off messages to control the
LCDPWRON/OFF signals - see Major Changes above.
Ethernet Protocol: can now use DHCP to assign IP address,
default gateway address and DNS server address. DHCP is selected in
the MAKE statement by setting the "IP address" parameter to 0.
Integer constant: The integer constant value $80000000,
expressed in hexadecimal, decimal or binary, resulted in code for
the value 0 instead.
RAM File System: crashed during MAKE for an existing
file system when the number of files was a multiple of 18.
2007 09 10
Non-volatile Arrays: Syntax for creation and block
initialisation has been changed so it is more intuitive. To create a
non-volatile array you should now use MAKE with a third parameter
set to NIL:
MAKE nva Array(8,100,NIL)
To copy the data only from any array to any other array, use Copy:
The old Copy(1) and Reset messages to create and initialise
non-volatile arrays will still work for this release but we
recommend you change your source to suit the new syntax.
ProtAnalyser: A change in behaviour with delimiters, introduced with
the last release, has been reversed, and some small further refinements
Initial delimiter characters are not now skipped when reading numbers
and strings (but blanks are still skipped with numbers). This means that
an empty string can be returned.
The "CSV mode" behaviour can be specified for any delimiter character,
not just comma.
In CSV mode, a newline terminator is retrievable by the
message. (other control characters are ignored; mid-line,
GetLast returns a comma or whichever other separator character
The terminator at the end of a string or number is consumed from the
input stream, but can be retrieved by a
Look message always returns a preview of the next
character from the input stream.
When reading numbers, an empty string (i.e. a terminator character
encountered before any numeric) returns a value of 0 or 0.0, and
Valid is set false, as in the old ProtAnalyser.
Analogue drivers: Direct support for the AD7998, MAX1236 and MAX1238
is now in place. Also indirect support for the MCP3421 and ADS1110.
Tab stops: Tab is now echoed by the VM-1's command line as two spaces
to fit with the default value in VenomIDE.
Command line cache: Typing the Up Arrow key (in VenomIDE and most
terminal emulators), or Ctrl-R,
will retrieve the last line you typed in at the
This feature has existed for some time but was not documented.
Ethernet Protocol: Creating this with a device select code of 0
suppresses any writing to the device select lines (on the Expansion
Bus: channels 30-37), allowing a special hardware configuration
where Ethernet and the Expansion Bus can be used together, e.g. for LCDs.
ProtAnalyser: Reported bug in delimiter string where character after
initial '-' was ignored.
Time message was not returning correct
values after first time of use.
2007 07 03
- ProtAnalyser: The Protocol Analyser object has been redesigned. The
new version should be easier to use, and has some extra facilities. In
- You can choose how end-of-input condition is handled and no longer need
to pad the end of a buffer with a dummy terminator
- Reads numbers in any base up to 36
- Can read strings direct to a string object
- Can parse most types of CSV (comma separated value) data
- More sophisticated method for specifying delimiters
- Function for simply skipping delimiters or characters in a set
- Simpler syntax for some operations
Find message searches for specific string
s is a string object
will read a line of text (terminated by CRLF or EOF) from a text file and
append it to the string.
String Object: the
Value message interprets the contents
as an integer or floating point number, as with the
String Object: now has an internal Readpoint variable and supports
Reset in the same way as a text buffer. This is expected
to be useful because it enables a string object to be used as a data source
for the Protocol Analyser.
System.Count message reads or sets a 16 bit unsigned number that is
retained during power down and incremented each time the system restarts.
Macros: The error when a macro name is seen by the compiler before
the macro has been defined has now been reduced to a warning. There
is no longer a need to clear the controller memory when this occurs.
HTTP: server object chooses persistent connection or immediate close
based on HTTP version and "connection:close" header. This may improve
performance in some connections.
Writing to an array in NVRAM no longer causes a write protect error
RAM file system file time and date bugs fixed. Also RAM file system
can use internet time as a time source, in the same way as the FAT file
b.Find(pattern, startpos) generates a proper run
time error if
startpos is out of range, instead of crashing the
- http Fixed memory leak and problem that caused data corruption in
2007 03 21
PRINT formats that list full file paths
do not now show a '/' character at the beginning of the path/file name.
TCP/IP Protocols allocate memory differently, using more when created
but with less extra memory use while in operation. The result should be less
heap fragmentation and faster TCP/IP performance, but if your application is
tight on memory you might want to check the free memory while running.
return the number of cache hits and misses, respectively, since the
file system was created or last reset. You could use this information to
help tune the cache size for an application.
will transfer data between an array of 8 bit integers and the serial
port. Two optional parameters can specify an array start element and number
bytes to transfer.
PRINT filenames or wildcards in the 1st
colon operator were being ignored.
FAT Filesystem would occasionally output spurious debug information
to serial port 1.
2007 03 06
The amount of memory used by the FAT file system for block cacheing will
different. In most cases more memory will be used, but this can be
controlled (see below). The cache memory is allocated when the file system
is created, and unlike previous versions it does not change during use.
Maths: X ^ Y. The 'X raised to the power Y' operation has been
Operand types: FLOAT and INT. If both operands are INTs, and Y is positive
or zero, then
the result is INT. Otherwise the result is FLOAT.
Operator: the carat character:
Precedence: it has the same precedence as *, /, DIV and MOD: use ( ) to be
Optimisation: the ^ operation is constant folded.
SMTP Protocol supports a simple authentication scheme (AUTH PLAIN)
when connecting to a server.
s is a
string object will collect a line of input terminated by CRLF or string
serial.Get(s[, n]) where
is a string object and
n is an optional control
parameter, stores a line of input in the string terminated by CR or LF or
string capacity, and optionally echoed back to the serial line.
http.Get(s) stores the returned path
value in string object
Put message can append a single character
(integer parameter as opposed to string)
CRCGenerator: two simple checksum types added (8 and 16 bit). Also
crc.Put(a[, start, length]) efficiently builds up CRC from
strings or arrays of parts thereof, and
crc.Get(a) works where
a is an array of 8 bit elements.
FAT Filesystem: An optional extra parameter when creating allows you
to define how much memory is used for the block cache.
returns number of blocks (n=1) or bytes of memory(n=2) used by
fs.Debug(12,n) reports on various MMC block transfer and error
Owner Message: This was broken and now fixed.
RAM FileSystem data corruption and run time errors when more than 18
files were created - fixed.
SMTP Protocol: The "message-id" header now complies with the syntax
described in RCF2822.
- FAT Filesystem and MMC driver: The MMC retries block reads and
writes on failure, making it much more robust. The FAT fileystem has a new
block cacheing scheme which is faster and allows user control of the memory
used, and some associated bugs have been fixed, which caused corruption under
obscure and hard-to-reproduce conditions.
2007 01 23
Flags parameter to PROGRAM command now active: used by new
release of VenomIDE for Download settings.
Attempt to lock object held by dead task: There is an option
to turn off this runtime error. Use this line to turn it off:
Debug(3) := 8
We only recommend this for situations where there is no time to
remove the source of the underlying error. When the
failure occurs, the operating system silently unlocks the object
and normal operation resumes. However the locking task may wait for
around 255 * Number of Tasks mS before the situation is resolved.
2007 01 08
TASKs and Locks: There has been a major overhaul of an internal
system that deals with the interaction between tasks and locks.
Before, when a task ended, for whatever reason, every object in the
system was scanned, and if it had been locked by the dead task, it was
unlocked so that the object was then free to be used by any other
The new system is much more efficient: if a task has to wait to secure
a lock for more than 255 task scheduler cycles (around 255 * Number of
Tasks mS) then the waiting task checks to see if the task that holds
the lock is alive. If not then a Runtime Error is issued
("Attempt to lock object held by dead task"). We issue a
Runtime Error here because well-written programs should not result in
tasks ending when they still hold locks on objects used by other
tasks. See Release above for workaround if this breaks your application.
In particular the use of the STOP command is not recommended for use
in a live application, only as a development tool. Please see the
Tutorial Guide for a thorough discussion of tasks and locking.
Graphic LCDs: Two graphics LCD drivers based on the SED1560 and
SED1520 have been removed. Please contact us if this affects you.
Remove message requests removal of a
file from the remote server.
FTPServer Protocol accepts DELE (delete file) command from remote
client. Note that a request to delete a directory will do so, removing the
entire contents of the directory.
LIST TASK : When tasks are listed, whether by typing
by using the
LIST TASK command, the task list now indicated if
task is 'blocked' by another task - i.e. waiting to lock a lock held
by another task. This helps you to understand the interaction of
tasks and locks in your application, and will show up 'deadlock' if
New Graphics LCD Driver There is a new Graphics LCD driver for
displays based on the
SED1565, which has a display resolution of 128 x 64. See the Help file and
contact us for details.
SMS protocol object can now accept a
FileSystem (RAM) better integrity checks on startup.
Unwanted debug output removed.
FTPClient Open now returns correct true/false value.
Buffer Remove message can now remove sections containing the last
Memory leak in SMS fixed
Filesystem (RAM) made resistant to corruption that could occur if
power cut off during file size update.
2006 11 30
New Keywords: The words
are now system keywords and may no longer be used for your own
identifiers. The functions behind these keywords are not all
implemented as yet.
String object: There is now a String object so you can have
variable strings in Venom-SC. Up until now you had to use a Text
Buffer to hold variable text data, and string constants to hold
static text data. Now you can create strings on the fly. They can
do many of the things that a Text Buffer can do, but have a fixed
maximum size. They are a bit faster, and more memory-efficient than Text
Buffers, especially for short strings. The String object can take the new
Compare message. See the latest edition of the
Help File for full details.
Buffer of Anything: There is now a 'Buffer of Anything' type
of buffer. This can hold any kind of Venom value, e.g. a single
buffer can hold other buffers, arrays, objects of various kinds,
strings, integers, floats... anything. This object is a powerful
tool for creating lists, etc. See the latest edition of the Help
File for full details.
Find for integer buffers: The Find message will now work for
integer buffers: it will find the first occurrence of a given integer
in a buffer, starting from a given point.
Buffer: The Put message can append an array or string to a buffer of
matching element type. This can also be applied to a subset of the array or
string. This is faster than PRINT TO for strings, and much faster than
copying one array element at a time.
CRCGenerator: Creating with a prototype value of 'M' or 'm' makes a
MODBUS CRC generator. This behaves in the same way as the standard 16-bit
CRC but uses a different algorithm that generates different 16-bit values.
It is useful for customers implementing the MODBUS message protocol.
FTP: The FTPSERVER Protocol now supports file delete and rename
commands, and the FTPCLIENT Protocol takes a Name message to
rename a remote file.
Send message is a (more meaningful) synonym for
Debug(1,1) shows object types in
listing, where recognised.
UDP: memory leak when incoming packets discarded because Empty
message hadn't been sent.
FTPSERVER Protocol: runtime error when trying to create object.
FTPCLIENT Protocol: Fix command/response sequencing error in
TCP/IP: occasional checksum computation errors.
RandomNumberGen: seed value of 0 in the 16-bit generator generated a
sequence of nothing but zero values.
Latency: The code in some objects was hogging the CPU for more than
2ms without allowing swapping, thereby violating our internal maximum time-
2006 09 05
Send is now a message name and may not be used as an identifier
(e.g. variable or procedure name) in your program.
More Sprites: The number of sprites you may assign to the GraphicsLCD
object has been increased from 128 to 256.
Reduced 'Garbage Collection': The
Garbage Collector has been reduced so that it only detects and lists
leaked memory blocks, and no longer has the option to delete them.
OperatingSystem.Debug in the Help File.
"SMS" Protocol A new type of Protocol object controls the
sending and receiving of SMS (Short Message Service) messages over a
GSM mobile phone network. Text and binary data in both 8-bit and 16-bit
formats can be
exchanged. The interface uses a serial port and the standard ETSI protocols
and has been tested on a Siemens MC35 GPRS/GSM terminal.
The SMS protocol is documented in the Venom Help File under "Protocol" in
the "Object Types" section.
Get with a buffer parameter can now
use an 8-bit integer buffer as well as a text buffer.
Time message can take an integer
parameter which is bit mapped code to indicate what sources to use for time
information when updating a file directory. Bit 0 is set to use Internet
time servers, bit 1 is set to use the Real time clock/calendar chip
optionally fitted to the VM-1. Disabling Internet time servers is useful
in the unusual case where an Ethernet connection and DNS server exist,
but there is no route to the Internet.
ProtAnalyser: Fixed bug where GetLast didn't enable consumption of
delimiters in every case.
Buffer: Fixed bug where Remove used on buffers with fewer than 256
bytes would hang.
The long delays in file system operations in some network setups can now
be avoided by a parameter of the FileSystem
message to prevent it from trying to get the time from an unreachable
Internet time server (see New Features, above).
FTP server: no longer gives a run time error
when serving files bigger than 64k.
HTTP server: re-instated sending of content-type header.
Get with a buffer parameter works
correctly for any size of buffer.
2006 06 01
RAM Filesystem: the default format for a file listing has changed
3 to 4, a new format which includes file times and dates.
TCP Status message has the value 5 when a TCP protocol object is
first created and no connection opened (was previously 0).
FAT Filesystem: the numerical code for specifying directory
listing formats has changed. Values 0 - 5 are unchanged. The full set of
format codes is documented in the Venom help file
SafeData: This object now supports the M24C32 and similar devices
that use two-byte addresses internally. Also PRINT of a SafeData
allows you to specify which data to print.
FileSystem: A file in either type of FileSystem can take a
message which assigns or return the file's creation time and date as an
integer compatible with other Venom time and date functions.
Read a number from a Text Buffer. You can now read a numeric
value straight out of a buffer with
returns the value of the first number it finds in the text buffer,
without 'Getting' any characters from the buffer. You can specify
the type of number to be found by passing a prototype parameter: eg.
10 for decimal, 16 for hexadecimal and 1.0 for floating point.
Remove text from a Text Buffer. The Remove message is the
inverse of the Insert message: it
will remove a section of text from any point within a Text Buffer.
FTPClient protocol can transfer files to and from an FTP server.
The protocol can also get file lists, find the current directory and
navigate server directories. Active and passive transfer modes are both
supported. ASCII and binary file types are supported automatically based on
the Venom file type.
FTPServer new protocol object enables the VM-1 to operate as an FTP
(file transfer protocol) server. It can use RAM or FAT filesystems.
Directory listing, subdirectories (on FAT FileSystem only) and file
transfers in both directions are supported. Further documentation is in
the Venom Help file.
TCP Status: this message has an extra possible value. 5 means a
normally closed connection and is also the status value of a TCP object
before it is first opened.
Keypad:InputBuffer - Improvement in key-detection algorithm means
cleaner operation with touchscreens.
Serial Break: There is limited provision for sending serial
breaks to facilitate implementing the LIN protocol. Please contact
us for details.
VM-1e: Code in place to support the forthcoming VM-1e: a
VM-1 with extended flash memory for very large (~512K) user applications.
FileSystem (both RAM and FAT) : a directory listing with a format
code of 9 produces a UNIX "ls -l" style listing.
HTTP: In the query string of a URL, the '+' character is now
correctly converted back to an ASCII space, in compliance with the URL
FAT FileSystem: if there is an interface problem (e.g.
mismatch of jumper settings and software MAKE statement or a faulty memory
card) the system would
sometimes not detect this reliably and produce misleading error messages
and wrong values from the
messages. Those values are now correctly returned as 0 and any attempts to
use the card cause a "Device Not found" error.
2006 03 22
FileSystem: in the FAT file system, the equivalent of a
Flush message is performed automatically at intervals when a
file is written.
By default the interval between flush operations is 10 minutes.
Flush message can be sent with an integer parameter which
sets the automatic flush interval in milliseconds. The
Application Note "Data Logging with the Memory Card File System" discusses
related issues in some detail.
HTTP: if a graphics file is missing, a small "broken graphic" image
is displayed in its place instead of a whole "Not Found" HTML
error page as before.
File System and HTTP: if the HTTP object finds the file media has
removed and replaced, it does not clear the "New Media" flag, allowing the
program to detect this condition reliably and take action to re-open any
file objects that would have been killed on media removal.
FAT FileSystem: an error in calculation of block addresses from
cluster numbers resulted in corruption when more than 32Mb of file data
were present. The block address is now calculated correctly.
2006 03 09
This is the first version of Venom-SC that is fully compatible with the new
VenomIDE development toolset.
- VenomIDE extension The PROGRAM command now takes an optional
third parameter: the download checksum.
This is the checksum of all the characters between the PROGRAM commands, but
sent ahead of the file so that
the Venom can check the file integrity. If the download checksum is
present, then Venom indicates
whether or not the file checksum was valid at the end of the download.
An optional, unassigned, fourth integer parameter is also allowed, for
2006 02 22
- HTTP Protocol Object. This provides support for writing a web
Venom. See the Venom-SC help documentation for details.
Ethernet The Ethernet protocol object's Address message can now
take a first parameter with a value 'N' which assigns a name server (DNS)
address, duplicating the functionality of
FAT filesystem for MMC/SD cards: A filesystem can now be created without
run-time error even if a card is not present. After a card is inserted,
the first file open request will cause the card's system data to be read
and the file system initialised properly.
UDP: use of UDP to get the time and date no longer causes a run time
TCP: Fixed bugs which could cause the TCP protocol to hang when closing a
connection and which could cause occasional loss of data on opening and
PPP: cured a run time error and a memory leak resulting in a
RAM FULL error after some use.
2005 12 12
2005 10 19
STOP, when given an integer parameter, now takes the task ID number
rather than the task's
position in the task list. Task ID numbers are listed when you type
CTRL-T or LIST TASK.
CANBus is now a Venom-SC keyword. See New Features for details.
ARRAY: Constant arrays may now take an expression for the
dimension of the array, so long as this evaluates to an integer
ARRAY a (8 , 2*34+23). They also
handle being given too much data more elegantly.
AsynchronouSerial (ports 1 & 2): the low-level driver code has been
that fewer characters are transmitted after a hardware handshake input
signals that transmission should stop.
CANBus: A Beta version of a new CAN Bus object (CANBus) is included
release. It is based on an MCP2515 device that sits on the VM-1's SPI
Bus. Please ask for details if you would like to try out the driver
Compiling code during program execution:
Note: this feature is on Beta release; it is not fully tested and
guaranteed but provided for use 'as-is'.
There is now a mechanism to compile new procedures from within a
running application. The source text can come from any object that
returns characters from a Get message. Compilation can be done
from any task (though for compiling larger procedures it is
recommended that the main task be used as it has a larger stack,
and it's important to make sure that the command line is not
compiling at the same time as another task).
This feature allows you to download new code over a comms link, or
store it in a text file. The syntax for compiling is currently:
obj is an object containing the source for new procedures.
The Debug(7...) call has to be done once for each procedure in
Note: the maximum line length allowed in Venom is
255 characters. Lines can be broken by using the '\r' (13)
character. The last line should end with '\r' to make sure no
attempt is made to read past the end of the object's text.
Note: when an application is stored in flash, any newly
compiled procedures will be held in RAM. New procedures will
overlay existing ones. At the next startup all new procedures will
be deleted and the originals will be restored from flash.
Note: Any syntax errors that occur in the code will be sent out of
the main serial port - it's best to make sure there are none before
compiling code in this way. Any runtime errors that occur when accessing
object will result in a runtime error report but program execution will
Download checksum: In order to vaidate programs downloaded
to the VM-1 the PROGRAM ... PROGRAM END construct will now indicate
the checksum of every character received from the first line after
the 'PROGRAM ... ' to the end of the 'PROGRAM END' line (including
the last $0D). Line feed characters may or may not be sent by your
terminal program, but will be included in the sum if they are. You
can use this sum to validate the file that was downloaded by taking
a checksum of the file between the correct points.
IP Protocol object: the Time message takes an optional
parameter to specify the timeout period in milliseconds after which a
-1 is returned if there's been no reply. The default is still 10 seconds.
TCP Protocol object: The Timeout message now sets timeouts
for operations other than receiving data, including actively opening a
connection and receiving an acknowledgement after sending data.
Numerous bugs, mostly relating to memory management, in the TCP/IP stack
have been fixed.
In the Ethernet module, failure to transmit a packet, e.g. if
the cable is disconnected, times out instead of waiting for ever and
hanging. The system
is also more stable when multiple tasks use protocol objects.
2005 03 29
AUTODESTRUCT is now a keyword and cannot be used for variable
In implementing this new feature it was necessary to make the .Die
message fail silently when sent to an already-dead object.
Source-file annotation: The PROGRAM construct now allows
Venom-SC to annotate each procedure with its source
file name and line number. The default syntax is to put
PROGRAM "filename.ext" (i.e. the file name and optional
on the first line of
each of your Venom-SC source files, and
after the last bit of code in each file. This allows runtime and
syntax errors, etc, to list the exact position of the error in your
This new feature may be used immediately, but will be more
fully exploited by the IDE we are developing for
VM-1/Venom-SC. If you don't use the new syntax then the system behaves
AUTODESTRUCT: This keyword is used to designate a group of
LOCAL variables to be sent the message Die when a procedure
ends. This is to allow you to keep track of your temporary
objects, given all the routes and mechanisms by which a procedure
All LOCAL variable declarations listed after AUTODESTRUCT
within a procedure are in the auto-destruct group. When the
procedure ends then each of the auto-destruct group is sent the
AUTODESTRUCT works in conjunction with END, RETURN, CATCH/THROW,
REGION/EXIT, and STOP/STOP ALL.
If a task fails on an error (including CTRL-C Break), no
auto-destruction takes place.
User fonts: Proportional user-defined fonts may now be
added to the GraphicsLCD object.
Number font: FONT 4 is a copy of FONT 2, only with reduced
width so that numbers are printed more pleasingly. It is intended
only for printing numbers. Printing other characters will work if
they have a width of 10 pixels or less. Printing wider characters
may not work perfectly.
SerialIO: A block transfer option is available to transmit
and receive blocks of byte data to and from the VM-1's SPI bus.
GraphicsLCD: A new Graphics LCD is now supported:
TMGG13264-09 made by TRI-T. This is connected to the VM-1's
second serial port (used in synchronous mode) via 5V to 3V logic
2004 12 22
Ethernet: this version of the code supports Issue B of the 5810 Ethernet
interface module and is incompatible with 5810 Issue A.
Ethernet and QVGA
The 'select' parameter in the Ethernet and QVGA MAKE statements is now a
4 bit number (0 to 15) representing the bit pattern in channels 34-37 to
select i.e. it is shifted down 4 bits from the value previously used.
GraphicsLCD and Ethernet: the QVGA and Ethernet code have been
modified so that the two modules (which share I/O lines) can be used
2004 10 27
Status is now a message name and cannot be used as an
identifier, e.g. a variable or procedure name.
GraphicsLCD: Printing has been completely re-written to remove
bugs. The code should work very similarly to before, but there is
the possibility of new bugs or differences in detail that could
break applications. Check your code works if you are rebuilding
with this release.
Protocol: a TCP object now accepts a
which is useful especially after an active
Open has failed.
Status values are: 0 - OK, 1 - destination unreachable, 2 - timeout.
Protocol: a routing failure either in the VM-1 or reported back from
(ICMP "destination unreachable" code) will be detected and reported back to
to the originating protocol which can handle the information intelligently
instead of simply timing out. In particular, TCP will respond to this
by closing the connection and returning a Status value of 1 (see
Protocol: TCP Put(buffer or array)
An undocumented limitation has been removed, whereby no more than
256 characters in a buffer could be sent using the Put
tcp.Put can be used with arrays
and buffers of any data type. Performance has been greatly improved
with all forms of
PRINT to tcp.
Protocol: A new Ethernet Protocol object controls the
5811 Ethernet interface module or compatible hardware and provides IP
connectivity though Ethernet. Mapping of Ethernet addresses and IP
addresses is done transparently with ARP (Address Resolution
protocol). Support is provided for LAN gateways to other networks on
specific address ranges or a default gateway to the rest of the Internet.
GraphicsLCD: Inline font changes within a single PRINT statement
are handled better, so that each line has the
correct amount of height and depth to accommodate the highest and deepest
GraphicsLCD: GOTOXY(x,-y) scrolls a window up by y pixel lines.
GraphicsLCD: User defined fonts have an extra parameter that
specifies the number of blank lines,
printed above the characters, separating lines of text.
2004 05 18
Timer: When printing
Timer objects, the second parameter
no longer specifies that the period should be printed.
This function has moved to the third parameter. The second parameter
now specifies the
number of decimal digits that should be printed for fractions of a second.
If zero (0) is
supplied for the second parameter then no digits or decimal point are
I.e. old code
PRINT tmr : n : 1
should now be
PRINT tmr : n : 0 : 1
Keypad:InputBuffer: The timing of the Auto Repeat function has
changed slightly to fix a bug:
the repeat delay is now correctly set at the parameter value (the repeat
period was being added to it).
Address is now reserved as a message name and cannot be used
as an identifier, e.g. a variable or procedure name.
NumberReader: functionality has been improved, which should improve
all applications but it's possible
may break some: See New Features below.
QVGA: The VM-1 can now drive QVGA LCDs via an S1D13705 LCD
Both this IC and the TSC2003 Touch Screen Controller are incorporated on
the new QVGA module (Product Code 5809).
TouchScreen: This object drives a resistive touch screen
via a TSC2003 IC on the I2C Bus. As well as detecting where a
touch to the screen occurs (calibrated to LCD coordinates) it
allows you to define virtual keys to create any style of keypad on
your user interface.
Error Redirection: It is now possible to redirect runtime error
text to any object capable of accepting PRINT. For example you can
redirect error text to a file. It is usual to use the 'maximum
size' option for error logging files. For example:
system . Output(1) := err_file ; Redirect err output to err_file.
Note that if the object is locked by another task then
the task with the error will stall, and no error output will be seen.
At startup the error output defaults to the system object. This
effect of streaming error output directly to the main serial port without
respecting the locks on the serial object.
Buffer has a new message:
GetLast. This removes the
from the end of the buffer and returns it. This can be used to delete
the end of a text buffer, or to implement a 'stack' using
data onto the stack and
GetLast to pull it off.
Keypad:Inputbuffer now takes Period and Time messages. Period
allows the auto-repeat
period to be set (and read), and Time gives the amount of time a key has
been continuously held down.
These two may be used to implement an accelerating auto-repeat function.
Keypad now takes the Key message: return the value of the
key currently being pressed, or -1 if no key.
Timer and StopWatch can now print fractions of a second in their
formats. To use this feature, use a second colon parameter that specifies
of digits to print after a decimal point. If the second parameter is
zero, no decimal
point or fraction digits are printed. The following example prints a
timer that has 5.742
seconds left to run in a minutes, seconds and milliseconds format:
-->PRINT tmr :2 :3
Task objects now take the message
indicates when a task is no longer running.
RandomNumberGen can create pseudo random
number sequences or either 16-bit or 32-bit numbers. The 16-bit
sequence is similar to the rand() function provided in many C
libraries, with a sequence length of 216 - 1.
i.e. each number appears once in the sequence. The slightly slower 32
bit sequence passes standard statistical tests and has a sequence length
estimated at 290. Both produce numbers
with a flat distribution which can be constrained to a specified
range, and there is also a float generator that can produce floats
between -1.0 and +1.0. All can be seeded to start the sequence at
a repeatable point.
CRCGenerator. 16- and 32- bit CRC
made and used in a variety of ways. The 16-bit CRC uses the CCITT-16
NumberReader. Improvements have been made:
See the most recent Object Reference Manual for example usage.
The Minus key may be used to negate the number at any point during
not just at the start.
If the Minus and/or Decimal Point keys are defined then the number
of numeric digits is
limited so there is always room to put in the '-' and/or '.'.
The first digit key pressed will clear the default text from the
display unless the Delete key
has been pressed first, in which case the number may be edited digit
ProtAnalyser: GetLast message added; when
GetLast := TRUE
delimiter characters are consumed when
reading numbers and strings. Default is FALSE.
GraphicsLCD Windows: The Value message returns the text cursor
position. Value(0) is the x position and
Value(1) is the Y position.
Garbage collection: As an aid to debugging a 'garbage' detection
and collection system has been added to the operating system.
During normal operation of both the Venom-SC compiler and your
application, memory is requested from, and later returned to, the
memory management system or 'Heap'. However, in some circumstances
memory can be lost. This kind of bug can be latent in your
application, only showing itself after the system has been
running for some time.
The most common cause of this kind of 'memory leak' is when you
create a temporary object that needs memory (within a procedure, say) then
forget to remove it (with .Die) before returning from the procedure. If
do this enough times then the system will eventually run out of
You might consider running the garbage collector on your application after
has been working a while as part of your code validation process.
The Garbage Collection system is currently implemented as a Debug message:
Debug(1 , flags)
Where the optional parameter
flags is a set of binary
bit values which may be combined:
1: Recover lost memory blocks
2: Dump details of the lost memory to the main serial port
Debug (1, ...) always returns the number of blocks of lost
memory it found.
If you think that it is possible that your application could be losing
memory then inspecting
the value of
Debug(1) will let you know.
Note: There are currently three legitimate ways of losing memory:
i) Entering a command at the
--> prompt that contains a string constant (e.g.
PRINT "a string" , CR)
ii) CTRL-C breaking out of a program while it is running - any
temporary objects that were held in local variables will show up
as garbage as even if you wrote code to destroy them after use, this won't
have been called.
iii) CTRL-C breaking out of a procedure definition
part way through.
Make sure that none of these is giving you false indications of a leak.
Also note that Debug(1...) will NOT respect task swap timing, so don't use
it as part of a
normal application unless you take this into account.
Protocol - The
Address message to an IP
protocol object is a preferred synonym for
The message's functionality is enhanced to associate symbolic
names with IP addresses. e.g.
"192.168.1.1" will assign the address so the name
"server" can be used anywhere an IP address or domain name
could be used.
ip.Address("server") will return the IP address as
an integer. Unlike DNS lookups, these address entries do not
expire and do not require an external DNS. They are intended for
use on local networks.
2004 03 04
- File System:
PRINT f where f is a text file used to attempt
UNIX-style line endings (ASCII LF character only) into CRLF. It is now
to pass all characters unchanged. The old behaviour can be invoked when
a whole file by a special colon operator
PRINT f:"+". Files
PRINT TO f, ... CR are unaffected by this change.
XMODEM Protocol object: CRC mode is supported and used by default
for both transmit and receive, with automatic fallback to checksum
if that's the only version supported at the other end of the
link. The XMODEM protocol's error recovery is more robust than
before, in both CRC and checksum mode.
PRINT f:"+" on a text file will strip all
occurrences of chr 13 (CR) and convert all occurrences of CHR 10
(LF) to CRLF, i.e. converts from Unix to DOS/Windows format.
PRINT f:"-" will strip all CR (CHR 13) characters, thus
converting from DOS/Windows to UNIX format.
Buffer Objects: when freeing any kind of buffer using the
message, not all the memory was freed. If buffers were created and then
repeatedly, eventually there would be a RAM FULL run time error.
2004 01 08
- The SerialIO object can now take a second parameter that
specifies the channel to be used for the CS\ function. Currently only
'8' (the existing default CS\) and '0' are supported. If you use the
value '0' then no channel is used for CS\. This is useful for when
multiple digital channels are used to select different devices. In
this case you can use
Digital.On, etc, to
control the CS\ function.
- The ProtAnalyser object now supports a Reset message. Normally
after a token has been read from a buffer, the ProtAnalyser caches the next
character (the one that terminated the previous token). The Reset
message causes it to forget the cached character forcing it to re-read
the buffer. This is desirable in the common case where the buffer has
been refilled and reset and parsing is to start from the beginning
2003 10 08
A New Protocol type XMODEM has been introduced, which will allow
data to to be transferred between the VM-1 and a file on a remote computer
via either hardware serial port. Full description in the XMODEM section of
the Venom-SC Help File.
FileSystem: A variation on the file
messages transfers a whole file between a VM-1 file and a remote
computer via the serial port.
2003 09 30
- The name 'LF' is now used for indicating a Line Feed with in
the PRINT command, and so cannot now be used as a variable name.
- New serial port: there is now a beta-release of a third serial
port running at up to 9600bd. Please contact us for details.
- I2C: the I2CBus object will now do a Repeated Start when
'.On' is issued without '.Off' first.
- GraphicsLCD: two more GraphicsLCD drivers added for LM4064 (100x64 dot)
and LM4032 (202x32 dot).
2003 08 20
- Venom now has a new protocolanalyser object, ProtAnalyser, that
assembles numbers and/or
characters (received via other objects) in a variety of formats.
- There is now no limit to the number of global variables allowed in a
- File System has block read and write operations f.Get(a) and f.Put(a)
is a file and a is an array of the same data type. These are the fastest way
to move data in and out of a file, but only work with arrays.
- File system has a new file data type for RLC (run length compressed)
Block reads and writes between arrays of byte data and RLC files will
data when it contains consecutive runs of the same byte value. Large
bitmaps are expected to benefit from this type of compression.
- The file Length message has an optional parameter. If f is an RLC file,
will return the size of the data represented by a compressed block, instead
the actual file size.
2003 07 14
Venom now has a family of Protocol objects that provide a
programming interface to a TCP/IP stack. This first release supports:
- Dialup connections via a serial port and modem or GPRS
- UDP datagrams
- General TCP/IP connections as passive listener or active initiator
- Sending and receiving email
- Automatic domain name resolution
- A facility for getting accurate time of day information
- The PRINT keyword BS now prints a backspace on output devices that can
- The maximum number of global variables has been raised to 1124
as a temporary measure. Eventually the number of globals will
2003 05 08
- The character constant
'\' is now illegal and should
instead be written
- There is now the option to use C-style print formatting of Venom
variables by using a colon followed by the printf() format string.
The string must start with 'C' or 'c' to inform Venom that it is a C-
format. 'C' indicates that the variable will be seen as a long, float
whereas 'c' indicates will be seen as an int or char.
PRINT 123.45 : "CThe offset was %+9.3fmm"
The offset was +123.450mm-->
- Escape codes for Alert, Backspace, Form Feed, Newline, Carriage
Horizontal Tab and Vertical Tab have been added to string constants.
They are inserted with the sequences
\a \b \f \n \r \t and
Similarly, character constants now accept
To get the character constant for a single quote use
To get the character constant for backslash use
2003 03 31
- FrequencyIn: This new object allows the measurement of frequencies
to arbitrary precision, typically 0.1ppm. Accuracy is governed by the
clock source used, typically 30ppm when using the internal clock.
TYPEOF <expression>: this new
operator returns the type of any expression.
- AsynchronousSerial now has a Format that sets and requires
parity bits to be 0.
- Better 'ram full' error response: all
incidences of ram full while running application code result in
a RAM FULL error. Ram full when compiling code will abort the
compilation with a message to the terminal.
2002 12 04
- 12x4 Keypad configuration implemented.
2002 11 28
- If you send a
CTRL-T (character 20) to the main serial
it will cause a
LIST TASK to be executed, listing out the
task details to the
serial port. This may be switched off using
- [Beta release of application area dump and load using Motorola S-
Protect(0) now also erases all traces of the old
application leaving the symbol table and heap clear.
- There is now no limit, other than the memory used, to the
number of tasks that may be started. However, it is still a good
idea not to use more than four or so unless there is a good reason
to do so.
LIST TASK will now report where - exactly - in the code
each task is.
CTRL-T will do a
LIST TASK so
you can see where all the tasks are, including the main task, at
any time. This feature is turned on and off with
2002 11 20
- The RealTimeClock and DateTime objects will now give an error if
a 'bad date' is printed to them, i.e. the text isn't in a format
they can accept as a date.
2002 11 13
- Analogue and AlphaLCD objects can now be created on the second IIC
- PulseWidthOut now has Asserted and NotAsserted messages.
- TestLock messages implemented for lockable objects.
- Default lock behaviour implemented for non-locking objects.
- Find message implemented for FileSystem.
- Check now made to ensure existence of valid Startup routine.
2002 10 16
- FileSystem object supports Name message to change name of a file
- File object supports Name message to return or change the name of a
- FileSystem Open message has optional third parameter to set maximum
file size - writing past this size causes oldest data to be removed from
- FileSystem Reset message runs a file system check and forces closed
any open files
- FileSystem updated temporary documentation at
- User-defined fonts can now be created for the GraphicsLCD.
- Macros (#DEFINE) are now a full part of the language. See the
latest manuals for details.
- DateTime now has a Nudge message that facilitates digital-watch
style date entry, a Valid message for detecting invalid dates, and new
PRINT formatting allowing invalid dates to be printed.
- A new SafeData object has been implemented that allows storage of
non-volatile parameters in EEPROM and other devices.
- Valid and Checksum messages may be used to validate the Venom-SC
- AsynchronousSerial Valid message reports serial receive errors.
- HELP has been improved - can now take any keyword or symbol, as well
as global variables. Help on keywords and symbols is limited.
- The Output message to the OperatingSystem allows redirection of the
default output text from PRINT, LIST and HELP:
Output : = <new output stream>
2002 08 15
- The RealTimeClock alarm function has been improved. The only
messages that affect the alarm are now On, Off and SleepUntil. If
you are using the RealTimeClock for controlling the power to your
application, you may need to put in a line that explicitly turns the
clock alarm function on, as MAKE RealTimeClock no longer does this.
- A new message name 'Name' has been added to the Venom-SC system. If
you have any variables or procedures that are called 'name' then you
will need to change them to something else.
- GraphicsLCD Accept Print message now allows sprites to be
incorporated into text strings by including \^xx in the text string.
(xx is the sprite number represented as 2-digit hexadecimal digits).
For example the following would write 'café au lait' to the
graphics LCD provided that an e with an acute accent had been previously
defined as sprite number 3.
PRINT TO obj,"caf\^03 au lait"
2002 07 29
- Software handshaking on the serial ports. Use '2' for the handshake
parameter in MAKE or
serial.Handshake := 2.
- Non-volatile arrays:
You can now put Arrays in the NV-RAM to store
non-volatile parameters etc.
nv_array := an_array.
Copy(1) creates an 'overlay' copy of an existing Array
in the non-volatile RAM area:
the data is not copied, just the header information. To complement
this, you can use the Checksum and Valid messages to validate the
contents of any array. See the Object Reference for details.
- CTRL-C on an empty command line will now stop background tasks
running, if any were active. It prints STOP ALL to let you know this
- PulseCounter ON and OFF messages implemented; and the count can now
2002 07 18
- Dallas 1-Wire bus driver object 'OneWire' enables VM-1 to
communicate with Dallas iButtons and other 1-Wire devices.
2002 07 09
- File system: print fs:0 (where fs is a FileSystem object) no longer
inserts padding spaces.
- File system: print fs:0:string uses the string instead of new line
as a file name separator
2002 06 27
MAKE fs FileSystem("RAM", size)
The FileSystem size parameter is now in bytes instead of kilobytes.
- File system: The colon operator is supported when printing files of
- File system: A size vale of 0 in MAKE FileSystem will find the
existing file system (if any) and use it. Only recommended for command
line use when file system size was unknown.
- HELP file shows file name
- file.Find message is now supported, similar to buffer.Find
- file.Readpoint message is now supported, similar to buffer.Readpoint
- File System Performance improvements.
- Updated documentation for the file system remains available at
2002 06 19
- A beta test version of the file system is available. The
file system is based on non-volatile ramdisk. It supports many
of the same messages as the Buffer class. Temporary
documentation is at:
http://www.microrobotics.co.uk/fs-beta.html. To use the file
system the advice above regarding the init procedure should be
modified: The Free(2) line should read: Free (2) := 50000 for
example, to reserve 50000 bytes of memory for use by the file
system. The file system is incomplete and some messages are not
2002 06 12
- For maximum security the line
Free (2) := 0
should be included early in the init procedure of every application to
sure that the memory system is set up correctly. If this line is missing
there is a very small chance that the system could start with a small
(down to 20K)
amount of heap memory, rather than the usual ~100 or ~500K.
See Free in New Features 2002 06 19.
- The Flash Programmer socket on the new 5805 'Breakout Board' is now
supported. You can use it copy the entire contents of the system
to the external flash. You can also program the external flash with
versions of Venom-SC downloaded from our web site in S-Record format.
The syntax of the flash programming commands is:
Copy(0,flags) ; copy the system flash
Copy(1,flags) ; download S-Record file
The instructions and progress reports for each operation will appear at
the terminal. The flags parameter is a binary pattern that tells the
Copy message which optional operations to perform in sequence. In
general use a value of TRUE for the most comprehensive operation:
Copy(0,TRUE) ; ID, erase, program, verify.
Flag Value Action
ID 1 Print 'Silicon signature' ID
ERASE 2 Erase the device
PROGRAM 4 Program the device
VERIFY 8 Verify the program
Important note: currently, if the device has not been correctly erased
before programming, then the copy or download operation will fail
ungracefully. The controller will reset on the watchdog. You will
probably have to reset the controller and you may have to exit from
the terminal emulator.
- The memory management has been extended. There is now an area of
non-volatile RAM (NV RAM) that is not part of the main heap memory of
the controller. This is intended for the forthcoming RAM filing system,
though it may have other uses later. To set the NV RAM size, see
- System.Free has now been extended with an optional parameter:
Free ; returns the total heap memory free, as before.
Free (0) ; (same as above)
Free (1) ; returns largest heap block.
Free (2) ; returns total size of the NV RAM.
Free (3) ; returns remaining amount of NV RAM.
Also, Free may be used to set the size of the NV RAM:
Note that if the NV RAM size is changed then the controller will reset.
For system security, Free(2) should be set to a constant value in your
procedure to make sure the system heap is a consistent size. For
where NV RAM is not required (e.g. you don't have a RAM filing system),
Free(2) := 0.
- GraphicsLCD:Window active object DISPLAY and Marker now implemented.
Display is not a print keyword, but a message to a GraphicsLCD Window.
disp_obj := win . Display(@variable , fmt1 , fmt2, fmt3)
The fmt parameters are format descriptors with the same values as you
would use after the colons in the PRINT command.
The number of formats is optional from zero to three.
2002 05 07
- See AsynchronousSerial in New Features 2002 05 07.
- AsynchronousSerial now has optional hardware handshaking. To retain
handshaking the MAKE should have a 3rd parameter of value '1'. The
default startup procedure has been altered to reflect this. You may
need to alter your code too.
2002 05 01
- Array MAKE: Arrays may now be created dynamically with MAKE or NEW
as well as statically. This allows arrays of read/write data to be
created dynamically, or to have large arrays without having to have
large amounts of initialisation data in ROM.
- GraphicsLCD:Window Bar is now implemented.
2002 04 18
- The 'Trigger' message has been changed to 'Go' for all objects that
- The PulsesIn class name has been changed to PulseCounter.
- The old, undocumented method of introducing a double quote character
into a string constant has been superseded. It used to be "" but is now
- The GraphicsLCD Sprite message now requires the user to assign a
number to each sprite.
Macros can be used to do this if required. E.g.:
#define TRIANGLE 0
g.sprite (TRIANGLE) := (a.pointer)
- GraphicsLCD: can now be created using 1 or 3 parameters (specifying
- Object printing: Many objects that used to print themselves just as
a plain number now put  round the number to provide a hint that they
are not just an integer. Of course you can still print just the number
by printing the value of a message sent to the object.
- RealTimeClock: The SleepUntil message will now control the clock's
alarm output to enable zero-power sleeping. The alarm line may also be
controlled directly with On and Off.
clock . SleepUntil(time) ; Time: absolute time in seconds.
- GraphicsLCD: LEFT, RIGHT and CENTRE text justification now
- GraphicsLCD: Graticule now implemented.
- NOP: this new keyword compiles to a 'no operation' bytecode, i.e. it
- Escape codes have been introduced into string constants. The escape
character is \.
\" gives a quote character
\$hh where hh is two hex digits (case insensitive)
introduces any ASCII
character into the string.
\ with any other character is completely ignored.
- To complement the macros, constant folding in the compiler has been
It now folds both floating point and integer operations for most of the
both unary (one operand) and binary (two operands).
Constant folding does not yet cover the following operations:
These will be implemented when demanded.
- Equality operators: =
>< >= <=
- Type conversion:
- ABS, all trigonometric,
- AsynchronousSerial: the messages
InputBuffer, OutputBuffer, Look,
Queue, Flush, Free, Format and
Escape have been added.
- A 'Done' message has been added to Timer.