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.