MPE XC7 and VFX Cross Compiler Release Notes
Target specific notes are in RELEASE.XXX.TXT files
MicroProcessor Engineering
133 Hill Lane
Southampton SO15 5AF
England
tel: +44 (0)23 8063 1441
fax: +44 (0)23 8033 9691
net: mpe@mpeforth.com
tech-support@mpeforth.com
web: www.mpeforth.com
When dialling from North America, the full numbers are:
tel: 011 44 23 8063 1441
901 313 4312 for North American access to UK office
fax: 011 44 23 8033 9691
Because of installer changes, this file now includes CR/LF pairs
again.
V7.04 - 15 April 2009
=====================
Added more options for VFX targets running hosted.
Added interpreted ABORT and THROW.
V7.04 - 11 February 2009
========================
Added CRC32 (Polynomial=$EDB8:8320) facility.
Rebuilt on VFX Forth 4.3.
V7.04 - 1 December 2008
=======================
Corrected problems seen by some users of the Stamp editions.
Updated manual with Umbilical Forth IAP and problems sections.
The compiler will complain if you use ATCOLD ( xt -- ) before
an INTERPRETER word of that name has been defined.
V7.03 - 12 September 2008
=========================
Improved source file release.
Allowed SECTIONs to be defined in separate files other than the
main control file.
V7.01 - 3 September 2008
========================
Improved error handling.
Rebuilt on VFX v4.20 chassis, which uses a new INI file mechanism that
is much faster than the previous version (Windows). It was derived
from the Linux version.
Win: After installation, check that the file
mpeparser.dll
has been copied to your Windows\System32 folder.
Lin: After installation, check that the file
mpeparser.*.so
has been copied to the right directory for your distribution.
V7.00 - 28 March 2008
=====================
Corrected call to editor via AIDE on error.
Converted to use VFX Forth as the host Forth, which gives an
increase in compile speed of about ten times. The Leburg EPROM
emulator drivers have been removed.
AIDE command lines should be modified. Command lines that used to
be of the form:
/ide /pauseoff
should now be split into two:
-ide /ide /pauseoff
If you are upgrading from a previous version of AIDE which did not
have the “Command Tail” entry, you will have to update your
configurations manually. Don't forget to press “Save” for each
one. Where you previously had a “Command Line” entry:
/ide /pauseoff
say
c:\buildkit.dev\software\compiler\xmsp430.exe /ide /pauseoff
split this into the two entries “Program/File” and “Command tail”
c:\buildkit.dev\software\compiler\xmsp430.exe
-ide /ide /pauseoff
The -ide switch tells the VFX Forth host to turn off its GUI front
end, and the /ide switch tells the cross compiler to use AIDE for
LOCATE actions.
V6.40 - 12 January 2008
=======================
Added XTL? ( -- flag ) to the interpreter. This returns non-zero
when the Umbilical Forth link is active, i.e. when you are using
Umbilical Forth interactively.
V6.40 - 27 November 2007
========================
Added PLACE ( src len dest -- ) to the interpreter.
V6.40 - 10 October 2007
=======================
V6.40 release.
V6.30 - 20 August 2007
======================
Exposed .FORWARDS for Umbilical Forth systems.
V6.30 - 1 March 2007
====================
Improved error display to use LOCATE mechanism.
V6.30 - 16 January 2007
=======================
Added the following interpretable words:
CMOVE \ addr1 addr2 u -- ; Move data area, first byte
first.
CMOVE> \ addr1 addr2 u -- ; Move data area, last byte first.
and for Harvard targets:
CMOVEC \ addr1 addr2 u -- ; Copy code to data.
CMOVE->C \ addr1 addr2 u -- ; Copy data to code.
CMOVEC->C \ addr1 addr2 u -- ; copy code to code
V6.30 - 3 October 2006
======================
If logging to the printer or a file is set, the section report is
duplicated to the console.
The directive FLUSH-IDATA should be used to set up and lay the RAM
tables for interactive Forth systems. Unlike LAY-RAM-TABLE,
FLUSH-IDATA sets up the vocabulary tables. FLUSH-IDATA is often
used when the output file must be forced to a particular boundary,
e.g. for some TFTP loaders which discard the last block if it is
less than 512 bytes. For example:
Flush-idata
here $1FF + $-0200 and org \ force to 512 byte boundary
Aide: Added time and date output to set real-time clocks. The
output is triggered by ^D in the PowerTerm window, in the form:
n to DOW sec min hr day mon yr SetTime&Date
V6.30 - 29 March 2006
=====================
16 bit targets only: In order to ease development of paged
systems, e.g. Freescale 9S12, some additional directives have been
provided to deal with addresses that need to be held in page:addr
form, where the current page's bank identifier is in the upper 16
bits, and the 16 bit address is in the lower 16 bits.
PL: \ -- ; -- page:chere ; PL:
Behaves like L: but returns a page:addr 32 bit address.
l>hilo \ page:addr -- page addr
Converts a paged address to separate items, addr on top.
l>lohi \ page:addr -- addr page
Converts a paged address to separate items, page on top.
Directives have been added to preserve and restore the current
sections. These can be used during interpretation, e.g.
[SECTIONS \ -- x1 x2 x3 x4 ; preserve current, CDATA,
IDATA, UDATA
IDATA \ temporary switch to IDATA
SECTIONS] \ x1 x2 x3 x4 -- ; restore current, CDATA,
IDATA, UDATA
The pont of these directives is to permit you to switch sections
by type or name during compilation without having to name the
sections to be restored. Note that section restoration behaves as
naming the sections, so that paged 16 bit targets are correctly
handled. Other than that, [SECTIONS ... SECTIONS] has no effect on
the search order.
The log display for 16 bit targets has been changed to incorporate
the page identifier for the xts of banked items, e.g,
abcd : name
is now shown as:
1234:abcd : name
if name is created in a paged area. 1234 indicates the page
identifier given to the corresponding PAGES directive.
V6.30 - 10 February 2006
=======================
Aide updated.
Added INTERPRER versions of , which always compile into the
current CDATA section. These are:
,C \ cell --
W,C \ 16bit --
C,C \ 8bit --
Added INTERPRER versions of , which always compile into the
current IDATA section. These are:
,I \ cell --
W,I \ 16bit --
C,I \ 8bit --
These words were added to ease construction of complex structures
which have portions in both Flash and RAM.
Added interpreter words DATETIME$, DATE$, and TIME$, which compile
the current date and time into the dictionary as counted strings.
Use in target code for example as:
create BuildDate
date$, time$, \ two strings
create DateTime
DateTime$, \ data and time as one string
The compiler can now generate additional output formats for CDATA
sections. Binary image files are always produced. Output format
selectors for the aditional formats are:
NoHex \ Do not generate hex files (default).
HEX-I16 \ Intel Hex for 64k bytes maximum as used for 8-bit
CPUs
HEX-I32 \ Intel Hex for 32 bit linear addresses
HEX-S19 \ Motorola S19 format - 16 bit addresses
HEX-S28 \ Motorola S28 format - 24 bit address range, e.g.
68HC12/9S12
HEX-S37 \ Motorola S37 format - 32 bit address range, e.g.
683xx
The initial execution address can be set for S28 and S37 formats
by:
SetBoot
When programming paged Flash, e.g. for a 68HC12/9S12 CPU,
programming tools often require a physical base address in the
Flash, rather than the 64k addresses used in the SECTION and PAGES
definitions. When a hex file is output, the base address of a
section can be overridden using
physaddr SetFlashBase
immediately after the section is defined, e.g.
$8000 $BFFF cdata bank rombank \ 16k bank in 64k address range
$30 pages bank0
$0C0000 SetFlashBase \ where this bank is in the
Flash
$31 pages bank1
$0C4000 SetFlashBase \ where this bank is in the
Flash
$32 pages bank2
$0C8000 SetFlashBase \ where this bank is in the
Flash
V6.30 - 2 November 2005
=======================
The interpreter now accepts
C,(R) W,(R) ,(R)
for laying data in the current IDATA section.
V6.30 - 5 May 2005
==================
Interpreter accepts -> as a synonym for TO.
Updated PDF manuals.
Added interpreted C" and S".
Added the following interpreter number display words:
.DWORD .LWORD .HEX ( u -- )
These are synonyms and provide unsigned hexadecimal output
regardless of the current base.
.DEC ( n -- )
This provides signed decimal output regardless of the current
base.
V6.20 - 6 January 2005
======================
Added support for TO and ADDR in compiler extension between
COMPILER and TARGET. The following code is now accepted:
5 value foo
compiler
: NewProc 6 to foo ;
target
: bar ... proc ... ;
V6.20 - 11 November 2004
========================
Revamped the literal pool handler to lay duplicate entries only
once. This change only affects RISC CPUs such as ARM.
Improved error reporting for TO and ->.
V6.20 - 7 April 2004
====================
Updated installer to avoid Windows XP problems.
Corrected CPU hogging problem with AIDE and some versions of
Windows.
V6.20 - 6 August 2003
=====================
Added -RAM-TABLE ( -- ) to inhibit RAM table generation.
Without this switch, the contents of the IDATA sections
are appended to the first CDATA section file. This switch
allows smaller systems to be generated at the cost of
having to initialise ALL variables if this is necessary.
The directive LAY-RAM-TABLE ( -- ) can be used before
FINIS to force the IDATA sections be appended at the
current CDATA location. This is useful for image files
which must be rounded to a multiple of a certain size,
or which need to generate or patch operating system
dependent information, e.g. ARM AIF files for RISCOS.
V6.10 - 28 April 2003
=====================
The CPU hogging problem in AIDE has been fixed. LOCATE
in the cross compiler can now be configured in AIDE to
use an external editor from the IDE -> Configure dialog.
V6.10 - 24 March 2003
=====================
LOCATE will now find labels and equates.
Added .FORWARDS ( -- ) which displays words that have been
forward referenced, even if resolved later.
Improved code generation from compiler words between
COMPILER and TARGET in particular for fields. For VFX
compilers small factors involving structures may often
usefully be defined as compiler macros as the overhead
of the code is often overcome by the reduction in stack
shuffling.
Added protection against overflowing the XREF table.
V6.10 - 13 October 2002
=======================
Added interpreted REVEAL ( -- ) and HIDE ( -- ) for use
in recursive definitions. Also added IT ( -- xt ) which
returns the XT of the last colon definition.
Added SEC-LEN to return length of the current memory
section.
Added KB and MB for calculating sizes.
Kb \ n -- n*1024
Mb \ n -- n*1048576
Changed some section error numbers to avoid confusion.
Added 'C'-isms to support conversion of CPU register
definitions from C and assembler header files.
// - comment to end of line
/* comment N.B. white space delimited */
#define text
For #DEFINE note that the text up to the end of the line is
evaluated once at compile time and produces an EQUate of that
single integer value.
V6.10 - 13 November 2001
========================
Added more tools to the TOOLS directory. Most tools will
have "read me" or help files, or will display usage
information when run with no command line.
Probe2 DOS serial terminal
Great for low level work and can handle
multiple channels simultaneously.
SplitImg File splitter for EPROM/Flash programmers.
Handles splitting files for 16, 24, 32 and 64
bit CPUs into 8 and 16 bit units.
Tabs Tool to add/remove/replace tab characters.
Ideal for updating source files which do not
conform to your tab conventions.
Corrected IDATA initialisation problem for multiple IDATA
sections, one or more of which contains no initialisation
data.
V6.10 - 13 July 2001
====================
Changed (corrected) the interpreted behaviour of C, W, and ,
for Harvard targets, i.e. those with separate code and data
spaces. When IDATA or UDATA has been specified, a Harvard
target will now store the data into the data space.
Added test code handlers TESTING [TEST and TEST].
In order to allow test code to be built into the source code,
conditional compilation of test code is provided, controlled
by the word TESTING.
0 TESTING \ test code will NOT be compiled (default)
1 TESTING \ test code will be compiled
Test code should be surrounded by the markers [TEST and TEST].
0 TESTING
[TEST
This will all be ignored
TEST]
1 TESTING
[TEST
: foo .... ;
TEST]
In the first example all the code between [TEST and TEST] will
be ignored. In the second case the code between [TEST and TEST]
will be compiled.
V6.10 - 08 Apr 2001
===================
This paragraph only affects operations for 16 bit targets.
Restored conversion of double numbers to correct format in
16 bit Umbilical Forth targets. Added D. to the directly
interpreted commands, and added 16 bit conversion to interpreting
versions of words using double numbers. Note that conversion
is NOT applied to 2CONSTANT and 2VARIABLE as these are
defined in the ANS specification in terms of cell pairs.
The list of special cases when interpreting is displayed
by the word INTERPRETERS.
Fixed a bug in the local label code that only affects prefix
assemblers, which we've been using for ten to fifteen years now!
Restored interpreted 2@ and 2!.
Added Z", to lay zero terminated strings from the interpreter.
The exact layout and alignment of the string is CPU dependent.
Exposed XREF-KB ( #kb -- ) which allows the user to set the size
of the cross reference table before +XREFS is used. Only large
applications will require this as the default 1Mb is normally
adequate. However, we do have a client with a 50Mb file ...
V6.10 - 18 Dec 2000
===================
Improved Umbilical Forth error handling when interpreting from a
file.
Added CWD "change working directory" during interpretation. This
behaves as the host CD. If no pathname is supplied, the current
directory is displayed. If a pathname is supplied, this becomes
the current directory.
CWD \MyProject\Tests
Added DIR to list current directory.
Added versions of ALLOT which affect the current xDATA section.
CALLOT IALLOT UALLOT
V6.10 - 10 Oct 2000
===================
Added DATA-FILE which loads a binary image file into target memory
at HERE and reserves space for it, returning the size of the file.
The file is loaded into the current section, so make sure to use
CDATA or IDATA as appropriate. Macros in the file name are
expanded but no default extension is assumed. For example:
cdata create image
data-file %AppDir%\image.bin
cr . ." bytes loaded"
V6.10 - 27 Sept 2000
====================
Moved alignment of variables into target code generators.
V6.10 - 23 August 2000
======================
Corrected the use of USER variables and VALUES in colon
definitions between COMPILER and TARGET. The use of TO
and ADDR is not yet supported between COMPILER/INTERPRETER
and TARGET.
Added CALIGN IALIGN UALIGN which will align the current
CDATA IDATA or UDATA section respectively.
V6.10 - 4 August 2000
=====================
Rebuit using PFW v2.23.
Added direct access to the ports under Windows NT to support the
parallel port access to SPI and BDM. Note that an additional
driver must be installed using NTPORT.EXE in the COMPILER\XTRA
directory. Note also that this driver is the public domain GIVEIO
driver, and *completely* bypasses the normal Windows NT i/o
protection. Once this driver is used by a program, you can access
*any* i/o port directly. MPE accepts no responsibility for the use
of this driver. That having been said, it works.
NT-ACCESS-PORTS \ -- ; enable access
PIO-TEST \ -- ; after NT-ACCESS-PORTS, run a test.
\ A familiar warble indicates success!
NT-ACCESS-PORTS is available before and after CROSS-COMPILE.
PIO-TEST must be run before CROSS-COMPILE has been executed.
If you are using parallel-port facilities under Windows NTx, 2000,
or Millenium, you are likely to need this driver. If you can run
PIO-TEST without NT-ACCESS-PORTS, you do not need the driver.
Added WORDLIST support through the following words:
wordlist \ -- wid(t) ; create a WORDLIST
set-#wid-threads \ n -- ; set number of threads in a WORDLIST
\ must be binary number, default is 16
get-#wid-threads \ -- n ; get number of threads
If a LABEL name INIT-WID-LINK exists the cell at INIT-WID-LINK
will be initialised by the compiler. The structure of a WORDLIST
is:
cell #threads a wid points here
#threads cells wid of previous WORDLIST
cell link points to wid of previous wordlist
Note that the compiler does not yet support the use of WORDLISTs
for name creation. This will be provided when when the ANS
SEARCH-ORDER wordset is added to the compiler.
V6.10 - 17 July 2000
====================
Restored the interpreted behaviour of NOT to be the bitwise
inversion provided by the ANS word INVERT. In general all code
should use INVERT for a bitwise inversion as this avoids the
portability issues caused by differing Forth versions defining
NOT as 0= or INVERT.
Tightened up return from COMPILER and INTERPRETER to TARGET
definitions.
Added WVARIABLE for 32 bit targets to support legacy systems.
Extended ADDR handling to children of VALUE.
V6.10 - 1 June 2000
===================
Corrected potential forward reference problems when current
section is not CDATA. These would only have affected STC Harvard
targets such as the 8051.
Added the ANS word UNUSED ( -- u/n) which returns the amount of
free space in the current section. Note that the return value is
the difference between the section top pointer and current
location (dictionary) pointer. If the value goes negative, these
two pointers have crossed over and you have a problem. Note that
the ANS specification requires a u to be returned, which prevents
error checking. Note that the value returned is a 32 bit host
cell, so returning a signed value presents no practical problems.
Enhanced the action of COMPILER extensions to be more general.
When the COMPILER mechanism cannot cope, it will report this.
[REQUIRED] has been extended to return true for unresolved
labels as well as unresolved words. This allows the library
mechanism to be used to create default interrupt handlers if a
routine has not been provided by the programmer.
Added display of code size generated by each file.
Refactored code generation of constants and variables for
portability between CPUs.
Added .LO and .HI for 16 bit targets.
.LO \ xxyy -- 00yy ; extract low byte
.HI \ xxyy -- 00xx ; extract high byte
USER variables can be interpreted by Umbilical Forth.
Corrected EQUATES which was damaged by the introduction
of -SHOW-UNRESOLVED.
XREF information is generated for interpreted references. This
is done so that use of execution tables produce references to
words. Note also that references within assembler code using
' will also produce references. References are suppressed
for XREF itself, the disassembler/decompiler and LOCATE.
The Umbilical Forth interpreter will now interpret target
versions of the code if they exist rather than host versions.
This change makes target testing easier.
The full, IRTC and Forth Stamp compilers are built from the
same code base.
Added INT and PTR single cell field types.
Fixed some anomalous behaviour in :NONAME.
Added interpretation of the Forth-83 word .( for legacy code.
Added interpretation of ALLOT&ERASE
Partial compilation is as yet untested for v6.1 compilers. Note
that the v6.x compilers generate a new EXE file as part of
the process, and it is this file that should be run to resume
compilation.
V6.06 - 21 Feb 2000
==================
Missing (unresolved) actions of defining words are reported.
Added INLINE-NEVER for definitions that must not be inlined.
Added the interpreter word M", which behaves like ", but
expands macros at compile time.
V6.06 - 13 Jan 2000
===================
Added COMPILERS to display the compilation words.
Added INTERPRETERS to display the interpretation words.
Added interpretation support for software floating point for
16 bit targets. Only the following floating point words are
supported during interpretation:
INTEGERS REALS F+ F- F* F/ FDUP F.
Note that these words are sensitive to the use of HOST-MATH and
TARGET-MATH.
Added switches to aid bring up of an Umbilical Forth target. When
serial debugging is enabled, characters are displayed as hex
bytes. Characters transmitted by the PC are in the form , and
characters received by the PC are shown in the form [ab].
+SERIAL-DEBUG \ -- ; enable serial debugging
-SERIAL-DEBUG \ -- ; disable serial debugging
SERIAL-DEBUG? \ -- flag ; true when serial debugging enabled
The ALIGN and ALIGNED directives are now sensitive to the state of
the alignment switches. This makes writing ANS portable code
easier in that it is completely ANS compliant. If you need to
force occasional alignment you can either use the alignment
setting switches before and after using ALIGN, or you can use the
following trick:
interpreter
: XALIGN align(t) ;
: XALIGNED aligned(t) ;
target
... XALIGN ...
Added the following switches to control whether or not unresolved
target words are shown by WORDS and friends:
+SHOW-UNRESOLVED
-SHOW-UNRESOLVED ( default )
V6.05 - 15 Nov 1999
===================
Fixed stack fault in SERIAL.
Made interpretive behaviour of ", sensitive to section type.
Internal changes to ease porting.
Made INTERACTIVE mode safe with EPROM emulator use. Note that this
imposes the requirement for the target processor to be sleeping
while in KEY just like Umbilical Forth. This has an impact on
multitasking systems for which KEY calls PAUSE and the processor
may never be put to sleep.
Also added support for the use of local variables in COMPILER and
INTERPRETER words. Note the following restrictions when using
locals in this way.
1) The addresses of locals are *host* addresses and not *target*
addresses. Any reference to a local array or the use of ADDR will
return a *host* address. This means that if you just copy a
version of your code that worked on a hosted Forth such as
ProForth VFX, you must either remove the use of local arrays and
ADDR, or use memory operators such as @(H) and !(H) which will
generate *host* references.
2) Only the default (fetch) and store (TO and ->) operations are
fully supported when cross compiling. Use of operations such as
ADD and SUB will cause problems.
Use of target VALUEs between COMPILER and INTERPRETER is not
supported!
This is a bug and will be fixed.
Added additional support for debugging when extending the
compiler. There are host versions of words such as VOCS and ORDER,
but with (H) suffices, e.g. WORDS(H).
Fixed interpretation behaviour of WORD.
Changed behaviour of COMPILE to be less implementation dependent
Added stack check to end of compilation checking. This will report
the stack depth if non-zero at the end of compilation. Note that
false warnings may be given if FINIS or UMBILICAL-FORTH is not in
the first control file loaded.
Removed debug code from CODE.
Enhanced use of COMPILER and INTERPRETER with literals (numbers)
so that EQUates, CONSTANTs, VARIABLES are now correctly handled.
V6.04 - 6 Aug 1999
=====
Added support for LOCATE through AIDE.
Modified Header creation to be more fully application definable.
Added more optimiser hooks.
V6.03
=====
Restored CVARIABLE to the system.
Fixed vocabulary construction for 16 bit ANS targets.
ALIAS is now deprecated, and is replaced by SYNONYM .
V6.02
=====
Corrected bug in the symbol table initialisation. This bug had
been lurking for many years, and would have only affected users
with large applications using more than 100k of symbol space.
Added INTERACTIVE directive. Used before FINIS, the compiler
produces output files and terminates its cross compilation, but
stays resident so that tools such as XREF and LOCATE
can be used. Run HELP for more details. All actions available
during interpretation are still available. INTERACTIVE is ideal
for users producing a standalone Forth, but who want to have
access to the compiler's symbol table after completion of the
cross compilation run, so as to use tools such as XREF and
LOCATE .
Exposed XREF-ALL and XREF-UNUSED.
V6.01
=====
Exposed BLANKC ERASEC FILLC during interpretation of Harvard
targets such as the 8051.
Corrected spacing in "is redefined message"
The final report does not halt if a section with invalid or out of
range pointers is found.
The Automatic build bumber system has been overhauled.
BUILDFILE \ "" -- ; set the build file
BUILDFILE BUILD.NO
\ BUILD.NO is the default file name.
MAKE-BUILD \ addr(t) -- ; read build info,
\ copy to target (counted string)
\ Use this to copy the string to a
\ pre-allocated buffer.
BUILD$, \ -- ; read build info, and lay in the
\ target (counted string)
\ e.g. CREATE VERSION$ BUILD$, only
\ allocates the minimum.
UPDATE-BUILD \ -- ; update the build number
\ Place this just before FINIS so that
\ a successful build
\ updates the build number.
Added more error reporting.
Added optimiser support for children of FIELD, which now generate
the equivalent of LIT + in VFX compilers, or a reference in
others. Children of FIELD may also be interpreted.