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 includes CR/LF pairs again. V7.62 - 26 February 2022 ======================== Added ENUM2{ ... } and ENUM2 [name] { ... } and ENUM8{ ... } and and ENUM8 [name] { ... } to generate peripheral structures for 16 and 64 bit targets. These work like the previous ENUM{ ... } but the step size is two or eight. Added ENUM-SEP-C and ENUM-SEP-ASM to specify the item separators to be ',' (C) or ';' (ASM). ENUM { a, b, d=48, e } \ C style ENUM { a; b; d=48; e } \ ASM style The ASM style is used by new MSP430 SFR files. v7.61 - 4 June 2021 =================== Added additional output format, ReadMemH, which generates an auxiliary output file in Verilog ReadMemH format with 32 bit address and data units. v7.61 - 27 November 2020 ======================== DATA-FILE opens file in R/O mode. v7.61 - 20 January 2020 ======================= Fixed error locate bug. v7.61 - 15 November 2019 ======================== XREF update to enhance compatibility with VFX Forth host. Converted to run on VFX v5.1 with Dual words and recognisers. The old string handler word "" has been removed. Use the standard word C" instead. v7.51 - 28 January 2019 ======================= Added ENUM{ ... } and ENUM4 [name] { ... } and ENUM4{ ... } to generate peripheral structures for 32 bit targets. These work like the previous ENUM{ ... } but the step size is four. v7.50 - 12 March 2017 ===================== The cross-compiler now checks for imbalance in [IF] ... [THEN] at the end of the file. Please report any failure in MPE files so that we can correct them. v7.41 - 8 December 2015 ======================= Added settings to control pauses in console listings from words such as WORDS and XREF. /-PAUSES \ -- ; stop pauses in console listings /+PAUSES \ -- ; enable pauses in console listings v7.40 - 31 May 2015 =================== Extended locals now support the {: ... :} notation as well as the { ... } notation. Updated software floating point support and added IEEE FP support. See the manual for more details. Updated number of relocatable CODE and DATA entries. Updated interpreted ENUM to be switchable between EQU and CONSTANT. v7.35 - 25 August 2014 ====================== The licence has changed - Lite and Evaluation editions may not be used commercially. See the XC7 generic manual for more details. Added interpreted versions of -LEADING PARSE and PARSE-NAME. v7.34 - 28 June 2014 ==================== The AFTERWARDS chain is run at the end of UMBILICAL-FORTH after the section download operation. Added a file delete operation: fdel The file name and status are displayed. Usually used with AFTERWARDS. Added a file copy operation: fcopy The file names and status are displayed. Usually used with AFTERWARDS. The default extension for the binary output files is .IMG. It can be changed with SETBINEXT e.g. setBinExt .bin Added an interpreter for C enums to ease parsing of C header files. v7.32 - 22 April 2014 ===================== Added CONST which is a version of EQU that can be switched between an EQU and a CONSTANT. This allows lists of equates, e.g. peripheral offsets or addresses, to be compiled as CONSTANTs when debugging and as space-saving EQUs for production code. : const \ x -- ; -- x ; x CONST : +const-visible \ -- ; CONST is CONSTANT : -const-visible \ -- ; CONST is EQU v7.32 - 14 February 2014 ======================== Refined some error handling to show source line. Added option for target compilation to Flash with immediate bit in header set to 0. Use: +FlashCompile \ compile with immediate bit set to 0 -FlashCompile \ compile with immediate bit set to 1 -Flash compile is the default for compatibility with previous operation. v7.30 - 18 October 2013 ======================= Added AFTERWARDS to execute actions after compilation has finished. afterwards ." hello" afterwards ." there" cr All the text that follows AFTERWARDS is treated as Forth source to be executed. v7.20 - 12 June 2012 ==================== Improved resolution of compilation time report. v7.20 - 12 June 2012 ==================== Rebuilt on latest VFX host. See the manual xc7.pdf for more details. Added interpreter. $, caddr len -- ; place string in dictionary as a counted string Added interpreter words for escaped strings. See the manual for details of how escaped strings are parsed. \", Lay escaped string in dictionary as counted string. The end of the string is not aligned. Z\", Lay an escaped string indictionary as a zero terminated string. The end of the string is not aligned. C\" An escaped version of C". S\" An escaped version of S". Added compiler words C\" An escaped version of C". S\" An escaped version of S". Improved LOCATE for words defined in the control file. Added the interpreter word .SOURCES ( -- ) that displays a list of source files. Fixed problem with error displays caused by a change to the host Forth. Added INTERPRETER words: .WORD \ w -- ; display 16 bits as four hex digits .BYTE \ b -- ; display 8 bits as two hex digits v7.10 - 28 January 2012 ======================= Added interpreter words BIN-ALIGNED \ addr u -- addr' ; align given address BIN-ALIGN \ u -- ; align current section U must be a power of two. v7.10 - 1 December 2011 ======================= Added floating point number entry format selector directives. ANS-FLOATS MPE-FLOATS LEGACY-FLOATS Added byte reversal operations to cross-interpreter. Forced target local variable data to be initialised at cross- compiler start up. This fixes problems with snapshots. v7.10 - 20 June 2011 ==================== Added interpreters for KHz \ u -- u*1000 MHz \ u -- u*1000000 V7.10 - 15 April 2011 ===================== Added two XModem CRC options to checksum generation. V7.10 - 17 February 2011 ======================== Allowed Stamp compilers to have user-definable CDATA section start addresses. Rebuilt on latest VFX Forth with improved display performance. V7.10 - 10 December 2010 ======================== Win: When run without AIDE, the cross-compiler's target LOCATE now uses the settings in Options -> Set Editor... Added directive to add 16 bit CRC to section file names. +NamesWithCRCs ( -- ) -NamesWithCRCs ( -- ; default ) The section name PROG will generate a file PROG_12AB, where the last four characters are a 16 bit CRC in hexadecimal. Added directive to only save CDATA sections to disk. +SaveCdataOnly ( -- ) -SaveCdataOnly ( -- ; default ) Improved performance of writes to the current IDATA section. Added compiler directives for generating tightly integrated bootloader and application systems. See the manual for more details. V7.06 - 15 September 2010 ========================= The number of threads in new target vocabularies can be set and restored. : set-#voc-threads \ n -- \ Sets the number of target threads used by Vocabulary. \ N must be 1, 2, 4, 8, or 16. : get-#voc-threads \ -- n \ Returns the number of threads used by Vocabulary. V7.06 - 17 August 2010 ====================== Rebuilt on latest VFX Forth with a faster buffered file device. Saving of HEX and S-record files is now much faster. AIDE and the host Forth contain minor updates for Windows 7. V7.06 - 22 April 2010 ===================== Refactored the section download code originally used by Umbilical Forth in order to make it easier to add JTAG/BDM Flash programmer and debugger support. V7.06 - 5 March 2010 ==================== Changed the keyboard check to once per file, significantly improving overall compilation speed. V7.06 - 12 February 2010 ======================== Corrected the error handler for unconsumed references, avoiding the irritating crashed when you have a bug in your assembler code. Note that this fix applies to most, but not all, cross-assemblers. V7.05 - 18 January 2010 ======================= Linux: Updated the serial driver to work better with USB serial adapters. Updated the serial interface for better error protection with serial drivers that interpret control strings. V7.05 - 10 July 2009 ==================== Updated for VFX Forth v4.4 kernel changes and ANS behaviours. Note that a VFX Forth release of 10 July or later is required. Windows v4.4 build 2897, Linux build abcd. The changes fix some display issues with ." and string handling with S" and friends. V7.05 - 30 May 2009 =================== Updated version number to match target kernel changes. 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.