OSDN Git Service

V4.0
[fast-forth/master.git] / README.md
index 8b97ac1..97d22b2 100644 (file)
--- a/README.md
+++ b/README.md
-FastForth for MSP430FRxxxxTI's chips, from 16k FRAM 
-==================================================
+## FastForth for MSP430FRxxxx TI's CPUs, light, fast, reliable.
 
-Tested on all MSP-EXP430FRxxxx TI launchpads (5739,5969,5994,6989,4133,2355,2433) and CHIPSTICKFR2433, at 0.5, 1, 2, 4, 8, 12, 16 MHz plus 20MHz and 24MHz with FR23xx,FR57xx devices.
 
-Fast Forth is a fast and well-made embedded interpreter/assembler/compiler, very interesting because of its size of 6 KB.
-This includes the FORTH language, a symbolic assembler without labels, conditional compilation, a 16-input search engine which
-speeds up the Forth interpreter by a factor of 4 and a connection to the serial terminal (TERATERM.exe), with 3 wires software flow control (XON/XOFF) and/or 4 wires hardware control flow, up to 6 Mbds.
-If your goal is to program a MSP430FRxxxx in assembler, FAST FORTH is the Swiss Army knife you absolutely need!
+Tested on TI MSP-EXP430FR
+[5739](https://duckduckgo.com/?q=MSP-EXP430FR5739&iax=images&ia=images),
+[**5969**](https://duckduckgo.com/?q=MSP-EXP430FR5969&iax=images&ia=images),
+[**5994**](https://duckduckgo.com/?q=MSP-EXP430FR5994&iax=images&ia=images),
+[6989](https://duckduckgo.com/?q=MSP-EXP430FR6989&iax=images&ia=images),
+[4133](https://duckduckgo.com/?q=MSP-EXP430FR4133&iax=images&ia=images),
+[2476](https://duckduckgo.com/?q=LP-MSP430FR2476&iax=images&ia=images),
+[**2355**](https://duckduckgo.com/?q=MSP-EXP430FR2355&iax=images&ia=images),
+[2433](https://duckduckgo.com/?q=MSP-EXP430FR2433&iax=images&ia=images) launchpads, at 1, 2, 4, 8, 12, 16 MHz plus 20 & 24 MHz with MSP430FR(23xx,57xx) devices.
 
-For only 3 kbytes in addition, you have the primitives to access the SD\_CARD FAT16 and FAT32: read, write, del, download source files and to copy them from PC to the SD_Card.
-It works with all SD\_CARD memories from 64MB to 64GB. The cycle of read/write byte is below 1 us @ 16 MHz.
-This enables to make a fast data logger with a small footprint as a MSP430FR5738 QFN24.
 
-With all kernel options FastForth size is under 10kB.
+note: if you want to write a program to make a LED flash, i suggest you to go [here](https://www.raspberrypi.com),
+      but if you want to deepen your programming basics, you've come to the right place.
 
-    The files launchpad_xMHz.txt are the executables ready to use with 
-    a PL2303HXD cable and a serial terminal (TERATERM.exe) at 115200Bds with XON/XOFF,
-    or RTS hardware flow control
-    ------------------------------------------------------------------------------------------
-    WARNING! don't use it to supply your launchpad: red wire is 5V ==> MSP430FRxxxx destroyed!
-    ------------------------------------------------------------------------------------------
-    (you can modify this by opening the box and by welding red wire on 3.3V pad).
-    
-     TI Launchpad      PL2302HXD cable
-               RX <--- TX
-               TX ---> RX
-              GND <--> GND
-              RTS ---> CTS (not necessary if software XON/XOFF flow control
-                            see in your launchpad.asm to find RTS pin).
-
-    The interest of XON/XOFF flow control is to allow 3.75kV galvanic isolation of terminal input
-    with SOIC8 Si8622EC, or better yet, powered 5kV galvanic isolation with SOIC16 ISOW7821.
-    
-    If you want to change the terminal baudrate on the fly (230400 bds up to 6 Mbds),
-    download to your launchpad the file \MSP430-FORTH\CHNGBAUD.4th.
-    
-    To see all compilation options, download \MSP430-FORTH\FastForthSpecs.4th
+FastForth is a "Just In First" Load-Interpret-Compile Operating System for all the 16/20 bits CPU MSP430FRxxxx (MSP430 with FRAM) :
+
+* LOAD: choice of the TERMINAL interface:
+
+    * UART TERMINAL up to 6MBds @ MCLK=24MHz, with software (XON/XOFF) or hardware (RTS) control flow, **transmit delay: 0 ms/char, 0 ms/line**
+
+    * a very well designed **I2C TERMINAL**, with a full duplex behaviour, ready to communicate with all the targets **I2C_FastForth** wired on its I2C bus,
     
-    Once the Fast Forth kernel is loaded in the target FRAM memory, you add assembly code or 
-    FORTH code, or both, by downloading your source files that the embedded FastForth interprets and
-    compiles.    
-    Beforehand, the preprocessor GEMA, by means of a \config\gema\target.pat file, will have translated
-    the generic source file.f in a targeted source file.4th. This allows the assembler to use
-    symbolic addresses for all peripheral registers without having to declare them in the embedded FORTH.
-    A set of .bat files in \MSP430-FORTH folder is furnished to do this automatically.
+* INTERPRET: with a 16-entry word-set that speeds up the FORTH interpreter by 4,
 
-    The download, interpretation and compilation of a source_file.4th (without comments) is done
-    at a throughput up to 40/80/120 kbytes/sec with a 8/16/24 MHz clock. 
-    Considering a ratio 4/1, that of the compiled code is 10/20/30 kbytes/sec.
+* COMPILE: in addition to the FORTH engine, the **MSP430 assembler, label free, with the TI's syntax** (not the FORTH one!),
 
-    After downloading of complementary words in \MSP430-FORTH\ANS_COMP.f, FastForth executes CORETEST.4th
-    without errors which ensures its compatibility with the FORTH CORE ANS94 standard.
+and as result "Load Interpret Compile" a source file is faster and easier than **just** loading its equivalent TI.txt binary file via the TI's eZFET interface. 
+For example, with a target running at 24MHz, UART=6MBds 8n1, an USBtoUART bridge [PL2303GC](https://duckduckgo.com/?q=DSD+TECH+SH-U06A) 
+and [Teraterm.exe](https://osdn.net/projects/ttssh2/releases/) as TERMINAL, 
+the "JIF" process of the /MSP430-FORTH/CORETEST.4TH file is done at an **effective rate** up to 800 kBds, up to 500 kBds with an I2C_Slave target running at 24MHz, and beyond 1Mbit/s from a SD_CARD.  
+This is, by far, unparalleled on the planet FORTH, and on others too.   
 
-    Notice that FAST FORTH interprets lines up to 84 chars, only SPACE as delimiter, only CR+LF as
-    End Of Line, and BACKSPACE. 
-    And that the high limit of program memory is $FF80. 
+Despite its **size of 4.75 kb** FastForth includes:
 
-    Finally, using the SCITE editor as IDE, all is ready to do everything from its "tools" menu.
+* FORTH kernel with interpreting decimal, hex, binary (#,$,% prefixed) numbers, digits separator '_', 'char', double numbers and Q15.16 numbers,
 
-What is new ?
--------------
+* the assembler for MSP430 (with TI's syntax),
 
-V209
+* a good error handling which discards the "JIF" process of source files and thus avoids system crash,
 
-    -26 bytes.
-    V3 prerelease
-    added experimental extended_assembler (MSP430FR5969,MSP430FR5994,MSP430FR6989)
+* a memory management which can be modulated according to these 3 levels (software|hardware): `-1 SYS`|`<SW1+RST>`, `MARKER`|, `6 SYS`|`<RST>`.
 
-V208
+* everything you need to write a real time application:
 
-    -58 bytes.
-    Simplified directory structure of project.
-    Added switch DOUBLE_INPUT as kernel compilation ADDON, removed switch LOWERCASE.
-    Added \MSP430-FORTH\CORDIC.f for aficionados.
-    Added FastForthSpecs.4th which shows all specs of FastForth.
-    Corrected LITERAL (double LITERAL part).
-    Modified ACCEPT COLD WARM ?ABORT, S", QNUMBER.
+    * the complete set of the FORTH building definitions,
 
-V207 
+    * conditional compilation,
 
-    -50 bytes.
-    Unlocking I/O's is transfered from RESET to WARM.
-    Thus, by redirecting WARM, you can add I/O's configuration of your application before unlock them.
+    * thanks to [GEMA preprocessor](http://gema.sourceforge.net/new/index.shtml), the compilation of all symbolic addresses without having to declare them in FORTH, 
 
-        two options to do this:
-    
-            Light option: 
-            your START routine is inserted in WARM and continues with the default WARM. 
-            Search "START" in the \MSP430_FORTH\IR_RC5.f file as application example.
+    * easy roundtrip between FORTH and ASSEMBLER levels with only two 'one word' switches: `HI2LO`, `LO2HI`,
 
-            Complete option: 
-            START routine replaces WARM and continues with ABORT (without WARM message).
-            In this case, you can also change the Reset events handling but you will need to unlock I/O's 
-            and configure TERMINAL I/O's in your START routine. 
-            Search "activate I/O" in \MSP430_FORTH\RC5toLCD.f file to see how to do.
-     
-    Bugs corrected in target.asm, target.pat and device.inc files.
+    * automatic releasing memory with `MARKER` and `RST_SET`/`RST_RET` tags,
 
-V206
+    * Fully configurable sequences reset, init and background,
 
-    The terminal baudrate can be changed on the fly. Download MSP430-FORTH\CHNGBAUD.f to test.
+    * CPU in sleep mode LPM0|LPM4 in awaiting a command from UART|I2C TERMINAL, and ready to process any interrupts.
 
-    forthMSP430FR.asm: 
+If you want to quickly get an idea of what Fast Forth can do, see the /MSP430-FORTH/UARTI2CS.f application file. 
+You will see that the FORTH language is used here as packaging of the program written in assembler.
+See /MSP430-FORTH/FF_SPECS.f for another point of view.
 
-         Bugs corrected: ALSO and :NONAME (option).
+For only 3 kbytes in addition, we have the primitives to access the SD_CARD FAT32: read, write, del, download source files and also to copy them from PC to the SD_Card.
+It works with all SD\_CARD memories from 4GB to 64GB with FAT32 format.
 
-         The structure of primary DEFERred words as KEY,EMIT,CR,WARM... is modified,
-                          -------
-         the address of their default execute part, without name, can be found with:
-         ' <name> >BODY
+With all the kernel addons, including the 20 bits MSP430\_X assembler and the SD\_Card driver, FastForth size is **10 kB**.
 
-             example, after this entry: ' DROP IS KEY
-             KEY (or ' KEY EXECUTE) runs DROP i.e. runs the redirection made by IS,
-             ' KEY >BODY EXECUTE runs KEY, the default action at the BODY address.
+Once downloading /MSP430-FORTH/CORE_ANS.f file (2.25 kb), FastForth passes the tests: /MSP430-FORTH/CORETEST.4TH ( CORE ANS94 + COREPLUSTEST ), thus proving its compliance with the ANS94 standard.
 
-             and: ' KEY >BODY IS KEY
-             restore the default action of this primary DEFERred word.
-                                                -------
+However, if all works well with Windows 10, it works less well with Linux due to the lack of a good alternative to TERATERM...
 
-        WARNING! you cannot do that with words created by DEFER !
-        DEFER creates only secondary DEFERred words, without BODY !
-                            ---------
+Note: please, for each update download all subdirectories to correctly update the project.
 
-        to build a primary DEFERred FORTH word, 
-                    -------
-        you must create a DEFERred word followed by a
-        :NONAME definition, ended by ; IS <name>
+## how to connect TERMINAL
 
-             DEFER truc
+    The files \binaries\launchpad_xMHz.txt are the executables ready to use with a serial terminal 
+    (TERATERM.exe), with XON/XOFF or RTS_hardware flow controls and a PL2303TA/CP2102 cable.
+    ------------------------------------------------------------------------------------------
+    WARNING! doesn't use it to supply your launchpad: red wire is 5V ==> MSP430FRxxxx destroyed!
+    ------------------------------------------------------------------------------------------
+    (modify this first: open the box and weld red wire on 3.3V pad).
+
+### programming with MSP430Flasher/UniFlash and FET interface:
+
+            J101 connector
+                    |
+                    v
+     TI Launchpad <--> FET interface  <-------------> USB <-------->COMx<----> MSP430Flasher.exe/UniFlash
+              Vcc <--- 3V3
+       TST/SBWTCK <--> SBWTCK        ) 
+              GND <--> GND           > used to program MAIN
+      RST/SBWTDIO <--> SBWTDIO       ) 
+
+     TI Launchpad <--> CP2102/PL2303 cable <--------> USB <-------->COMy<----> TERATERM.exe 
+               RX <--- TX            )
+              GND <--> GND           > FastForth TERMINAL
+               TX ---> RX            )
+     Pin Px.y RTS ---> CTS (optionnal) RTS pin Px.y is described in your \inc\launchpad.asm)
+    
+## Out of the box
 
-             :NONAME         \ does nothing (for the example)
-                 DUP
-                 DROP
-             ; IS truc
+Once FastForth is loaded in the target FRAM memory, you add assembly code or FORTH code, or both,
+by downloading your source files which embedded FastForth interprets and compiles.
+    
+Beforehand, the preprocessor GEMA, by means of a \config\gema\target.pat file, will have translated
+your generic MSP430FR.f source file in a targeted MSP430FRxxxx.4th source file, allowing you to use
+symbolic addressing for all peripheral registers (SFR), without having to do FORTH declarations.
+A set of .bat files in \MSP430-FORTH folder is furnished to do all this automatically.
+    
+To see all specifications of FastForth, download \MSP430-FORTH\FF_SPECS.f.
 
-        The advantage of creating primary DEFERred words is to set their
-        default state, enabling to reinitialize them easily.
+To change the UART TERMINAL baudrate on the fly, 9600 Bauds up to 6 MBds, download \MSP430-FORTH\CHNGBAUD.f.
+Beyond 1 MBds, shorten the PL2303HXD cable, down to 50 cm for 6MBds.
 
-    forthMSP430FR_ASM.asm:
+XON/XOFF flow control allows 3.75kV galvanic isolation of terminal input with SOIC8 Si8622EC|ISO7021.
 
-        All assembly code is revamped.
+If you choose I2C_FastForth for your project, you will need of one more launchpad to make the UARTtoI2C bridge.
+See driver for it :  \MSP430-FORTH\UARTI2CS.f.
 
-        POPM and PUSHM instructions now follow the TI syntax :-(
+Notice that FAST FORTH interprets lines up to 84 chars, only SPACE as delimiter, only CR+LF as
+End Of Line, and BACKSPACE; all other control chars are discarded. 
+And that the high limit of a FORTH program memory is $FF40. 
 
-        Added CODENNM as assembly counterpart of :NONAME (option)
+Finally, using the SCITE editor as IDE, all is ready to do everything from its "tools" menu.
 
-        to build the primary DEFERred assembly word "machin" :
-                     -------
+What is new ?
+-------------
 
-            DEFER machin
+### V4.0, the last.   
 
-            CODENNM
-                NOP2        \ assembly instruction
-                NOP3        \ assembly instruction
-                MOV @IP+,PC \ mandatory before ENDCODE
-            ENDCODE IS machin
+* = V3.9 - 26 bytes.
 
-        you can obviously mix LOW/HIGH levels in CODENNM and :NONAME areas...
+* `HNDCODE` and `TICK` fixed
 
-V205
+* `KEY` and `EMIT` rewritten, also `ECHO` and `NOECHO`
 
-    Added MSP-EXP430FR2355 launchpad
-    Added word :NONAME (option).
-    FastForth terminal via Bluetooth v2.1 + EDR (Microchip RN42) works fine in full duplex mode,
-    up to 460800bds, 4 WIRES (GND,RX,TX,RTS); but with, as wireless effect, a bad troughput of 6kb/s
-    instead of 30kb/s with a bridge UART2USB.
-    Added 4Mbds,5Mbds terminal @16MHZ, for use with UART2USB PL2303HXD.
-    Words AND, OR, XOR are moved as complement in ANS_COMP.f file.
-    Simplified preprocessor files in \config\gema\ folder: only two for one target:
-        one for the device, other for the target (launchpad or user application/module).
-        and similarly with the assembly files: Device.inc and Target.asm, for compiling FastForth.
-    Corrected startup time in target.asm files.
-    Modified Clock config in MSP_EXP430FR2433.asm and MSP_EXP430FR4133.ASM, allowing clock modulation.
+* the assembler handles correctly argument+/-offset
 
-V202
+* the SD_Card driver is re-rewritten
 
-    added the line number in case of error occurring when download a source file (*f,*.4th)
-    in HALFDUPLEX mode (scite command CTRL+2) or in default NOECHO mode (scite cmd CTRL+0).
-    However, in case of download a file.f (with preprocessing), this line number refers
-    to the contents of the file named LAST.4th.
+    * it only supports FAT32 format and SD Cards from 4 GB to 64 GB
 
-V201
+    * FAT32 Directories can be enlarged
 
-    modified OPEN file primitive in forthMSP430FR_SD_LOAD.asm; modified forthMSP430FR_SD_INIT.asm
-    reordered files preprocessor in only one folder.
-    
-    You can now compile FastForth from Linux, see FastForth.pdf
-    ...But desperately searching for the linux equivalent of TERATERM !
+    * fixed errors handling
 
-    FastForth V2.0, major version.
+* the driver UART to I2C is enhanced and more reliable
 
-    Word TIB is deprecated and replaced by CIB (Current Input Buffer)
-    Word CR generates CR+LF instead of CR. TYPE is rewritten in assembly.
+* added DOUBLE.asm in /ADDONS (DOUBLE word set)
 
-    Added fixed point s15q16 numbers. Thus FAST FORTH recognises : 
-    unsigned/signed numbers u/n (u <= 65535) / (-32768 <=­­ n <= 32767), 
-    unsigned/signed double numbers ud/d by adding a decimal point 
-    (ud <= .4294967295) / (-.2147483648 <= d <= .2147483647),
-    and s15q16 signed numbers by adding a comma (-32768,00000 <= s15q16 <= 32767,00000).
-    
-    Fixed issue about the word LOAD": when called from a word, returns well into this calling word.
-    Note that with MSP430FR57xx family, SDIB uses PAD, due to lack of RAM.
-    
-    With the BOOTLOADER option, QUIT becomes a DEFERed word to easily enable/disable bootloader:
-    ' BOOT IS QUIT enables bootloader.
-    ' QUIT >BODY IS QUIT disables bootloader.
 
-    Added QUIETBOOT option to enable BOOT without displaying; use with care...
+### V3.9   
 
-V162
+* = V3.8 - 350 bytes.
 
-    Added a set of words to enable conditional interpretation/compilation : MARKER [DEFINED] [UNDEFINED] 
-    [IF] [ELSE] [THEN]. A MARKER word (defined as {word} to well see it) allows you to wipe some program 
-    even if loaded in memory below RST_STATE boundary. See conditional compilation source files 
-    in \MSP430-FORTH.
+* removed `INTERPRET`, `CR` and the useless error line displaying.
 
-    All interpretation/compilation errors now execute POWER_STATE, so any incorrect definition
-    and all its source file will be automatically erased.
+* Removed `PWR_HERE` and `PWR_STATE`, replaced `RST_HERE` by `RST_SET` and `RST_STATE` by `RST_RET`.
 
-    Added a bootloader option which loads BOOT.4TH from SD_Card memory.
+* Replaced `WIPE` by `-1 SYS`, `COLD` by `4 SYS` and `WARM` by `0 SYS` or simply `SYS`.
 
-V161
+* replaced `VOCABULARY` with `WORDSET`. `ALSO` is removed because the executing of a definition created by `WORDSET` adds it into the CONTEXT stack. For example, typing `FORTH` adds it into CONTEXT. Note that as result the use of ONLY is modified: `FORTH ONLY` instead of ~~`ONLY FORTH`~~.
 
-    SD_Card driver works also with software multiplier (with MSP430FR4133)
-    added SLEEP and (SLEEP) words enabling user access to background task, 
-    see ACCEPT in forthMSP430FR.asm and see use in RC5toLCD.f
+* modified QNUMBER QABORT `ABORT` `QUIT` `HI2LO` `PREVIOUS` `WORD` `FIND` `>NUMBER` `TYPE` `#>` `COUNT` `SWAP` `TICK` `POSTPONE` `COLON` `[ELSE]` plus the assembler.
 
-    You can type double numbers by inserting a decimal point.
-    Example :   $-12 is processed as 16 bits negative number.
-                $-.12 or $-1.2 or $-12. are processed as 32 bits negative numbers.
+* The bootstrap ON/OFF is modified: `BOOT` / `NOBOOT` to enable / disable it.
 
-       FAST FORTH V160, major version.
+* the word-set `ASSEMBLER` is renamed `hidden` because it stores not only the ASM instructions definitions but also HDNCODE definitions.
 
-    Accept SD_Card from 64 MB (FAT16) up to 64 GB (FAT32). 
-    Note that Windows 10 no longer offers the FAT32 format for the highest sizes of SD_CARD memory.
-    So you must use an alternative to do, for example: https://www.partitionwizard.com.
-    
+* when you execute a `MARKER` definition, it starts by removing from its previous definition if exists.
 
-    in SD_TOOLS the word SECT_D (dump sector) use a 32 bits number.
-                added the word CLUST_D (dump first sector of a cluster). 
-                Usage (notice the point): number. CLUST_D
-
-    PREVIOUS versions
-       
-    Added direct file transfer from PC to the target SD_CARD. 
-    Measured throughput with "HCI" SD CARD: 90 kbytes/s at 3Mbauds and 16MHz target clock.
-    You can do it from scite editor (menu Tools) or by using specific bat file.
-    Double click on it to see how to do.
-       
-    JTAG and BSL signatures (FF80h-FF88h) are protected against overwrite, typically during 
-    source file download. 
-    
-    added signed number prefixes $ (hex), % (bin) and # (decimal) to supersede current BASE.
+* Some bugs corrected:  
+    * QNUMBER FORWDOES `TYPE` `WORD`, 
+    * `M*/` in \MSP430-FORTH\DOUBLE.f file, 
+    * ~~the assembler handles correctly argument+/-offset.~~
 
-       Added words ASM and ENDASM to create assembler words that are not interpretable by FORTH
-    i.e. that are called by {CALL|INTERRUPT} and ended by {RET|RETI}. These so created words 
-    can be used only in ASSEMBLER context.
+* User can choose floored or symmetric division. See \MSP430-FORTH\ANS_CORE.f
 
-       In the embedded assembler, added 3 backward BW1 BW2 BW3 and 3 forward FW1 FW2 FW3 jump labels 
-    to use with GOTO, ?GOTO.
-    These labels are for single use (one jump for one label) but immediately reusable once resolved.
-       
-       you can compile up to 32 threads vocabularies.
+* the words `:NONAME` `IS` `DOES>` `CODENNM` are added to the core and there is still enough room in its 5kb for the VOCABULARY_SET add-on.  
+  DEFER is not included because too easy to replace by a CODE definition, see CR in file CORE_ANS.f. 
 
-       Memory management :
-       Fast Forth defines 4 levels of program memory with this words :
-               WIPE (and system failures) that resets program memory, vectors interrupts and any DEFERred words,
-               RST_HERE/RST_STATE that sets/resets the boundary of program protected against <reset> and COLD,
-               PWR_HERE/PWR_STATE that sets/resets the boundary of program protected against power ON/OFF,
-               and nothing, i.e. volatile program.
+* When used with VOCABULARY_SET activated, `RST_SET`/`RST_RET` and definition/use of `MARKER` tags save/restore the full word-set environment: DP, CURRENT, CONTEXT stack, VOCLINK.
 
-       You can download source files with hardware and/or software control flow (i.e. without line 
-    or char delays) up to:
-               134400  bds @ 500kHz
-        268800  bds @ 1MHz
-        614400  bds @ 2MHz
-        1228800 bds @ 4MHz
-        2457600 bds @ 8MHz
-        3000000 bds @ 16MHZ
-        6000000 bds @ 24MHz with MSP430FR57xx devices
-    See main file DTCforthMSP430FR5xxx.asm for the list of reliable baudrates.
+* FF_SPECS.f displays all word-sets, including the `hidden` one.
 
-       FAST FORTH can be adjusted by selection of SWITCHES in the source file to reduce its size according   
-       to your convenience. To do, comment/uncomment their line.
+* the SD_Card driver is rewritten. Only FAT32 format is supported. I suggest 4kb sized clusters.   
+  The old `WRITE"` command is duplicated :  
+    * `WRITE"` to create a new file (to overwrite if found),  
+    * `APPEND"` to append to a file (to create it if not found)
 
-    for your application, select the mode LPM{0,1,2,3,4} that enables wake on FAST FORTH input, 
-    depending of family: FR2xxx: LPM0, FR57xx : LPM0 to LPM2, FR59xx : LPM0 to LPM4.
 
-    DEEP_RST (RESET + WIPE) can be hardware performed via the programmation interface 
-    (Vcc,RX,TX,RST,TEST,GND).
+### V3.8
 
+* = V3.7 - 16 bytes.
+    
+* Source file copy from TERMINAL to the SD\_Card of any I2C\_FastForth target works fine.
+    
+* ~~The bootstrap call is modified: `' BOOT IS WARM` to enable it, `' BOOT [PFA] IS WARM` to remove it~~.
 
-Many thanks to Brad Rodriguez
------------------------------
+* `ASM` definitions are renamed `HDNCODE` (HiDdeN CODE), `ENDASM` is replaced by `ENDCODE`.
 
-for his CamelForth which served me as a kind of canvas.
-And also to Matthias Koch for its ideas about s15.16 implementation.
+    `HDNCODE` definitions are identical to low level `CODE` ones, but are hidden because defined in the ~~`ASSEMBLER`~~ `hidden` word set, and must be used only
+    in the scope of another low level CODE definition. See use in \MSP430-FORTH\UARTI2CS.f.
+    
+* FastForth passes CORETEST + COREPLUSTEST tests. See modified \MSP430-FORTH\CORETEST.4TH
 
-Unlike CamelForth this FORTH is a "Direct Threaded Code", with an embedded assembler following the standard syntax,
-not the one used in the world Forth.
+* Double number word `D<` corrected in \MSP430-FORTH\DOUBLE.f
 
-Its core is fully compliant with the standard ANS.
 
-This is a FORTH optimized for the speed, especially in the interpreter mode, so that you can load an application program written in FORTH/Assembler faster than its binary via MSP430 Flasher.exe : everything can be done from your text editor, the preprocessor and a serial terminal.
+### V3.7
 
-What's this and why?
----
+* 54 bytes added to (Kernel + Conditional_Compilation + Assembler).
 
-I have first programmed atmel tiny devices.
-Particularly I2C master driver to have both I2C slave and I2C master on a ATtiny461.
-which means a lot of back and forth between the editor, assembler, the programmer and the test in situ.
+* ~~Source file copy from I2C_TERMINAL to the SD_Card of any I2C_target works now.~~
+    
+* In addition of target's ID test made by Teraterm macro, a preamble has been added to all
+    \MSP430-FORTH\source.f files to prohibit their downloading with another version of FastForth.
 
-Previously I had programmed a FORTH on a Motorola 6809 and had been seduced by the possibility of sending a source file directly to the target using a serial terminal. Target which compiled and executed the program. At the time FORTH program lay in a battery backed RAM.
+* Words @ ! ALLOT come back from "ANS_COMP" add-on to core.
 
-The advent of chip MSP430 TEXAS INSTRUMENT with embedded FRAM gave me the idea to do it again : FAST FORTH was born.
+* Recognized prefixes are $ # % and ' respectively for hex decimal binary and ASCII 'char' numbers.  
+    Examples: 'U' - $55 = 0, '3' - #33 = 0, '@' - %0100_0000 = 0.  
+    When use in source.f files, all ASCII special chars are available. See \inc\FastForthREGtoTI.pat.
 
-Today I dropped the ATMEL chips and proprietary interfaces, I program my applications in a mix 80%/20% of assembler/FORTH I then sent on MSP430FR5738 chips with embedded FAST FORTH.
+* Assembler allows "argument+offset" into FORTH area (0 to $FFFF). Examples:  
+ `MOV #RXON,&BACKGRND+2` to store RXON addr at BACKGRND+2 addr.  
+ `MOV.B BUFFER-1(X),TOS` to load the byte at BUFFER-1(X) addr in the register TOS.
+    
+* `6 SYS` does same than hardware RST.  
+  `-1 SYS` does same than hardware SW1+RST (DEEP_RESET).  
+
+
+* More complicated:
+
+  In the FastForth init process, COLD WARM BACKGRND are modified and INIT_FORTH is added.  
+  They start each with a call to a paired assembly subroutine:
+      
+          RST_SYS failures ------------>+       +<- ABORT_TERM <--- ABORT" <--- (error) <---+<-- COMPILE/EXECUTE<-INTERPRET <--+
+                                        |       |                                           |                                  ^
+          RST ----------->+             |       v                                           v                                  |
+                          v             |       +-> INIT_FORTH ----------->+-> ABORT->QUIT->+->ACCEPT->+            +->ACCEPT->+
+          SW1+RST ------->+             |           ==========             ^                           |            ^
+                          v             v                                  |                           v            |  
+          -n SYS -------->+---> COLD -->+->PUC->+-> INIT_FORTH --> WARM -->+                           +->BACKGRND->o  
+                          ^     ====            ^   ==========     ====                                   ========  ^
+                          |                     |                                                                   \
+          +n SYS (even) ->+                     |                                                                   /
+                                                |                                                                   \
+          +n SYS (odd) -->+--> (NOPUC) -------->+                                                        UART_RX_INT/I2C_START_INT
+                          ^     ==== 
+          [0] SYS ------->+
+   
+                      CALL...   &STOP_APP          &SOFT_APP      &HARD_APP                              &BACKGRND_APP
+                                =========          =========      =========                              =============
+
+           Default subroutine   INIT_STOP          INIT_SOFT      INIT_TERM                              INIT_BACKGRND
+               Default action   UART: wait idle    do nothing     init TERM UC..                         UART: send RXON
+                                I2C: do nothing                   ..unlock I/O                           I2C: send Ctrl_Char $00 
+          
+          note: -n SYS|SW1+RST reset the default subroutine of these four calls. 
+                don't use TOS in these subroutines.
+
+    On the other hand, MARKER is modified in such a way that MARKER\_DOES executes a CALL to
+    the content of USER_BODY-2,   by default RET_ADR:
+    
+        MARKER [CFA]         = DODOES
+               [PFA]         = MARKER_DOES
+               [BODY]        = previous DP (Dictionnary Pointer)
+               ...
+               [USER_PARAM-2] = RET_ADR  as REMOVE_APP by default
 
-And that's the magic: After I finished editing (or modify) the source file, I press the "send" button in my text editor and I can test result on target in the second following. This is the whole point of an IDE reduced to its simplest form: a text editor, a cable, a target.
 
+By replacing [USER_PARAM-2] with the address of a new defined subroutine (named for example: REMOVE_XXX), 
+MARKER_DOES will execute it to restore n critical pointers (room made by 2n ALLOT) at USER_PARAM, USER_PARAM+2, ...
 
-Content
--------
+Thus, with MARKER and the definition of subroutines STOP_XXX, SOFT_XXX, HARD_XXX, BACKGRND_XXX, 
+the programmer has full control of his "XXX" real time application using interrupts, 
+with everything he needs to start, stop and remove it properly, thanks to this 'soft' MARKER definition, 
+avoiding the hardware (SW1+RST) of the last chance. 
 
-With a size of about 6 kb, Fast Forth contains 115 words:
+See example in  /MSP430-FORTH/UARTI2CS.f.
 
-    ASM            CODE           HI2LO          COLD           WARM           (WARM)         WIPE       
-    RST_HERE       PWR_HERE       RST_STATE      PWR_STATE      MOVE           LEAVE          +LOOP      
-    LOOP           DO             REPEAT         WHILE          AGAIN          UNTIL          BEGIN      
-    THEN           ELSE           IF             ;              :              DEFER          DOES>      
-    CREATE         CONSTANT       VARIABLE       POSTPONE       RECURSE        IMMEDIATE      IS         
-    [']            ]              [              \              '              ABORT"         ABORT      
-    QUIT           EVALUATE       COUNT          LITERAL        ,              EXECUTE        >NUMBER    
-    FIND           WORD           ."             S"             TYPE           SPACES         SPACE       
-    CR             (CR)           NOECHO         ECHO           EMIT           (EMIT)         ACCEPT     
-    KEY            (KEY)          C,             ALLOT          HERE           .              D.         
-    U.             SIGN           HOLD           #>             #S             #              <#        
-    BL             STATE          BASE           CIB            J              I              UNLOOP     
-    U<             >              <              =              0>             0<             0=         
-    DABS           ABS            NEGATE         1-             1+             -              +          
-    C!             C@             !              @              DEPTH          R@             R>         
-    >R             ROT            OVER           SWAP           NIP            DROP           ?DUP       
-    DUP            LIT            EXIT
 
-...size that includes its embedded assembler of 71 words:
+### V3.6
 
-    ?GOTO          GOTO           FW3            FW2            FW1            BW3            BW2        
-    BW1            ?JMP           JMP            REPEAT         WHILE          AGAIN          UNTIL      
-    ELSE           THEN           IF             0=             0<>            U>=            U<         
-    0<             0>=            S<             S>=            RRUM           RLAM           RRAM       
-    RRCM           POPM           PUSHM          CALL           PUSH.B         PUSH           SXT       
-    RRA.B          RRA            SWPB           RRC.B          RRC            AND.B          AND        
-    XOR.B          XOR            BIS.B          BIS            BIC.B          BIC            BIT.B      
-    BIT            DADD.B         DADD           CMP.B          CMP            SUB.B          SUB         
-    SUBC.B         SUBC           ADDC.B         ADDC           ADD.B          ADD            MOV.B      
-    MOV            RETI           LO2HI          COLON          ENDASM         ENDCODE        (SLEEP)
-    SLEEP
+* 8 bytes added to (Kernel + Conditional_Compilation + Assembler).
+    
+* Fixed the crash caused by forgetting the prefix '&' in the last term of an assembly instruction.
+    (the TI's symbolic mode is not implemented).
+    
+* Added in the macro \config\SendFile.ttl the word ?ID to prevent any crash during download
+    due to a device confusion:
+
+   when downloading a source_file.f asked from the scite editor or by the use
+   of SendSourceFileToTarget.bat, Teraterm macro first sends ?ID definition then 
+   the string:  %deviceID% ?ID.  
+   By executing ?ID, FastForth substracts %deviceID% value from the target's one then 
+   executes ABORT" DeviceID mismatch!" : the downloading is aborted if DeviceID mismatch.  
+   %deviceID% is provided by the file \config\select.bat.
+
+   When downloading a source_file.4TH, it's up to you to be careful because 
+   Teraterm sends the string 0 ?ID, so that ?ID bypasses the substraction.   
+    
+* Added the word set DOUBLE in the \MSP430-FORTH\DOUBLE.f file.
 
-...everything you need to program effectively in assembly or FORTH or mix, as you want. 
-See examples in \MSP430-FORTH.
+### V3.5
 
+* 48 bytes removed.
+    
+* from Scite menu, we can program MSP430FRxxxx also with BSL_Scripter.
+    
+    To do, save file \prog\BSL_Scripter.exe from: 
+    https://github.com/drcrane/bslscripter-vs2017/releases/download/v3.4.2/BSL-Scripter-v3.4.2.zip,
+    but erasing a MSP430FR2355 or MSP430FR2476 doesn't work, thanks to BSL V. 00.09.36.B4 & B5.
+    See SLAU550Z tables 16 & 17.
+    
+    and buy a USB2UART module CP2102 6 pin. On the web, search: "CP2102 3.3V DTR RTS" 
+    For wiring, see \config\BSL_Prog.bat.
+    
+    So, we download both binaries and source files with only one CP2102|PL2303TA module,
+    the XON/XOFF TERMINAL and BSL_Scripter. Bye bye T.I. FET!
+    
+* ABORT messages display first the I2C address, if applicable.
 
-Here are kernel compilation options:
+* QNUMBER some issues solved.
+* UART version of ACCEPT and KEY are shortened.
+* EVALUATE is moved to CORE_ANS.
 
-CONDCOMP which enable conditional compilation:
+### V3.4
 
-    [DEFINED]      [UNDEFINED]    [IF]           [ELSE]         [THEN]         COMPARE        MARKER 
+* 36 bytes removed.
+    
+* Fixed: word F. issue in FIXPOINT.asm
+    
+* the new kernel DEFERRED option adds :NONAME CODENNM DEFER IS.
+    
+* pin RESET is software replaced by pin NMI and so, RESET executes COLD, allowing code insert before BOR.
+  however SYSRSTIV numbering remains unchanged: = 4 for RESET, = 6 for COLD.
+    
+* Hardware Deep RESET (S1+RST) reinitializes vectors interrupts and SIGNATURES area, as WIPE.
+    
+    
+* A newcomer: FastForth for I2C TERMINAL. With the driver UART2I2CS running on another FastForth target, 
+we have the USB to I2C_Slave bridge we need: one TERMINAL for up to 112 I2C_FastForth targets.
+
+                                                                                      +-------------------------+ 
+        notebook                     USB to I2C_Slave bridge                    +-I2C-| others I2C_slave target | 
+      +-----------+      +-------------------------------------------------+   /    +-------------------------+ | 
+      |           |      ¦ PL2303HXD         target running UARTI2CS @24MHz¦  +-I2C-|  MSP430FR4133 @ 1 MHz   | |
+      |           |      ¦------------+       +----------------------------¦ /   +--------------------------+ |-+
+      |           |      ¦            | 3wires|   MSP430FR2355 @ 24MHz     ¦/    |   MSP430FR5738 @ 24 MHz  | |
+      | TERATERM -o->USB-o->USB2UART->o->UART-o-> FAST FORTH -> UARTI2CS  -o-I2C-o-> FAST FORTH with option |-+
+      | terminal  |      ¦            | 6MBds |               (I2C MASTER) ¦     |  TERMINAL_I2C (I2C SLAVE)| 
+      |           |      ¦------------+       +----------------------------¦     +--------------------------+
+      |           |      ¦            |< 20cm>|                            ¦       up to 112 I2C_Slave targets  
+      +-----------+      +-------------------------------------------------+
+
+With the indicated MCLK and UART speed, Coretest.4th (45896 bytes) is downloaded to (and executed by) I2C_Slave in 1220ms.   
+The driver UARTI2CS works without error from 1MHz to 24MHz MCLK and from 115200Bds up to 6MBds UART.  
+With I2C_Master running at 24 MHz, the I2C bus frequency is about 1MHz, and it works fine
+even if I2C_slave is running at 1 MHz.
+Don't forget to add two 3k3 pullup resistors on SCL and SDA...
+
+the Multi Master Mode works but is not tested in multi master environment.
+    
+"Cerise sur le gâteau": when they wait for a TERMINAL input (idle state), 
+both I2C_Master and I2C_Slave(s) are sleeping in LPMx mode and the bus I2C is freed. 
+The I2C_slave driver handles LPM4 mode.
+    
+The UART2I2CS does not use TI's horrible UCBx_I2C_Master driver, but a much faster software driver,
+with one more UCBx still available for an I2C_Slave or SPI driver.
 
-SD\_CARD\_LOADER to load FORTH source files from SD_CARD
+##### HOW TO DO ?
 
-    LOAD"         (ACCEPT)       
+    first you make the I2C cable (GND,SDA,SCL,3V3) between your 2 LaunchPad, with 3,3k pullup resistors
+    on SDA and SCL lines. See in forthMSP430FR_TERM_I2C.asm to select SDA and SCL pins.
+    
+    to compile FastForth for I2C TERMINAL from forthMSP430FR.asm file:
+    -  uncomment the line "TERMINAL_I2C".
+    -  search "I2CSLAVEADR" line and set your <slave address you want>, i.e. 10h.
+    -  compile file then prog your I2C_Slave LaunchPad.
+    
+    with the another LaunchPad running FastForth:
+    At the end of UART2I2CS.f file set the <slave address you want>, i.e. $10.
+    then download it, it's done: TERMINAL is linked to I2C_Slave.
+    
+    Type `Alt+B` on teraterm (send a BREAK) or press S2 on UARTtoI2C module to unlink I2C_Slave.
 
-SD\_CARD\_READ\_WRITE to read write delete files and direct copy from TERMinal input to SD_card
+### PREVIOUS versions
+    
+Unlocking I/O's is transfered from RESET to WARM.
+Thus, by redefining HARD_APP, you can add I/O's configuration for your application before a global unlocking.
 
-    TERM2SD"       SD_EMIT        WRITE          WRITE"         READ           READ"          CLOSE 
-    DEL"         
 
-BOOTLOADER adds a boot on SD_CARD
+The structure of primary DEFERred words as KEY,EMIT,CR,ACCEPT... is modified,
+the address of their default execute part, without name, can be found with: `' <name> >BODY`
 
-    (QUIT)         BOOT        
+example, after this entry: `' DROP IS KEY` KEY runs DROP i.e. runs the redirection made by IS,  
 
-VOCABULARY to create vocabularies (words list)
+but `' KEY >BODY EXECUTE` runs KEY, the default action at the BODY address.
 
-    DEFINITIONS    ONLY           PREVIOUS       ALSO           FORTH          VOCABULARY   
+and `' KEY >BODY IS KEY` restores the default action of this **primary** DEFERred word.
 
 
+to build a **primary** DEFERred definition, you must create a CODE definition followed by a :NONAME definition:
 
-ADDs-ON below may be added either hard in kernel or later loaded/removed as any application:
+    CODE SPACES         \ create a CODE definition named 'SPACES' which does a jump to the NEXT_ADR instruction to do nothing
+    MOV #NEXT_ADR,PC    \ CFA = code of the instruction, PFA = parameter I of the instruction = NEXT_ADR
+    ENDCODE             \ this definition 'SPACES' does nothing, for the moment...
 
-ANS\_CORE\_COMPLIANT necessary to pass ANS94 CORE tests
+    :NONAME             \ starts a FORTH definition without name
+    BEGIN
+        ?DUP
+    WHILE
+        'SP' EMIT
+        1-
+    REPEAT
+    ;
+    IS SPACES           \ this :NONAME execution_address is stored at PFA of SPACES, replacing NEXT_ADR
+    
+The advantage of creating primary DEFERred definitionss is to set their
+default execution subroutine at their BODY address, enabling to reinitialize them easily:
+' truc >BODY IS truc
 
-    PAD            >IN            >BODY          SOURCE         .(             (              DECIMAL    
-    HEX            FILL           +!             [CHAR]         CHAR           CELL+          CELLS      
-    CHAR+          CHARS          ALIGN          ALIGNED        2OVER          2SWAP          2DROP      
-    2DUP           2!             2@             */             */MOD          MOD            /          
-    /MOD           *              FM/MOD         SM/REM         UM/MOD         M*             UM*        
-    S>D            2/             2*             MIN            MAX            RSHIFT         LSHIFT      
-    INVERT         AND            OR             XOR            {ANS_COMP}
-  
-SD\_TOOLS, basic tools for FAT16/32 
+Same with CODENNM definition, as low level equivalent of :NONAME
 
-    DIR            FAT            CLUSTER        SECTOR         {SD_TOOLS}
+    CODE TSTBIT         \ create a CODE definition named 'TSTBIT' which does a jump to the NEXT_ADR instruction to do nothing
+    MOV #NEXT_ADR,PC    \ CFA = instruction, PFA = NEXT_ADR
+    ENDCODE             \ this definition 'TSTBIT' does nothing, for the moment...
 
-FIXPOINT, minimalist fixed point arithmetic + - * /
+    CODENNM             \ starts an assembly definition without name
+    MOV @PSP+,X
+    AND @X,TOS
+    MOV @IP+,PC
+    ENDCODE             \ -- execution_address_of_CODENNM
+    IS TSTBIT           \ this CODENNM execution_address is stored at PFA of TSTBIT, replacing NEXT_ADR
 
-    2CONSTANT      D>F            S>F            F.             F*             F#S            F/       
-    F-             F+             HOLDS          {FIXPOINT}
+you can obviously mix LOW/HIGH levels in CODENNM and :NONAME
 
-UTILITY:
+All interpretation/compilation errors now execute ~~`PWR_RET`~~ `RST_RET`, so any incorrect definition
+and all its source file will be automatically erased.
+    
 
-    DUMP           U.R            WORDS          ?              .RS            .S             {UTILITY}
+Accept SD_Card from 4 to 64 GB (FAT32).  
+Note that Windows 10 no longer offers the FAT32 format for the highest sizes of SD_CARD memory.
+So you must use an alternative to do, for example: https://www.partitionwizard.com.
 
 
+Added direct file transfer from PC to the target SD_CARD.  
+Measured throughput with "HCI" SD CARD: 90 kbytes/s at 3Mbauds TERMINAL and 16MHz MCLK.
+You can do it from scite editor (menu Tools) or by using specific bat file.
+Double click on it to see how to do.
 
+JTAG and BSL signatures (FF80h-FF88h) are protected against overwrite during source file download. 
 
-Organize your gitlab copy of FastForth
--------
 
-download zip of last version
+## Many thanks to Brad Rodriguez
 
-copy it to a subfolder, i.e. FastForth, created in your user folder
+for his CamelForth which served me as a kind of canvas.
+And also to Matthias Koch for its ideas about Q15.16 implementation.
 
-right clic on it to share it with yourself.
+Unlike CamelForth FASTFORTH is a "Direct Threaded Code", with an embedded assembler following the standard syntax,
+not the one used in the world Forth.
 
-remember its shared name i.e. : //myPC/users/my/FastForth.
+It is optimized for the speed, especially in the interpreter mode, so that you can load an application program written in FORTH/Assembler faster than its binary via MSP430 Flasher.exe.
+Everything can be done from your text editor, the preprocessor and a serial terminal.
 
-in file explorer then right clic on root to connect a network drive, copy shared name in drive name 
-and choose a free drive letter a:, b: ...
+## What's this and why?
 
-Thus all relative paths will be linked to this drive, except the three \MSP430-FORTH\files.bat 
-and \binaries\prog.bat links.
-For all of them right clic select, select properties then check drive letter in target.
+I have first programmed atmel tiny devices.
+Particularly I2C master driver to have both I2C slave and I2C master on a ATtiny461.
+which means a lot of back and forth between the editor, assembler, the programmer and the test in situ.
 
-WARNING! if you erase a file directly in this drive or in one of its subfolders, no trash, the file is lost!
+Previously I had programmed a FORTH on a Motorola 6809 and had been seduced by the possibility of sending a source file directly to the target using a serial terminal. Target which compiled and executed the program. At the time FORTH program lay in a battery backed RAM.
 
+The advent of chip MSP430 TEXAS INSTRUMENT with embedded FRAM gave me the idea to do it again : FAST FORTH was born.
 
+Today I dropped the ATMEL chips and proprietary interfaces, I program my applications in a mix 80%/20% of assembler/FORTH I then sent on MSP430FR5738 chips with embedded FAST FORTH.
 
-Minimal Software
---
+And that's the magic: After I finished editing (or modify) the source file, I press the "send" button in my text editor and I can test result on target in the second following. This is the whole point of an IDE reduced to its simplest form: a text editor, a cable, a target.
+
+
+## build your FastForth local copy
+
+download https://framagit.org/Jean-Mi/FAST-FORTH/tree/master
+Once you have unzipped it into your folder, share it - with you - and notice its network path.
+Then right clic on the root of your notepad to create a network drive by recopying this network path (change backslashes \ to / ); then set drive letter as you want.
+
+In explorer you should obtain this back your driver letter:
 
-If you are under WINDOWS :
 
-    First, you download the TI's programmer from TI : http://www.ti.com/tool/MSP430-FLASHER.
-    And the MSP430Drivers : 
-    http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430_FET_Drivers/latest/index_FDS.html
+    \ForthMSP430FR.asm                main FASTFORTH program
+    \ForthMSP430FR_ASM.asm            assembler
+    \ForthMSP430FR_EXTD_ASM.asm       extended assembler 
+    \ForthMSP430FR_CONDCOMP.asm       conditionnal compilation
+    \ForthMSP430FR_SD_ACCEPT.asm      ACCEPT for SD_Card
+    \ForthMSP430FR_SD_INIT.asm        init SD_CARD (FAT16/32)
+    \ForthMSP430FR_SD_LOAD.asm        load source files from SD_CARD
+    \ForthMSP430FR_SD_LowLevel.asm    SPI routines + Read / write sector 
+    \ForthMSP430FR_SD_RW.asm          read create write del SD_CARD files + file copy to SD_CARD
+    \ForthMSP430FR_TERM_I2C.asm       I2C terminal
+    \ForthMSP430FR_TERM_UART.asm      full duplex UART terminal
+    \ForthMSP430FR_TERM_UART_HALF.asm half duplex UART terminal
+    \SciTEDirectories.properties      copy of \config\scite\AS_MSP430\SciTEDirectories.properties
 
-    The next tool is TERATERM.EXE : https://osdn.net/projects/ttssh2/releases/
+    \ADD-ON\                          FASTFORTH OPTIONAL KERNEL ADD-ON (not erasable version)
+           \CORE_ANS.asm              set of complementary words to pass CORETEST.4TH
+           \FIXPOINT.asm              adds HOLDS F+ F- F* F/ F#S F. S>F
+           \SD_TOOLS.asm              adds some trivial words to display sectors content
+           \UTILITY.asm               adds WORDS, DUMP, ? .S .RS
+    
+    \binaries\files.txt              ready for drag'n drop to prog.bat
+             \prog(.bat)             to do what ?...
+   
+    \config\
+           \asm.properties                      configuration for *.inc,*.asm files
+           \forth.properties                    configuration for *.f,*.4th files
+           \fortran.properties                  configuration for *.pat files
+           \SciTEDirectory.properties           copy it to your project root folder
+           \SciTEUser.properties                copy it in your home directory
+           \SendFile.ttl                        TERATERM macro file to send source file to FASTFORTH
+           \SendToSD.ttl                        TERATERM macro file to send source file to embedded SD_CARD 
+           \build(.bat)                         called by scite to build target.txt program 
+           \BSL_prog(.bat)                      to flash target with target.txt file with BSL_Scripter
+           \FET_prog(.bat)                      to flash target with target.txt file with MSP430Flasher
+           \CopyTo_SD_Card(.bat)                to copy in your MSP430-FORTH
+           \SendSource(.bat)                    to send file to FASTFORTH
+           \Preprocess(.bat)                    to convert generic .f file to specific .4th file
+           \CopySourceFileToTarget_SD_Card.bat  copy it in any user folder for drag'n drop use
+           \SendSourceFileToTarget.bat          copy it in any user folder for drag'n drop use
+           \PreprocessSourceFile.bat            copy it in any user folder for drag'n drop use
+           \SelectTarget.bat                    called to select target, device and deviceID
+    
+    \inc\                         MACRO ASsembler files.inc, files.asm, GEMA preprocessor files.pat
+        \TargetInit.asm           select target configuration file for AS assembler
+        \MSP_EXP430FRxxxx.asm     target minimalist hardware config to compile FastForth
+        \ThingsInFirst.inc        general configuration for AS assembler
+        \MSP430FRxxxx.inc         device declarations
+        \ThingsInLast.inc         general post configuration for AS assembler
+        \FastForthREGtoTI.pat     converts FORTH symbolic registers names to TI Rx registers
+        \tiREGtoFastForth.pat     converts TI Rx registers to FORTH symbolic registers names 
+        \MSP430FRxxxx.pat         device configuration for gema preprocessor
+        \MSP_EXP430FRxxxx.pat     target configuration for gema preprocessor
+
+    \prog\        SciTEGlobal.properties, TERATERM.INI + programs.url
+        
+### FORTH generic_source_files.f and targeted_source_files.4th
+
+    \MSP430-FORTH\
+                 \PreprocessSourceFile.bat            (link)
+                 \SendSourceFileToTarget.bat          (link)
+                 \CopySourceFileToTarget_SD_Card.bat  (link)
+                 \*.f            source files which must be preprocessed before downloading  
+                 \*.4th          source files ready to download to any target
+                 \LAST.4TH       last source target file issued by preprocessor
+                 \BOOT.f         performs bootstrap
+                 \CHNGBAUD.f     allows you to change terminal baudrate
+                 \CORE_ANS.f     same as CORE_ANS.asm, (but erasable) 
+                 \CORETEST.4TH   ANS core tests 
+                 \CORDIC.f       for afficionados 
+                 \DOUBLE.f       adds DOUBLE word set
+                 \FIXPOINT.f     same as FIXPOINT.asm, (but erasable)
+                 \FF_SPECS.f     shows all specificities of FAST-FORTH compiled on your target 
+                 \RTC.f          set date and time, one example of MARKER use.
+                 \RC5toLCD.f     multitasking example 
+                 \SD_TEST.f      tests for SD_CARD driver
+                 \SD_TOOLS.f     same as SD_TOOLS.asm, (but erasable)
+                 \TESTASM.f      some tests for embedded assembler
+                 \TESTXASM.f     some tests for embedded extended assembler
+                 \UARTI2CS.f     I2C_Master driver to link TERMINAL UART with any I2CSlave target
+                 \UTILITY.f      same as UTILITY.asm, (but erasable)
     
-    As scite is my editor, this github repository is fully configured for scite users.
-    download the single file executable called sc1 (not the full download! ) :
-    http://www.scintilla.org/SciTEDownload.html, then save it as \prog\scite.exe.
 
-    download GEMA preprocessor : https://sourceforge.net/projects/gema/files/gema/gema-1.4-RC/
+Note: all actions (flashing target, download files) can be made by using bat files directly.
+The next is to download IDE (WINDOWS):
 
-    The MacroAssembler AS :    http://john.ccac.rwth-aachen.de:8000/as/
+## First get TI's programs
 
-    and Srecord : http://srecord.sourceforge.net/download.html to convert HEX file to TI TXT files.
+[MSP430-FLASHER](https://www.ti.com/tool/MSP430-FLASHER), [MSP430_FET_Drivers](http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430_FET_Drivers/latest/index_FDS.html)
 
-    copy last 3 items onto \prog subfolder. 
+install in the suggested directory, then copy MSP430Flasher.exe and MSP430.dll to \prog\
 
-    ask windows to open .asm, .inc, lst, .mac, .4th, .f, .pat files with scite.exe
-       
+## download IDE
 
-If you are linux or OS X men, see FastForth.pdf.
+* [modified BSL-Scripter.zip](https://github.com/drcrane/bslscripter-vs2017/releases) and unzip as \prog\BSL-Scriper.exe
 
+* [teraterm](https://osdn.net/projects/ttssh2/releases/)
 
-Build the program file
-----------------------
+* [GEMA general purpose preprocessor](https://sourceforge.net/projects/gema/files/latest/download), unzip in drive:\prog\
 
-\forthMSP430FR.asm is the main file to compile FastForth. It calls :   
+* [sCiTE single file executable](https://www.scintilla.org/SciTEDownload.html) to drive:\prog\, then rename Scxxx.exe to scite.exe
 
-open forthMSP430FR.asm with scite editor
+* [Macro AS](http://john.ccac.rwth-aachen.de:8000/ftp/as/precompiled/i386-unknown-win32/aswcurr-142-bld158.zip), unzip in drive:\prog\  
 
-uncomment the target as you want, i.e. MSP_EXP430FR5969
+* [srecord](https://sourceforge.net/projects/srecord/files/srecord-win32/1.64/), unzip in drive:\prog\  
 
-choose frequency, baudrate, UART handshake.
 
-uncomment options switches as your convenience.
+In explorer you should obtain that (minimum requested programs):
 
-save file.
 
-assemble (CTRL+0). A window asks you for 4 parameters:
+    \prog\as.msg
+         \asw.exe
+         \BSL-Scripter.exe
+         \cmdarg.msg
+         \gema.exe
+         \ioerrs.msg
+         \MSP430.dll
+         \MSP430Flasher.exe
+         \P2hex.exe    
+         \P2hex.msg
+         \srec_cat.exe
+         \sCiTE.exe
+         \SciTEGlobal.properties
+         \tools.msg
+    
 
-set target as first param, i.e. MSP_EXP430FR5969,
+Next we need to change the drive letter in hard links below:
 
-then execute. the output will be \binaries\MSP_EXP430FR5969.txt
+    \binaries\prog.bat
+    \MSP430-FORTH\SendSourceFileToTarget.bat
+                 \CopySourceFileToTarget_SD_Card.bat
+                 \PreprocessSourceFile.bat
 
+to do, right clic on them
+     select "properties"
+            set your drive letter in "target"
 
+The last step is ask Windows to associate scite editor with file types:
 
-Load Txt file (TI format) to target
------------------------------------
+right clic on a .asm file, 
+    select "open with", 
+            select "other application" then select: drive:\prog\scite.exe
 
-    in \binaries folder, drag your target.txt file and drop it on prog.bat
-    
-    or use scite internal command TOOLS: FET prog (CTRL+1).
+repeat for .inc, .lst, .f, .4th, .pat, .properties, .TTL files.
 
-nota : programming the device use SBW2 interface, so UART0 is free for serial terminal use.
 
-If you want to program your own MSP430FRxxxx board, wire its pins TST, RST, 3V3 and GND 
-to same pins of the launchpad, on eZ-FET side of the programming connector.
+IT's done ! See  forthMSP430FRxxxx.asm to configure TeraTerm
 
 
+## Build the program file
 
-Connect the FAST FORTH target to a serial terminal
--------------------------------------------------
+\forthMSP430FR.asm is the main file to compile FastForth:    
 
-you will need an USBtoUART cable with a PL2303TA or PL2303HXD device that allows both XON/XOFF 
-and hardware control flow :
+* Open forthMSP430FR.asm with scite editor
 
-    http://www.google.com/search?q=PL2303TA
-    http://www.google.com/search?q=PL2303HXD
+* uncomment the target as you want, i.e. MSP_EXP430FR5969
 
-or USBtoUART bridge, with a CP2102 device and 3.3V/5V that allows XON/XOFF control flow :
+* choose frequency, baudrate, flow control.
 
-       search google: cp2102 module 3.3V
-       http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx
+* comment / uncomment options switches as your convenience.
 
-    you must program CP2102 device to access 1382400 and 1843200 bds rates :
-       http://www.silabs.com/Support%20Documents/Software/install_USBXpress_SDK.exe
-       http://www.silabs.com/Support%20Documents/TechnicalDocs/an169.pdf
+* save file.
 
-or a USBtoUART bridge, with a FT232RL device and 3.3V/5V for only hardware control flow:
-       
-    WARNING! buy a FT232RL module with a switch 5V/3V3 and select 3V3.
+* assemble (CTRL+0). A window asks you for 4 parameters:
 
-       http://www.google.com/search?q=FT232RL+module+3.3V
-       http://www.ftdichip.com
+* set your target as first param, i.e. MSP_EXP430FR5969
 
-or compatible 921600bds wireless module: RN42 (bluesmirf), RN4878...
-       
-How to configure the connection ?
--------------------------------
+* then execute. the output will be \binaries\MSP_EXP430FR5969.txt
 
-1-    XON/XOFF control flow: Launchpad UARTn  <--> USBtoUART bridge <--> TERATERM
+## Load Txt file (TI format) to target
+
+    in \binaries folder, drag your target.txt file and drop it on prog.bat
+    
+    or use scite internal command TOOLS: FET prog (CTRL+1).
 
-   launchpad <--> UART2USB
-         TXn ---> RX    
-         RXn <--- TX    
-         GND <--> GND  
-               WARNING! DON'T CONNECT 5V RED WIRE! 
+nota : programming the device use SBW2 interface, so UARTn is free for serial terminal connexion.
 
-      TeraTerm configuration : see DTCforthMSP430fr5xxx.asm
+If you want to program your own MSP430FRxxxx board, wire its pins TST, RST, 3V3 and GND 
+to same pins of the launchpad, on eZ-FET side of the programming connector.
 
-If you plan to supply your target vith a PL2303 cable, open its box to weld red wire onto 3.3V pad.
+## Connect the FAST FORTH target to a serial terminal
 
-2-    hardware control flow: Launchpad UARTn <--> USBtoUART bridge <--> TERATERM
-   Launchpad <--> UART2USB
-         TXn ---> RX    
-         RXn <--- TX    
-         RTS ---> CTS  4th wire    
-         GND <--> GND     
-               WARNING! DON'T CONNECT 5V !
+you will need an USBtoUART cable with a PL2303TA|PL2303HXD|PL1303GC device that allows both XON/XOFF 
+and hardware control flow :
 
-      TeraTerm configuration : see DTCforthMSP430fr5xxx.asm
+[PL2303GC](https://duckduckgo.com/?q=DSD+TECH+SH-U06A+PL2303GC)
+[PL2303 driver](http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41)
 
+WARNING! always verify VCC PIN = 3.3V before use to supply your target with.
 
-3-    Bluetooth module: Launchpad UARTn <--> RN42 <--> TERATERM
-   launchpad <--> wireless module
-         TXn ---> RX    
-         RXn <--- TX    
-         RTS ---> CTS  4th wire
-         GND <--> GND     
-        (CTS <--- RTS) 5th wire if necessary   
+or with a CP2102 device and 3.3V/5V that allows XON/XOFF control flow up to 921600 Bds:
 
-                3V3 <--> 3V3
+[CP2102 3.3V](https://duckduckgo.com/q=cp2102+3.3V+6PIN)
+[CP2102 driver](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)
 
-      TeraTerm configuration : see DTCforthMSP430fr5xxx.asm
+WARNING! always verify VCC PIN = 3.3V before use to supply your target with.
 
 
-Send a source file.f or file.4th to the FAST FORH target
-------------------
+## Send a source file.f or file.4th to the FAST FORH target
 
 Three bat files are done in \MSP430-FORTH that enable you to do all you want.
 drag and drop your source file on to.
@@ -581,262 +698,239 @@ you can also open any source file with scite editor, and do all you want via its
 If you have any downloading error, first verify in "LAST.4th" that all lines are 
 correctly ended with CR+LF.
 
+## SD_Card driver
 
-SD_Card Load, Read, Write and Delete 
-=============================================
-
-First, hardware
----------------
+#### First, hardware
 
 If you have MSP-EXP430FR5994, nothing to do.
 
 For the choice of a SD card socket be carefull, pin CD (Card Detect) must be present! 
-google search: "micro SD card 9 pin"
+web search: "micro SD card 9 pin"
 Look for the good wiring in /Launchpad.asm file
 
-Compile with SD_Card addon
---------------
+#### Compile with SD_Card addon
 
 in forthMSP430FR.asm, uncomment lines SD_CARD_LOADER,  SD_CARD_READ_WRITE, SD_TOOLS 
 then compile for your target
 
+### the commands
 
+With the `LOAD"` pathame" command FastForth loads source files from a SD_CARD memory.
 
+    * LOAD" path\filename.4th" relative path,
 
-the commands
-------------
-
-With the LOAD" pathame" command you load your source files from a SD_CARD memory in both execute 
-and compile modes. Idem for READ", WRITE" and DEL" commands.
+    * LOAD" \path\filename.4th" absolute path.
 
-See "SD_TESTS.f", a FORTH program done for example
+The file is interpreted by FORTH in same manner than from the serial terminal.  
+When EOF is reached, the file is automatically closed.  
+A source file can `LOAD"` another source file, and so on in the limit of 8 handles. 
 
-If you remove the SD memory card reader and then reset, all SD\_IO pins are available except SD_CD obviously.
+`LOAD"` may be used as Change Directory command: 
 
-HowTo LOAD a sourcefile
---------------
+    * LOAD" \misc".       \misc becomes the current folder.
 
-       LOAD" path\filename.4th".
+    * LOAD" ..\"          parent folder becomes the current folder.
 
-The file is interpreted by FORTH in same manner than from the serial terminal.
+    * LOAD" \"            Root becomes the current folder.
 
-When EOF is reached, the file is automatically closed.
 
-A source file can _LOAD"_ an other source file, and so on in the limit of available handles (up to 8).
+To read a file: `READ"` pathname"
 
-HowTo READ a file
---------------
+* open it, the first sector is loaded in SD_BUF
 
-       READ" path\filename.ext".
+The command `READ` sequentially loads the next sector in the buffer and leaves on the stack a true flag when the EOF is reached.    
+The variable BufferLen keep the count of bytes to be read (1 to 512).
 
-The first sector of this file is loaded in BUFFER.
-To read next sectors, use the command READ that loads the next sector in the buffer, 
-and leaves on the stack a flag that is true when the EOF is reached. 
-The file is automatically closed. See tstwords.4th for basic usage.
-
-The variable BufferLen keep the count of bytes to be read (0 to 512).
-
-If you want to anticipate the end, use the CLOSE command.
+The file is automatically closed.  
+  
+If you want to anticipate the end, remove the false flag left by the previous `READ` then use the `CLOSE` command.
 
-HowTo WRITE a file
----------------
+To overwrite a file: `WRITE"` path\filename.ext".
 
-       WRITE" path\filename.ext".
+* If the file does not exist, create it
 
-If the file does not exist, create it, else open it and set the write pointer at the end of the file, 
-ready to append chars.
+* set the write pointer at the **beginning** of the file, ready to append chars.
 
-See example of use in \MSP430-FORTH\SD_TEST.f.
+To write a file: `APPEND"` path\filename.ext".
 
-To overwrite an existing file: DEL" file" then  WRITE" file".
+* If the file does not exist, create it
 
-Use CLOSE to close the file.
+* set the write pointer at the **end** of the file, ready to append chars.
 
-HowTo delete a file
----------------
+The command `WRITE` sequentially writes the SD_BUF in SD_CARD and increments the current sector.
 
-       DEL" path\filename.ext". If the file is not found, do nothing, no error.
+Use `CLOSE` to close a WRITE file.
 
-HowTo change DIRectory
----------------
+See examples of use in \MSP430-FORTH\SD_TEST.f.
 
-       LOAD" \misc".               \misc becomes the current folder.
-       LOAD" ..\"                      parent folder becomes the current folder.
-       LOAD" \"                                Root becomes the current folder.
 
-Drive letters are always ignored.
+#### Copy source file to SD_Card
 
-Downloading source file to SD_Card
-------------------------------------------
+to copy a source file (.f or.4th) to SD_CARD target, use CopySourceFileToTarget\_SD\_Card.bat.
+Double click on one of this bat files to see how to do.
 
-to download a source file (.f or.4th) onto SD_CARD target, use CopySourceFileToTarget\_SD\_Card.bat.
 or use scite.
-Double click on one of this bat files to see how to do.
 
-If you have any downloading error, first verify in "LAST.4th" that all lines are 
+If you have any copy error, first verify in "LAST.4th" that all lines are 
 correctly ended with CR+LF.
 
-I2C DRIVERS
-===========
-
-The I2C\_Soft\_Master driver with normal/fast mode allows you to add then use any couple of pins to drive a bus I2C :
+## The system is not responding ?
 
- - without use of eUSCI UCBx
- - I2C\_Soft\_MultiMaster driver : same plus detection collision
- - plus I2C\_Slave driver that uses the eUSCI UCBx hardware
+First, remove the USBtoUART bridge then reconnect it. Perhaps it was in suspend state...
 
+If the system is always freezed, press `RST` button on the MSP-EXP430FR5xxx ; FORTH restarts 
+as it was after the last `RST_SET` command.
 
-Other interesting specificities :
-=====
+If the system does not restart again, press `SW1+RESET`. 
+FORTH restarts in the state of its object file.
 
-Management of vocabularies (not ANSI):
-VOCABULARY, DEFINITIONS, ONLY, ALSO, PREVIOUS, CONTEXT, CURRENT, FORTH, ASSEMBLER. 
-In fact, it's the the assembler that requires the vocabularies management.
+Here is the FastForth memory management, one of its major assets, with both hardware events and software equivalent:
 
-Recognizing prefixed numbers %101011 (bin), $00FE (hex) and #220 (decimal).
-
-ECHO / NOECHO
+*  RST_RET 
+    
+    *  when you type `RST_RET` the program beyond the last RST_SET is lost.
 
-The words DEFER and IS are implemented. CR, EMIT, KEY, ACCEPT, QUIT and WARM are deferred words.
+    *  Running a `MARKER` definition will remove it and the program beyond. In addition the user can link it a routine to remove the modified configuration in system: vectors, hardware, I/Os... 
 
-Error messages are colored (reverse video on ANSI terminal).
 
-Assembly jumps are as FORTH one's : IF, ELSE, THEN, BEGIN, AGAIN, UNTIL, WHILE.
-Not canonical jumps are also available with JMP|?JMP to a defined word and GOTO|?GOTO to 
-backward labels BW1 BW2 BW3 or forward labels FW1 FW2 FW3.
-These labels are for one use.
-Switch  within definitions between FORTH and Assembly contexts with words HI2LO and LO2HI. 
-See examples in the TstWords.f file. This is perhaps the most interesting feature for development...
+*  WARM level : `SYS` -->(no PUC)--> INIT_FORTH --> INIT_HARD --> WARM display --> ABORT --> ACCEPT --> BACKGRND --> SLEEP.
 
+    *  when you type `SYS`, FORTH restarts, the WARM display starts by #0. 
+    
+    *  when you type `+n SYS` (n>0, odd), the WARM display starts by #+n. 
 
-The system is not responding ?
-======
+        * same effect as RST_RET
 
-First, swich off then switch on. FORTH restarts as it was after the last PWR\_HERE command.
+        * words ACCEPT, EMIT, KEY are initialised with their default value,
+    
+        * TIB is initialised with its default value.
 
-If the system is not restarted, press <reset> button on the MSP-EXP430FR5xxx ; FORTH restarts 
-as it was after the last RST_HERE command.
 
-If the system does not restart again, wire the TERMINAL TX pin to GND via 4k7 resistor then <reset> ; 
-FORTH restarts as it is in the HEX file.
-Equivalent word : COLD + WIPE.
+*  COLD level : `+n SYS` --> PUC --> INIT_FORTH --> INIT_HARD --> WARM display --> ABORT --> ACCEPT --> BACKGRND --> SLEEP.
 
-Here is the FastForth init architecture :
+    *  Power ON : the WARM display starts with the SYSRSTIV value #2.
+    
+    *  hardware `RST` : the WARM display starts with the SYSRSTIV value #6, because RST pin acts as NMI pin.
+    
+    *  SVSHIFG SVSH event (supply dropout) : the WARM display starts with the SYSRSTIV value: #14.
 
-       case 0 : when you type WARM, FORTH interpreter is restarted, no program lost. 
-                        the WARM display is preceded by "#0". 
+    *  PUC on failure : the WARM display starts with the SYSRSTIV value: #n.
 
-       case 1 : Power ON ==> performs reset and the program beyond PWR_HERE is lost.
-                        the WARM display is preceded by the SYSRSTIV value "#2".
+    *  other `+n SYS` (n>0 and even) are software RESET : the WARM display starts with the SYSRSTIV value "#+n" (even).
 
-       case 1.1 : when you type PWR_STATE ==> the program beyond PWR_HERE is lost.
+        * same effects as WARM level, plus:
 
-       case 1.2 : If an error message (reverse video) occurs, PWR_STATE is automatically executed 
-               and the program beyond PWR_HERE is lost. In this way, any compilation error is 
-               followed by the complete erasure of the uncompleted word, or by that of
-               the downloading source file causing this error. So, it is recommended to finish 
-               a source file with at least PWR_HERE to protect it against any subsequent error.
+        * performs a PUC.
 
-       case 2 : <reset>  ==> performs reset and the program beyond RST_HERE is lost.
-                        the WARM display is preceded by the SYSRSTIV value "#4".
-       
-       case 2.1 : when you type COLD (software reset) ==> same effects.
-                          the WARM display is preceded by the SYSRSTIV value "#6".
+    
 
-       case 2.2 : when you type RST_STATE ==> the program beyond RST_HERE is lost.
+*  DEEP RESET level:
 
+    *  `-n SYS` (n<0) performs the software Deep Reset, WARM display = #-n.
+    *  hardware `SW1+RESET`, WARM display = #-1.
+    
+    *  recompiling FastForth, WARM display = #-3.
 
-       case 3 : when you type WIPE ==> all programs donwloaded from the terminal or the SD_Card are lost.
+        * same effects as COLD level, plus:
 
+        *  all programs donwloaded from the TERMINAL or from the SD_CARD are lost,
 
-       case 4 : TERM_TX wired to GND via 4k7 during <reset> = DEEP_RST ===> performs reset, and all programs 
-             donwloaded from the terminal or the SD_Card are lost. The WARM display is preceded by "-4". 
-       
-       case 4.1 : software reset on failure (SYSRSTIV = 0Ah | SYSRSTIV >= 16h) ===> same effects
-                          The WARM display is preceded by the SYSRSTIV value.
-       
-       case 4.2 : writing -1 in SAVE_SYSRSTIV before COLD = software DEEP_RST ===> same effects
-                          The WARM display is preceded by "-1".
+        *  COLD_APP, SOFT_APP, HARD_APP and BACKGND_APP default values are restored,
 
-       case 5 : after FAST FORTH core compilation, the WARM displays SAVE_SYSRSTIV = 5. User may use this
-             information before WARM occurs.
+        *  all interrupts vectors are initialised with their default value, 
 
+        *  SIGNATURES area is FFh full filled.
 
-If SD\_CARD extention and SD\_CARD memory with \BOOT.4TH included, the cases 1 to 4 starts it 
-after displaying of WARM message. 
 
+* ERROR : ABORT" your_text" --> INIT_FORTH --> display = "your_text" --> ABORT --> ACCEPT --> BACKGRND --> SLEEP. 
+    
+    *  when an error occurs, FASTFORTH discards the end of current downloading if any. In this way, any error is followed by the complete erasure of the bad defined word causing this error, and also by discarding the end of downloading of the source file including it. 
 
-VOCABULARY ADD-ON
-====
 
-These words are not ANS94 compliant, they are those of F83 standard.
+Once validate, it is strongly recommended to end any source file with `RST_SET` to protect the resulting program from a subsequent download error.
 
-For example, after loading SD_TOOLS add-on, you can type: ALSO ASSEMBLER WORDS PREVIOUS WORDS
+As all other FORTH words, `RST_SET` `RST_RET` and` MARKER` definitions may be freely used in compiling mode.    
 
-    With ALSO ASSEMBLER, the vocabulary ASSEMBLER is added to the search CONTEXT thus the ASSEMBLER words
-    become visible
-    
-    WORDS display the words of ASSEMBLER then those of FORTH,
+If you have previously set `NOECHO`, there is no WARM display.
 
-    PREVIOUS remove the vocabulary ASSEMBLER form the CONTEXT, and the ASSEMBLER words become hidden,
+If you don't want to display an ABORT" message, type: `ABORT" "`
 
-    so the last WORDS display only FORTH words.
+With I2C_FastForth version, WARM and `ABORT"` displays are preceded by the decimal I2C slave address, example: `@18`. 
 
-In the forthMSP430FR_ASM.asm, see the FORTH word CODE that add ASSEMBLER to the search CONTEXT and the ASSEMBLER word ENDCODE
- that remove ASSEMBLER from search CONTEXT. Thus, the assembler words can be used only between CODE and ENDCODE.
 
-The CONTEXT can grow up to 6 vocabularies by using the word ALSO.
+## VOCABULARY ADD-ON
 
-If you want add words to the assembler you must type: ALSO ASSEMBLER DEFINITIONS,
-The vocabulary ASSEMBLER is added to the search CONTEXT as previously but also becomes the CURRENT vocabulary in which the new words will be stored.
+These words are not ANS94 compliant.
 
-Finally, FORTH ONLY DEFINITIONS limits the search CONTEXT to FORTH and the CURRENT vocabulary is FORTH. 
+The CONTEXT stack is 8 word_set sized.
 
-EMBEDDED ASSEMBLER
-======
+after typing: `WORDSET TRUC`   a new word-set called TRUC is created, then:
 
-With the preprocessor GEMA the embedded assembler allows access to all system variables. 
-See files \\inc\\Target.pat. 
-You can also access to VARIABLE, CONSTANT or DOES type words. See \\MSP430-FORTH\\TESTASM.4th.
+* `TRUC`            adds the word-set TRUC first in the CONTEXT stack, the interpreter search existing definitions first in TRUC
 
+* `DEFINITIONS`     adds news definitions in the first word-set in the CONTEXT stack, i.e. TRUC,
+* `PREVIOUS`        removes TRUC from CONTEXT but new definitions are still added in TRUC
+* `DEFINITIONS`     new definitions are added into the previous first word-set in the CONTEXT stack,
+*  after `-1 SYS`, FORTH is the CONTEXT and the CURRENT word-set.
 
 
-HOW TO MIX assembly and FORTH ?
----
+## EMBEDDED ASSEMBLER
 
-FAST FORTH knows two kinds of words :
+The preprocessor GEMA allows the embedded assembler to access all system variables. 
+See files \\inc\\Target.pat. 
 
-    low level assembly words starting with CODE <name> and ended with ENDCODE.
+### HOW TO MIX assembly and FORTH ?
 
-    high level FORTH words beginning with : <name> and ended with ;
+FAST FORTH knows two modes of definitions :
 
+* high level FORTH definitions `: <name> ... ;`
 
-Examples
+* assembly low level definitions `CODE <name> ... ENDCODE`
 
-    CODE ADD    \ Assembly word "ADD", alias of word +
-        ADD @PSP+,TOS
-        MOV @IP+,PC
-    ENDCODE
+there is also some variations of these two modes :
 
+* high level definitions `NONAME: ... ;`
 
-    : NOOP      \ FORTH word "NOOP", do nothing
+* low level definitions `CODENNM ... ENDCODE`, low-level equivalent of `NONAME:`
+    
+* low level definitions `HDNCODE <name> ... ENDCODE`, these definitions are 'hidden' and can be accessed only from assembly level.
+    
+Examples:
+    
+    : NOOP              \ FORTH definition "NOOP", does nothing
         DUP
         DROP
     ;
 
 
+    CODE ADD            \ low level definition "ADD", alias of word +
+        ADD @PSP+,TOS
+        MOV @IP+,PC
+    ENDCODE
 
-To end a low level assembly word, the instruction MOV @IP+,PC jumps to the next FORTH word. 
-This faster (4 cycles) and shorter (one word) instruction replaces the famous pair of assembly 
-instructions : CALL #LABEL ... RET (4+4 cycles, 2+1 words). The register IP is the Interpretative Pointer. 
 
-High level FORTH word starts with a boot code DOCOL that save the IP pointer, load it with the first address
-of a list of execution addresses, then performs a postincrement branch to this first address. 
-The list ends with the address of another piece of code EXIT (6 cycles) that restores IP before the instruction MOV @IP+,PC.
+    HDNCODE WDT_INT         \ low level hidden definition "WDT_INT" (Watchdog interrupt)
+    BIT #8,&TERM_STATW      \ break (ALT+b) sent by TERMINAL ?
+    0<> IF                  \ if yes
+        MOV #ABORT,PC       \   continue with ABORT (no return)
+    THEN
+                            \ else return to background task SLEEP
+    BIC #%0111_1000,0(RSP)  \ force CPU Active Mode, disable all interrupts
+    RETI                    \
+    ENDCODE
+    
+    
+At the end of low level CODE definition, the instruction MOV @IP+,PC jumps to the next definition. 
+This faster (4 cycles) and shorter (one word) instruction replaces the famous pair of assembly 
+instructions : CALL #LABEL ... RET (4+4 cycles, 2+1 words).  
+The register IP is the Interpretative Pointer. 
 
+High level FORTH definitions starts with a boot code "DOCOL" which saves the IP pointer and loads it with the first address
+of a list of execution addresses, then performs a postincrement branch to the first one. 
+The list ends with the address of another piece of code: EXIT (6 cycles) which restores IP before the instruction MOV @IP+,PC.
 
-here, the compilation of low level word ADD :
+here, the compilation of low level ADD definition :
 
                     header          \ compiled by the word CODE
     execution addr  ADD @PSP+,TOS
@@ -845,17 +939,15 @@ here, the compilation of low level word ADD :
 and the one of the high level word NOOP :
 
                     header          \ compiled by the word :
-    execution addr  CALL rDOCOL     \ boot code compiled by the word :
+    execution addr  PUSH IP         \ boot code "DOCOL"...
+                    CALL rDOCOL     \ ...compiled by the word :
                     addr of DUP     \ execution addr of DUP
                     addr of DROP    \ execution addr of DROP
                     addr of EXIT    \ execution addr of EXIT compiled by the word ;
 
-
 _A high level FORTH word is a list of execution addresses preceded by a boot code and ending with EXIT address._
 
-
-WRITING RULES
---
+### WRITING RULES
 
 any low level FORTH words must be ended with the instruction MOV @IP+,PC (NEXT).
 
@@ -865,11 +957,10 @@ any low level FORTH words must be ended with the instruction MOV @IP+,PC (NEXT).
             MOV @IP+,PC         \ NEXT
         ENDCODE                 \ end of low level word
 
-
 If you want to use the IP register, save it before and restore it before NEXT
 
         CODE TEST1              \ CODE starts a low level word
-            asm1                \ assembly instructions
+            asm1                \ assembly instruction
             ...
             PUSH IP             \ save IP before use
             MOV #1,IP           \ assembly instruction that uses IP
@@ -878,61 +969,57 @@ If you want to use the IP register, save it before and restore it before NEXT
             MOV @IP+,PC         \ NEXT
         ENDCODE                 \ end of low level word
 
-
-A little more complex, the case of mixing FORTH and assembly that is enabled by the words HI2LO, LO2HI and COLON
+A little more complex, the case of mixing FORTH and assembly with use of the words HI2LO, LO2HI and COLON
 
         : MIX_FORTH_ASM         \ definition of a FORTH word starts with :
             SWAP
             DUP
         HI2LO                   \ FORTH to assembler switch
-            asm1                \ assembly instruction
-            asm2                \ assembly instruction
-            ...                 \ you can freely use IP !
-            ...                 \ assembly instructions
-            MOV @RSP+,IP        \ restore IP
-            MOV @IP+,PC         \ NEXT
-        ENDCODE                 \ end of low level word
-    
+            asm1                \ you can freely use IP
+            asm2
+            ... 
+            ...
+            MOV @RSP+,IP        \ restore IP stacked by :
+            MOV @IP+,PC         \ goto NEXT
+        ENDCODE                 \ end of low level word, compile nothing
+
 If we see the code "MIX\_FORTH\_ASM" after compilation :
 
             header              \ compiled by :
-    exec@   CALL rDOCOL         \ boot code compiled by the word :
-            addr                \ execution addr of SWAP
-            addr                \ execution addr of DUP
+    exec@   PUSH IP             \ 
+            CALL rDOCOL
+            addr of SWAP
+            addr of DUP
             next addr           \ addr of asm1, compiled by HI2LO
-            asm1                \ assembly instruction
-            asm2                \ assembly instruction
-            ...                 \ you can freely use IP !
-            ...                 \ assembly instructions
-            MOV @RSP+,IP        \ restore IP saved by :
+            asm1
+            asm2
+            ...
+            ... 
+            MOV @RSP+,IP        \ restore IP saved by boot code
             MOV @IP+,PC         \ NEXT
 
-the instruction "CALL rEXIT" (CALL R7), have EXIT address as rEXIT content.
-
-
 going a step further :
 
         CODE MIX_ASM_FORTH      \ CODE starts a low level word
-            asm1                \ assembly instruction 1
-            asm2                \ assembly instruction 2
+            asm1
+            asm2
         COLON                   \ starts high level
             word1
             word2
-        ;                       \ end of high level word
-
+        ;                       \ end of high level word, compile EXIT
 
 If we see this code "MIX\_ASM\_FORTH" after compilation :
 
             header              \ compiled by CODE
-    exec@   asm1                \ assembly instruction 1
-            asm2                \ assembly instruction 2
-            CALL rDOCOL         \ compiled by COLON
-            addr1               \ of word1
-            addr2               \ of word2
-            addr of EXIT        \ the word ; compiles address of EXIT that restores IP then executes MOV @IP+,PC
+    exec@   asm1
+            asm2
+    DOCOL   PUSH IP
+            CALL rDOCOL         \ "DOCOL" compiled by COLON
+            addr of word1
+            addr of word2
+            addr of EXIT        \ EXIT restores IP from stack then executes MOV @IP+,PC
 
-
-A new step
+A new step:
 
         : MIX_FORTH_ASM_FORTH   \ definition of a FORTH word starts with :
             word1
@@ -949,61 +1036,49 @@ A new step
 
 the compiled result    
 
-            header              \ compiled by :
-    exec@   CALL rDOCOL         \ boot code compiled by the word :
-            addr1               \ of word1
-            addr2               \ of word2
+            header              \ )
+    exec@   PUSH IP             \ > compiled by :
+            CALL rDOCOL         \ )
+            addr of word1
+            addr of word2
             ...
             next addr           \ compiled by HI2LO
             MOV #0,IP           \ IP is free for use
             asm1                \ assembly instruction
             ...
-            CALL #EXIT          \ compiled by LO2HI (10 cycles switch)
-            addr3               \ of word3
-            addr4               \ of word4
-            addr5               \ of EXIT
-
-EXIT is used twice !
-
-the first time, by LO2HI :
-
-    EXIT    MOV @RSP+,IP    \ 2 pop into IP the PC pushed on return stack by CALL #EXIT
-            MOV @IP+,PC     \ 4 execute the routine at addr3 
-
-then at the end of FORTH word (addr5):
-
-    EXIT    MOV @RSP+,IP    \ 2 pop old IP from return stack
-            MOV @IP+,PC     \ 4 execute the routine pointed by the old IP
-
+            CALL rDOCOL         \ compiled by LO2HI
+            addr of word3
+            addr of word4
+            addr of EXIT        \ compiled by ;
 
 Still another step : 
 
         CODE MIX_ASM_FORTH_ASM  \ CODE starts a low level word
-            asm1                \ assembly instruction
-            asm2                \ assembly instruction
-        COLON                   \ starts high level
+            asm1
+            asm2
+        COLON                   \ start high level definition
             word
             ... 
-        HI2LO                   \ FORTH to assembler switch
-            asm3                \ assembly instruction
-            asm4                \ assembly instruction
+        HI2LO                   \ switch high to low level
+            asm3
+            asm4
             MOV @RSP+,IP        \ restore IP
-            MOV @IP+,PC         \ NEXT
+            MOV @IP+,PC         \ goto NEXT
         ENDCODE                 \ end of low level word
 
 In fact, an exclusive of FAST FORTH, the start of a word FORTH can be placed anywhere :
 
         CODE MIX_ASM_FORTH_ASM_FORTH
-            asm
-            asm
+            asm1
+            asm2
             ...
-        COLON                   \ starts high level
-            word
-            word
+        COLON                   \ starts high level definition
+            word1
+            word2
             ...
         HI2LO                   \ FORTH to assembler switch
-            asm
-            asm
+            asm3
+            asm4
            ...
         LO2HI                   \ assembler to FORTH switch
             word
@@ -1016,27 +1091,26 @@ with the compiled result :
             header              \ compiled by CODE
     exec@   asm
             asm
-            CALL rDOCOL         \ compiled by COLON
+    DOCOL   PUSH IP             \ compiled... 
+            CALL rDOCOL         \ ...by COLON
             addr
             addr
             next address        \ compiled by HI2LO
             asm
             asm
-            CALL #EXIT          \ compiled by LO2HI
+            CALL rDOCOL         \ compiled by LO2HI
             addr
             addr
             EXIT addr           \ that restores IP from return stack and then executes MOV @IP+,PC
 
-As we see, IP is saved only once, it's logical.                      
 
-
-ASSEMBLER WITHOUT LABELS ? YES !
----
+### ASSEMBLER WITHOUT LABELS ? YES !
 
 To compare AS macro assembler and FastForth embedded assembler,
 compare files \ADDON\FIXPOINT.asm and \MSP430-FORTH\FIXPOINT.f
 
-The syntax of FastForth assembler borrows FORTH's one :
+The conditionnal instructions doesn't use labels.
+Instead, they borrow FORTH's conditional environment:
 
     CODE TEST_IF_THEN
         CMP #1,R8           \ set Z,N,V, flags
@@ -1057,12 +1131,12 @@ and the complete version :
         ELSE
             SUB R8,R9       \ false part of comparaison
         THEN                    
-        ...                 \ following for the two branches
-        MOV @IP+,PC         \ don't forget...
-    ENDCODE                 \ don't forget...
+        ...                 \ the next for the two branches
+        MOV @IP+,PC
+    ENDCODE
 
 test for loop back version BEGIN ... UNTIL
-                            
+
     CODE TEST_BEGIN_UNTIL
         MOV #8,R10
         BEGIN           
@@ -1095,7 +1169,6 @@ infinite loop :
 
 to quit this infinite loop, press reset. 
 
-
 We can nest several conditional branches :
 
     CODE TEST_NESTED_IF_ELSE
@@ -1112,7 +1185,7 @@ We can nest several conditional branches :
         THEN
         MOV @IP+,PC
     ENDCODE
-    
+
 another nest :
 
     CODE TEST_NESTED_BEGIN_AGAIN_IF
@@ -1126,37 +1199,12 @@ another nest :
         AGAIN
     ENDCODE
 
+you can MIX conditional branches with a mix of FORTH/assembly: see TEST5 in the demo file \MSP430-FORTH\TESTASM.4TH
 
-you can also MIX conditional branches with a mix of FORTH/assembly :
-
-    see TEST5 in the demo file \MSP430-FORTH\TESTASM.4TH
-
-
-...but not quite !
----
-
-unconditionnal backward jump :
 
-        CODE UNCOND_BACKWARD
-            asm
-            asm
-            JMP TEST_NESTED_BEGIN_AGAIN_IF  \ jump backward to a predefined word
-        ENDCODE
-
-conditionnal backward jump :
+FAST FORTH have one pass assembler, not able to resolve forward jumps.
 
-        CODE COND_BACKWARD
-            asm
-            CMP #0,R8
-            S< ?JMP TEST_NESTED_BEGIN_AGAIN_IF    \ jump backward if negative
-            asm
-            MOV @IP+,PC
-        ENDCODE
-
-
-But FAST FORTH have one pass assembler, not able to make forward jump.
-
-I have added possibility of several "non canonical" jumps, up to 3 backward and up to 3 forward imbricated jumps to label :
+I have added possibility of several "non canonical" jumps, up to 3 backward and up to 3 forward jumps to label :
 
     \ C UM/MOD   udlo|udhi u1 -- ur uq
     CODE UM/MOD
@@ -1166,10 +1214,11 @@ I have added possibility of several "non canonical" jumps, up to 3 backward and
         MOV #0,Y        \ 1 CLEAR RESULT
         MOV #16,X       \ 2 INITIALIZE LOOP COUNTER
     BW1 CMP TOS,W       \ 1
-        U< ?GOTO FW1    \ 2 if not carry
-        SUB TOS,W       \ 1 if carry DIVIDENDhi-divisor
-    FW1                 \   FW1 label is resolved therefore reusable
-    BW2 ADDC Y,Y        \ 1 RLC quotient
+        U>= IF          \ 2
+            SUB TOS,W   \ 1 if carry DIVIDENDhi-divisor
+        THEN
+    BEGIN
+        ADDC Y,Y        \ 1 RLC quotient
         U>= ?GOTO FW1   \ 2 if carry Error: result > 16 bits
         SUB #1,X        \ 1 Decrement loop counter
         <0 ?GOTO FW2    \ 2 if 0< terminate w/o error
@@ -1178,31 +1227,62 @@ I have added possibility of several "non canonical" jumps, up to 3 backward and
         U< ?GOTO BW1    \ 2 if not carry    14~ loop
         SUB TOS,W       \ 1 if carry DIVIDENDhi-divisor
         BIS #1,SR       \ 1 SETC
-        GOTO BW2        \ 2                 14~ loop
+    AGAIN               \ 2                 14~ loop
     FW2 BIC #1,SR       \ 1 CLRC  No error, C = 0
     FW1                 \  Error indication in C
-    \ END T.I. ROUTINE  Section 5.1.5 of MSP430 Family Application Reports
+    \ END of T.I. ROUTINE  Section 5.1.5 of MSP430 Family Application Reports
         MOV W,0(PSP)    \ 3 remainder on stack
         MOV Y,TOS       \ 1 quotient in TOS
         MOV @IP+,PC     \ 4
     ENDCODE
 
+Forward labels FWx are for single use, backward labels BWx can solve several jumps,
+until their new definition.
 
-SYMBOLIC ASSEMBLER ? YES !
---
+### SYMBOLIC ASSEMBLER ? YES !
 
 I have discovered a little semantic preprocessor "GEMA", just like that FAST FORTH have its symbolic assembler !
 
-    \inc\DEVICE.pat contains memory map and vectors for a specified DEVICE
-    \inc\LAUNCHPAD.pat is the I/O config file for specific LAUNCHPAD (or application)
+* \inc\DEVICE.pat contains memory map and vectors for a specified DEVICE
+* \inc\LAUNCHPAD.pat is the I/O config file for specific LAUNCHPAD (or application)
+
+Gema translates FORTH registers in ASM registers (R0 to R15) via \inc\ThingsInFirst.pat
+
+With the three bat files in \MSP430_FORTH folder all is done automatically.
+
+### WHAT ABOUT VARIABLES, CONSTANTS...
+
+In addition to the FORTH VARIABLE and CONSTANT definitions, the macroassembler allows to use symbolic variables and constants
+which are compiled / executed as number by the FORTH interpreter, also by the assembler, but only in the scope of a source use.f file with their declaration done in a use.pat file.
 
-gema translates also FORTH registers in ASM registers (R0 to R15)
+On the other hand, the CONSTANT, VARIABLE and MARKER definitions are correctly handled by the assembler which provides for each case the expected argument: the constant, the address of the variable and the address of the first user variable with MARKER.
 
-With the three bat files in \MSP-430 folder all is done automatically.
+Example:
 
+    VARIABLE BASE 
+    $10 BASE !
+    2 CONSTANT TWO
+    MARKER {MYAPP}
+    'ESC' , 'XON' C, 'XOFF' C,
+    
+    HDNCODE EXAMPLE         \ hidden definition because linked in the hidden word-set
+    CMP #RET_ADR,&{MYAPP}-2 \ compare content of {MYAPP}-2 address with RET_ADR
+    MOV &BASE,X             \ X = 16
+    MOV #BASE,X             \ X = address of base
+    MOV @X,X                \ X = 16
+    MOV #TWO,Y              \ Y = 2
+    MOV &{MYAPP},W          \ W = $1B
+    MOV.B &{MYAPP}+2,W      \ W = 17
+    MOV.B &{MYAPP}+3,W      \ W = 19
+    MOV @IP+PC
+    ENDCODE
+
+    CODE RUN_EXAMPLE
+    MOV #EXAMPLE,PC         \ = BR EXAMPLE      runs EXAMPLE, without return
+    ENDCODE
 
-COMPILE FAST FORTH FOR YOUR MODULE
---
+
+# COMPILE FAST FORTH FOR YOUR TARGET
 
 1- in forthMSP430FR.asm "TARGET configuration"  create a line for your target, example:
 
@@ -1214,9 +1294,9 @@ Notice that you must define here only the necessary for FAST-FORTH compilation.
 3- in \inc\ThingsInFirst.inc add one "device.inc" item:
 
         .IFDEF MY_MSP430FR5738_1
-    UCA0_UART   ; defines uart used by FORTH input terminal 
+    UCA0_UART   ; defines uart used for TERMINAL 
     LF_XTAL     ; defines if your module have a 32768 Hz xtal, to enable it.
-    UCB0_SD     ; defines UC used for SD Card driver if used
+    UCB0_SD     ; defines UC used for SD Card driver if any
         .include "MSP430FR5738.inc"  ; include device declarations
         .ENDIF
 
@@ -1226,269 +1306,640 @@ Notice that you must define here only the necessary for FAST-FORTH compilation.
             .include MY_MSP430FR5738_1.asm
         .ENDIF
 
+Then, for the preprocessor which you will use when downloading FORTH source files:
 
-Then, for the preprocessor which you will use when downloading source files:
-
-1- create your \inc\device.pat file if not exist, from your \inc\device.inc and another \inc\device.pat as pattern.
+1- create your \inc\device.pat file if not exist, from your \inc\device.inc and/or another \inc\device.pat as pattern.
 
-2- create your \inc\target.pat file from your \inc\target.asm and another \inc\target.pat as pattern.
+2- create your \inc\target.pat file from your \inc\target.asm and/or another \inc\target.pat as pattern.
 
 Best practice, I suggest you that all digital pins you define (input or output) in your projects have their idle state high, with external pull up resistor
 that is the reset state of FastForth...
 
-START YOUR PROJECT
---
-
-How to start your project ?
 
-I show you, assuming you are working from the scite editor with its enhanced tools menu.
+# ANNEXES
 
-First you create two files : project.f and test.f
+Here you have a good overview of MSP430 assembly:
+[MSP430 ISA](http://www.ece.utep.edu/courses/web3376/Notes_files/ee3376-isa.pdf)
 
-PROJECT.f :
+FastForth embedded assembler doesn't recognize the (useless) TI's symbolic addressing mode: ADD.B EDE,TONI.
 
-    ; ----------------------------------------------------
-    ; MSP430FR5969 MSP_EXP430FR5969 8MHZ 921600bds PROJECT.f
-    ; ----------------------------------------------------
+REGISTERS correspondence (you can freely use ASM or TI or FASTFORTH registers's names).
 
-    [DEFINED] {PROJECT} [IF] {PROJECT} [THEN] \ remove {PROJECT} if exist (memory managment)
-   
-    MARKER {PROJECT}
+        REG         TI      FASTFORTH   comment 
     
+        R0          PC      PC          Program Counter
+        R1          SP      RSP         Return Stack Pointer
+        R2          SR/CG1              Status Register/Constant Generator 1
+        R3          CG2                 Constant Generator 2
+        R4          R4      R (rDOCOL)  contents address of xDOCOL (DTC=1|2)            
+        R5          R5      Q (rDODOES) contents address of xdodoes   
+        R6          R6      P (rDOCON)  contents address of xdocon    
+        R7          R7      M (rDOVAR)  contents address of RFROM           
+        R8          R8      Y           scratch register
+        R9          R9      X           scratch register
+        R10         R10     W           scratch register
+        R11         R11     T           scratch register
+        R12         R12     S           scratch register      
+        R13         R13     IP          Interpretation Pointer
+        R14         R14     TOS         Top Of parameters Stack
+        R15         R15     PSP         Parameters Stack Pointer
 
-here you append your already tested routines :
-
-    CODE FIRST  \ assembler CODE words are FORTH executable
-        ...
-    MOV @IP+,PC \ NEXT
-    ENCODE
-
-    ASM TWO     \ assembler ASM words are not FORTH executable and can only be used in assembler mode
-        ...     \ used to define interrupt routines, or subroutines called by CALL...
-    RET         \ and ended by RET or RETI.
-    ENDASM
-
-    CODE THREE
-        ...
-    CALL #TWO   \ CALL only ASM words
-        ...
-    MOV @IP+,PC \ NEXT
-    ENCODE
-
-    ASM WDT_INT             \ interrupt routine
-        ...
-        ...
-    BIC #WDTIFG,&SFRIFG1    \ reset WDT_INT flag
-    BIC #$F8,0(RSP)         \ set CPU ON and GIE OFF in saved SR
-    RETI                    \   
-    ENDASM
+**REGISTERS use**
 
-    ;
+The FASTFORTH registers rDOCOL, rDOVAR, rDOCON and rDODOES must be preserved. 
+If you use them you may either `PUSHM #4,M` before and `POPM #4,M after`,
+or use them directly then restore FastForth default values:
 
-then finish with this 2 "magic" words plus one optional : START, STOP and optional BACKGROUND
+`MOV #INIT_DOXXX,X`  
+`MOV @X+,rDOCOL`  
+`MOV @X+,rDODOES`  
+`MOV @X+,rDOCON`  
+`MOV @X,rDOVAR`
 
-    ASM BACKGROUND          \ (optional)
-    BW1
-        ...                 \ insert here your background task
-        ...
-        ...
-    BIS &LPM_MODE,SR        \
-    GOTO BW1
-    ENDASM                  \
+(Search `INIT_DOXXX` in \inc\MSP430xxxx.pat)
 
+If you want to restore only rDODOES, rDOCON and rDOVAR:
 
+`MOV #INIT_DOXXX+4,X`  
+`MOV @X+,rDODOES`  
+`MOV @X+,rDOCON`  
+`MOV @X,rDOVAR`
 
+If you want to restore only rDODOES and rDOCON:
 
+`MOV #XDODOES,rDODOES`  
+`MOV #XDOCON,rDOCON`  
 
-    CODE START              \ to init your app
-        ...                 \ init assembly part
-    MOV #WDT_INT,&VEC_WDT   \ init WDT vector interrupt
-        ...
-    BIC #RC5,&P1REN         \ init I/O
-        ...
+When you use these registers you can't call any FORTH words using them at the same time! 
 
-    MOV #SLEEP,X            \ redirect default background task to yours (optional)
-    MOV #BACKGROUND,2(X)    \
+don't use R3 and use R2 (SR) only with BIC, BIT, BIS instructions in register mode.
 
-    COLON
-        ...                 \ init FORTH part
+The bits 0-11 of SR register are saved by interrupts and restored by the instruction RETI.
+you can use freely UF9 UF10 and UF11 as SR bits 9-11. 
+FastForth uses UF9 for double numbers interpreting and also by TO ... VALUE.
     
-        LIT RECURSE IS WARM \ replace WARM by START
-        ['] WARM >BODY      \ and end START with default WARM
-        EXECUTE             \ that unlock I/O, start FORTH process
-    ;                       \ then fall down to sleep state, waiting any interrupt...
-
-
-    CODE STOP               \ to properly stop your app
-        MOV #SLEEP,X        \ restore the default background (optional)
-        ADD #4,X            \ (word SLEEP can only be seen in assembler mode, not in FORTH)
-        MOV X,-2(X)
-    COLON
-        ['] WARM >BODY
-        IS WARM             \ remove START from FORTH init process 
-        ECHO                \ to always retrieve FORTH input terminal
-        COLD                \ reset CPU, interrupt vectors and restart FORTH.
-    ;
 
+**PARAMETERS STACK**
 
-    RST_HERE
+The register TOS (Top Of Stack) is the first cell of the Parameters stack. 
+The register PSP (Parameters Stack Pointer) points the second cell.
 
-    START       ; let's go!
+to push one cell on the PSP stack :
 
-end of file
+    SUB #2,PSP                  \ insert a empty 2th cell
+    MOV TOS,0(PSP)              \ fill this 2th cell with first cell
+    MOV(.B) <what you want>,TOS \ i.e. update first cell
 
+to pop one cell from the PSP stack :
 
-Each time you download this project file, the word {PROJECT} removes all subsequent definitions,
-and the word RST_HERE protects the PROJECT against RESET. 
+    MOV @PSP+,TOS               \ first cell TOS is lost and replaced by the 2th.
 
-The word START allows you to include your app init into FORTH's one.
-The word STOP unlink your app from FORTH init process.
+don't never pop a byte with instruction MOV.B @PSP+, because it generates a stack misalignement...
 
-Look at the file RC5toLCD.f to retrieve this structure.
+**RETURN STACK**
 
+register RSP is the Return Stack Pointer (SP).
 
+to push one cell on the RSP stack: `PUSH <what you want>`
 
-TEST.f :
+to pop one cell from the RSP stack: `MOV @RSP+,<where you want>`
 
-    \ ----------------------------------
-    \ MSP-EXP430FR5969_8MHZ_TEST.f
-    \ ----------------------------------
+don't never push or pop a byte on RSP stack !
 
-    RST_STATE   \ memory managment
 
-    here you write your routine to test
-    
-    CODE TEST
-    ...
-    ...
-    MOV @IP+,PC
-    ENDCODE
+to push multiple registers on the RSP stack :
 
+`PUSHM #n,Rx`,  with 0 <= x-(n-1) < 16
 
-    PWR_HERE    \ test.f content is protected against POWER OFF, but volatile with <reset>
+to pop multiple registers from the RSP stack :
 
+`POPM #n,Rx`,  with 0 <= x-(n-1) < 16
 
-Each time you download this TEST file, the word RST\_STATE clears memory content beyond PROJECT. 
+    PUSHM order : PSP,TOS, IP, S , T , W , X , Y ,rDOVAR,rDOCON,rDODOES,rDOCOL, R3, SR,RSP, PC
+    PUSHM order : R15,R14,R13,R12,R11,R10, R9, R8,  R7  ,  R6  ,  R5   ,  R4  , R3, R2, R1, R0
 
-let's go
---
+example : `PUSHM #6,IP` pushes IP,S,T,W,X,Y registers to return stack
 
-With the SCITE menu tools : send a file.f, you download first your project.f file, then your test.f file that include the routine to test.
+    POPM  order :  PC,RSP, SR, R3,rDOCOL,rDODOES,rDOCON,rDOVAR, Y , X , W , T , S , IP,TOS,PSP
+    POPM  order :  R0, R1, R2, R3,  R4  ,  R5   ,  R6  ,   R7 , R8, R9,R10,R11,R12,R13,R14,R15
 
-If the test don't work, modify it in the test.f file, then reload it.
+example : `POPM #6,IP` pulls Y,X,W,T,S,IP registers from return stack
 
-When the routine "test" works as you want, you cut it in test.f file and copy it in project.f, then when you reload it, test is done !
+Error occurs if #n is out of bounds.
 
-Good luck !
+**conditionnal jumps use**
 
+    0=    with IF UNTIL WHILE ?GOTO
+    0<>   with IF UNTIL WHILE ?GOTO   
+    U>=   with IF UNTIL WHILE ?GOTO   
+    U<    with IF UNTIL WHILE ?GOTO    
+    S<    with IF UNTIL WHILE ?GOTO    
+    S>=   with IF UNTIL WHILE ?GOTO   
+    0>=   with IF UNTIL WHILE
+    0<    with ?GOTO 
+
+# FAST FORTH resumed
+
+    RETURN-STACK-CELLS  = 48            max size of the return stack, in cells  
+    STACK-CELLS         = 48            max size of the data stack, in cells  
+    /COUNTED-STRING     = 255              max size of a counted string, in characters  
+    /HOLD                 = 34            size of the pictured numeric output string buffer, in characters  
+    /PAD                   = 84            size of the scratch area pointed to by PAD, in characters  
+    ADDRESS-UNIT-BITS   = 16            size of one address unit, in bits
+    FLOORED             = true             true if floored division is the default
+    MAX-CHAR           = 255           max value of any character in the implementation-defined character set
+    MAX-N               = 32767         largest usable signed integer  
+    MAX-U               = 65535         largest usable unsigned integer  
+    MAX-D                 = 2147483647     largest usable signed double number  
+    MAX-UD              = 4294967295    largest usable unsigned double number  
+    DeFiNiTiOnS aRe CaSe-InSeNsItIvE    they are compiled in their CAPS_ON form.
+
+## FORTH word-set
+
+Reduced to 53 definitions, but with everything necessary to be expandable up to $FF80.
+
+RST_SET,
+RST_RET,
+[MARKER     ](https://forth-standard.org/standard/core/MARKER),
+HI2LO,
+CODENNM,
+HDNCODE,
+CODE,
+[IS         ](https://forth-standard.org/standard/core/IS),
+[\:NONAME   ](https://forth-standard.org/standard/core/ColonNONAME),
+[DOES>      ](https://forth-standard.org/standard/core/DOES),
+[CREATE     ](https://forth-standard.org/standard/core/CREATE),
+[IMMEDIATE  ](https://forth-standard.org/standard/core/IMMEDIATE),
+[;          ](https://forth-standard.org/standard/core/Semi),
+[:          ](https://forth-standard.org/standard/core/Colon),
+[POSTPONE   ](https://forth-standard.org/standard/core/POSTPONE),
+[\\         ](https://forth-standard.org/standard/core/bs),
+[\]         ](https://forth-standard.org/standard/core/right-bracket),
+[\[         ](https://forth-standard.org/standard/core/Bracket),
+[\[\'\]     ](https://forth-standard.org/standard/core/BracketTick),
+[\'         ](https://forth-standard.org/standard/core/Tick),
+[ABORT"     ](https://forth-standard.org/standard/core/ABORTq),
+[ALLOT      ](https://forth-standard.org/standard/core/ALLOT),
+[COUNT      ](https://forth-standard.org/standard/core/COUNT),
+[LITERAL    ](https://forth-standard.org/standard/core/LITERAL),
+[,          ](https://forth-standard.org/standard/core/Comma),
+[>NUMBER    ](https://forth-standard.org/standard/core/toNUMBER),
+[FIND       ](https://forth-standard.org/standard/core/FIND),
+[WORD       ](https://forth-standard.org/standard/core/WORD),
+[."         ](https://forth-standard.org/standard/core/Dotq),
+[S"         ](https://forth-standard.org/standard/core/Sq),
+[.          ](https://forth-standard.org/standard/core/d),
+[U.         ](https://forth-standard.org/standard/core/Ud),
+[SIGN       ](https://forth-standard.org/standard/core/SIGN),
+[HOLD       ](https://forth-standard.org/standard/core/HOLD),
+[#>         ](https://forth-standard.org/standard/core/num-end),
+[#S         ](https://forth-standard.org/standard/core/numS),
+[#          ](https://forth-standard.org/standard/core/num),
+[<#         ](https://forth-standard.org/standard/core/num-start),
+[\[UNDEFINED\]  ](https://forth-standard.org/standard/tools/BracketUNDEFINED),
+[\[DEFINED\]    ](https://forth-standard.org/standard/tools/BracketDEFINED),
+[\[IF\]         ](https://forth-standard.org/standard/tools/BracketIF),
+[\[THEN\]       ](https://forth-standard.org/standard/tools/BracketTHEN)
+[\[ELSE\]       ](https://forth-standard.org/standard/tools/BracketELSE),
+[!          ](https://forth-standard.org/standard/core/Store),
+[@          ](https://forth-standard.org/standard/core/Fetch),
+[TYPE       ](https://forth-standard.org/standard/core/TYPE),
+NOECHO,
+ECHO,
+[EMIT       ](https://forth-standard.org/standard/core/EMIT),
+[KEY        ](https://forth-standard.org/standard/core/KEY),
+[ACCEPT     ](https://forth-standard.org/standard/core/ACCEPT),
+SYS.
+
+Words ACCEPT KEY EMIT are DEFERred definitions. ACCEPT doesn't use KEY.
+
+    RST_SET         defines the bound of the program memory protected against any PUC.  
+    RST_RET         removes all words defined after RST_SET.  
+    HI2LO           used to switch compilation from high level (FORTH) to low level (assembler).
+    CODENNM         the assembler counterpart of :NONAME.
+    CODE <name>     creates a definition written in assembler.
+                    this defined <name> must be ended with ENDCODE unless COLON or LO2HI use. 
+    HDNCODE <name>  same as CODE but the definition is in the hidden word-set to be visible only in the assembly mode.
+    NOECHO          disables display on the TERMINAL  
+    ECHO            enables display on the TERMINAL
+    SYS             0 SYS | SYS   executes WARM
+                    +n (odd) SYS  same,
+                    +n (even) SYS does software RESET then executes WARM 
+                    -n SYS        same as +n (even) SYS, plus resets the program memory to its original state.
+
+### Other constants/addresses which are usable in any generic source_files.f
+
+**All constants, variables and definitions included in \inc\any.pat files are usable by
+the assembler and also by the FORTH interpreter.**
+
+
+## MSP430ASSEMBLER word-set (in the hidden word-set)
+
+[ADD, ADD.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=135),
+[ADDC, ADDC.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=136),
+[AND, AND.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=137),
+[BIC, BIC.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=138),
+[BIS, BIS.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=139),
+[BIT, BIT.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=140),
+[CALL           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=142),
+[CMP, CMP.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=147),
+[DADD, DADD.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=149),
+[MOV, MOV.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=165),
+[PUSH, PUSH.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=168),
+[RETI           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=170),
+[RRA, RRA.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=173),
+[RRC, RRC.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=174),
+[SUB, SUB.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=179),
+[SUBC, SUBC.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=180),
+[SWPB           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=181),
+[SXT            ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=182),
+[XOR, XOR.B     ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=184),
+[RRUM           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=218),
+[RLAM           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=208),
+[RRAM           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=211),
+[RRCM           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=214),
+[POPM           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=204),
+[PUSHM          ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=205),
+?GOTO,
+GOTO, 
+BW3, 
+BW2,
+BW1,
+FW3,
+FW2,
+FW1,
+REPEAT,
+WHILE,
+AGAIN,
+UNTIL,
+ELSE,
+THEN,
+IF,
+0=,
+0<>,
+U>=,
+U<,
+0<,
+0>=,
+S<,
+S>=,
+LO2HI,
+COLON,
+ENDCODE.
+
+    ?GOTO           used after a conditionnal (0=,0<>,U>=,U<,0<,S<,S>=) to branch to a label FWx or BWx  
+    GOTO            used as unconditionnal branch to a label FWx or BWx  
+    BW3             BACKWARD branch destination n°3  
+    BW2                                         n°2  
+    BW1                                         n°1  
+    FW3             FORWARD branch destination  n°3  
+    FW2                                         n°2  
+    FW1                                         n°1  
+    REPEAT          assembler version of the FORTH word REPEAT  
+    WHILE           idem  
+    AGAIN           idem  
+    UNTIL           idem  
+    ELSE            idem  
+    THEN            idem  
+    IF              idem  
+    0=              conditionnal       
+    0<>             conditionnal  
+    U>=             conditionnal  
+    U<              conditionnal  
+    0<              conditionnal, to use only with ?GOTO  
+    0>=             conditionnal, to use only with IF UNTIL WHILE  
+    S<              conditionnal  
+    S>=             conditionnal  
+    LO2HI           switches compilation from low level to high level modes without saving IP register.  
+    COLON           pushes IP then performs LO2HI.
+    ENDCODE         to end a CODE or HDNCODE definition.  
+
+#### EXTENDED_MEM WORDS set:
+
+Gives access to addresses beyond $FFFF
+
+[POPM.A         ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=204),
+[PUSHM.A        ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=205),
+[ADDA           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=229),
+[CALLA          ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=232),
+[CMPA           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=235),
+[MOVA           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=238),
+[SUBA           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=241)
+
+#### EXTENDED_ASM WORDS set:
+
+Full 20 bits address/data assembler
+
+[ADDX, ADDX.A, ADDX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=187),
+[ADDCX, ADDCX.A, ADDCX.B](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=188),
+[ANDX ANDX.A, ANDX.B    ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=189),
+[BICX, BICX.A, BICX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=190),
+[BISX, BISX.A, BISX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=191),
+[BITX, BITX.A, BITX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=192),
+[CMPX, CMPX.A, CMPX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=194),
+[DADDX, DADDX.A, DADDX.B](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=196),
+[MOVX, MOVX.A, MOVX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=202),
+[PUSHX, PUSHX.A, PUSHX.B](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=207),
+[RRAX, RRAX.A, RRAX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=212),
+[RRCX, RRCX.A, RRCX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=216),
+[RRUX, RRUX.A, RRUX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=219),
+[SUBX, SUBX.A, SUBX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=221),
+[SUBCX, SUBCX.A, SUBCX.B](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=222),
+[SWPBX, SWPBX.A         ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=223),
+[SXTX, SXTX.A           ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=225),
+[XORX, XORX.A, XORX.B   ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=227),
+[RPT                    ](http://www.ti.com/lit/ug/slau272d/slau272d.pdf#page=119)
+
+### VOCABULARY ADD-ON
+
+[DEFINITIONS     ](https://forth-standard.org/standard/search/DEFINITIONS),
+[PREVIOUS        ](https://forth-standard.org/standard/search/PREVIOUS),
+ONLY,
+FORTH,
+WORDSET.
+
+    FORTH               adds FORTH as first CONTEXT word-set  
+    FORTH ONLY          clears the CONTEXT stack, same as `-1 SYS`
+    WORDSET <name>      creates a new word-set named <name>
+    <name>              adds this named word-set in the CONTEXT stack
+
+
+### SD_CARD_LOADER ADD-ON
+
+    LOAD" SD_TEST.4TH"  loads source file SD_TEST.4TH from SD_Card and compile it.
+    BOOT                enable bootstrap
+    NOBOOT              disable bootstrap
+
+Once bootloader is enabled, any PUC event loads (and executes) the file \BOOT.4TH from the SD_Card.
+
+### SD_CARD_READ_WRITE ADD-ON
+
+    TERM2SD"        TERM2SD" SD_TEST.4TH" copy SD_TEST.4TH file to SD_CARD (use CopySourceFileToTarget_SD_Card.bat to do)
+    WRITE           write sequentially the content of SD_buf to a file
+    READ            read sequentially a file in SD_buf, leave a flag, false when the file is automatically closed.
+    CLOSE           close last opened file.
+    DEL" TRUC"      remove the file TRUC from SD_CARD.
+    WRITE" TRUC"    create or overwrite a file TRUC ready to write to its beginning.
+    APPEND" TRUC"   open or create a file TRUC ready to write to the end of this file
+    READ" TRUC"     open TRUC and load its first sector in SD_buf
+    WR_SECT         Write SD_BUF in Sector loaded in  W=lo:X=hi
+    RD_SECT         load Sector W=lo:X=hi into SD_BUF, set BufferPtr=0
+
+
+## OPTIONNAL ADD-ON
+
+* Their respective MARKER word identified with braces {} removes all ADD-ONs words.  
+  Sources are in the folder \MSP430-FORTH\, as source.f file.
+
+### ANS_COMP
+
+Adds complement to pass FORTH ANS94 core test.
+
+[VALUE      ](https://forth-standard.org/standard/core/VALUE),
+[TO         ](https://forth-standard.org/standard/core/TO),
+[DEFER      ](https://forth-standard.org/standard/core/DEFER),
+[BEGIN      ](https://forth-standard.org/standard/core/BEGIN),
+[SPACES     ](https://forth-standard.org/standard/core/SPACES),
+[SPACE      ](https://forth-standard.org/standard/core/SPACE),
+[BL         ](https://forth-standard.org/standard/core/BL),
+[PAD        ](https://forth-standard.org/standard/core/PAD),
+[>IN        ](https://forth-standard.org/standard/core/toIN),
+[BASE       ](https://forth-standard.org/standard/core/BASE),
+[STATE      ](https://forth-standard.org/standard/core/STATE),
+[CONSTANT   ](https://forth-standard.org/standard/core/CONSTANT),
+[VARIABLE   ](https://forth-standard.org/standard/core/VARIABLE),
+[SOURCE     ](https://forth-standard.org/standard/core/SOURCE),
+[RECURSE    ](https://forth-standard.org/standard/core/RECURSE),
+[EVALUATE   ](https://forth-standard.org/standard/core/EVALUATE),
+[EXECUTE    ](https://forth-standard.org/standard/core/EXECUTE),
+[>BODY      ](https://forth-standard.org/standard/core/toBODY),
+[.(         ](https://forth-standard.org/standard/core/Dotp),
+[(          ](https://forth-standard.org/standard/core/p),
+[DECIMAL    ](https://forth-standard.org/standard/core/DECIMAL),
+[HEX        ](https://forth-standard.org/standard/core/HEX),
+[HERE       ](https://forth-standard.org/standard/core/HERE),
+[FILL       ](https://forth-standard.org/standard/core/FILL),
+[MOVE       ](https://forth-standard.org/standard/core/MOVE),
+[+!         ](https://forth-standard.org/standard/core/PlusStore),
+[[CHAR]     ](https://forth-standard.org/standard/core/BracketCHAR),
+[CHAR       ](https://forth-standard.org/standard/core/CHAR),
+[CELL+      ](https://forth-standard.org/standard/core/CELLPlus),
+[CELLS      ](https://forth-standard.org/standard/core/CELLS),
+[CHAR+      ](https://forth-standard.org/standard/core/CHARPlus),
+[CHARS      ](https://forth-standard.org/standard/core/CHARS),
+[ALIGN      ](https://forth-standard.org/standard/core/ALIGN),
+[ALIGNED    ](https://forth-standard.org/standard/core/ALIGNED),
+[2OVER      ](https://forth-standard.org/standard/core/TwoOVER),
+[2SWAP      ](https://forth-standard.org/standard/core/TwoSWAP),
+[2DROP      ](https://forth-standard.org/standard/core/TwoDROP),
+[2DUP       ](https://forth-standard.org/standard/core/TwoDUP),
+[2!         ](https://forth-standard.org/standard/core/TwoStore),
+[2@         ](https://forth-standard.org/standard/core/TwoFetch),
+[R@         ](https://forth-standard.org/standard/core/RFetch),
+[ROT        ](https://forth-standard.org/standard/core/ROT),
+[OVER       ](https://forth-standard.org/standard/core/OVER),
+[*/         ](https://forth-standard.org/standard/core/TimesDiv),
+[*/MOD      ](https://forth-standard.org/standard/core/TimesDivMOD),
+[MOD        ](https://forth-standard.org/standard/core/MOD),
+[/          ](https://forth-standard.org/standard/core/Div),
+[/MOD       ](https://forth-standard.org/standard/core/DivMOD),
+[*          ](https://forth-standard.org/standard/core/Times),
+[FM/MOD     ](https://forth-standard.org/standard/core/FMDivMOD),
+[ABS        ](https://forth-standard.org/standard/core/ABS),
+[NEGATE     ](https://forth-standard.org/standard/core/NEGATE),
+[SM/REM     ](https://forth-standard.org/standard/core/SMDivREM),
+[UM/MOD     ](https://forth-standard.org/standard/core/UMDivMOD),
+[M*         ](https://forth-standard.org/standard/core/MTimes),
+[UM*        ](https://forth-standard.org/standard/core/UMTimes),
+[2/         ](https://forth-standard.org/standard/core/TwoDiv),
+[2*         ](https://forth-standard.org/standard/core/TwoTimes),
+[MIN        ](https://forth-standard.org/standard/core/MIN),
+[MAX        ](https://forth-standard.org/standard/core/MAX),
+[RSHIFT     ](https://forth-standard.org/standard/core/RSHIFT),
+[LSHIFT     ](https://forth-standard.org/standard/core/LSHIFT),
+[INVERT     ](https://forth-standard.org/standard/core/INVERT),
+[1-         ](https://forth-standard.org/standard/core/OneMinus),
+[1+         ](https://forth-standard.org/standard/core/OnePlus),
+[S>D        ](https://forth-standard.org/standard/core/StoD),
+[XOR        ](https://forth-standard.org/standard/core/XOR),
+[OR         ](https://forth-standard.org/standard/core/OR),
+[AND        ](https://forth-standard.org/standard/core/AND),
+[LEAVE      ](https://forth-standard.org/standard/core/LEAVE),
+[UNLOOP     ](https://forth-standard.org/standard/core/UNLOOP),
+[J          ](https://forth-standard.org/standard/core/J),
+[I          ](https://forth-standard.org/standard/core/I),
+[+LOOP      ](https://forth-standard.org/standard/core/PlusLOOP),
+[LOOP       ](https://forth-standard.org/standard/core/LOOP),
+[DO         ](https://forth-standard.org/standard/core/DO),
+[REPEAT     ](https://forth-standard.org/standard/core/REPEAT),
+[WHILE      ](https://forth-standard.org/standard/core/WHILE),
+[AGAIN      ](https://forth-standard.org/standard/core/AGAIN),
+[UNTIL      ](https://forth-standard.org/standard/core/UNTIL),
+[THEN       ](https://forth-standard.org/standard/core/THEN),
+[ELSE       ](https://forth-standard.org/standard/core/ELSE),
+[IF         ](https://forth-standard.org/standard/core/IF),
+[>          ](https://forth-standard.org/standard/core/more),
+[<          ](https://forth-standard.org/standard/core/less),
+[U<         ](https://forth-standard.org/standard/core/Uless),
+[=          ](https://forth-standard.org/standard/core/Equal),
+[0<         ](https://forth-standard.org/standard/core/Zeroless),
+[0=         ](https://forth-standard.org/standard/core/ZeroEqual),
+[C,         ](https://forth-standard.org/standard/core/CComma),
+[C!         ](https://forth-standard.org/standard/core/CStore),
+[C@         ](https://forth-standard.org/standard/core/CFetch),
+[R>         ](https://forth-standard.org/standard/core/Rfrom),
+[>R         ](https://forth-standard.org/standard/core/toR),
+[NIP        ](https://forth-standard.org/standard/core/NIP),
+[DROP       ](https://forth-standard.org/standard/core/DROP),
+[SWAP       ](https://forth-standard.org/standard/core/SWAP),
+[DEPTH      ](https://forth-standard.org/standard/core/DEPTH),
+[EXIT       ](https://forth-standard.org/standard/core/EXIT),
+[?DUP       ](https://forth-standard.org/standard/core/qDUP),
+[DUP        ](https://forth-standard.org/standard/core/DUP),
+[-          ](https://forth-standard.org/standard/core/Minus),
+[+          ](https://forth-standard.org/standard/core/Plus),
+[CR         ](https://forth-standard.org/standard/core/CR).
+
+
+### FIXPOINT
+
+S>F,
+F.,
+F*,
+F#S,
+F/,
+F-,
+F+,
+[HOLDS          ](https://forth-standard.org/standard/core/HOLDS).
+
+    S>F             u/n -- Qlo Qhi       convert u/n in a Q15.16 value
+    F.              display a Q15.16 value
+    F*              Q15.16 multiplication  
+    F#S             Qlo Qhi u -- Qhi 0    
+                    convert fractionnal part of a Q15.16 value displaying u digits
+    F/              Q15.16 division        
+    F-              Q15.16 soustraction
+    F+              Q15.16 addition
+
+
+### UTILITY
+
+[DUMP           ](https://forth-standard.org/standard/tools/DUMP), 
+[U.R            ](https://forth-standard.org/standard/core/UDotR),
+[WORDS          ](https://forth-standard.org/standard/tools/WORDS),
+[?              ](https://forth-standard.org/standard/tools/q), 
+[.S             ](https://forth-standard.org/standard/tools/DotS),
+.RS.
+
+    .RS             displays Return Stack content  
+
+### SD_TOOLS
+
+    DIR             dump first sector of current directory  
+    FAT             dump first sector of FAT1  
+    CLUSTER.        .123 CLUSTER. displays first sector of cluster 123  
+    SECTOR.         .123456789 SECTOR. displays sector 123456789  
+
+### DOUBLE word set
+
+[D.R             ](https://forth-standard.org/standard/double/DDotR),
+[2LITERAL        ](https://forth-standard.org/standard/double/TwoLITERAL),
+[2VALUE          ](https://forth-standard.org/standard/double/TwoVALUE),
+[2CONSTANT       ](https://forth-standard.org/standard/double/TwoCONSTANT),
+[2VARIABLE       ](https://forth-standard.org/standard/double/TwoVARIABLE),
+[M*/             ](https://forth-standard.org/standard/double/MTimesDiv),
+[DMIN            ](https://forth-standard.org/standard/double/DMIN),
+[DMAX            ](https://forth-standard.org/standard/double/DMAX),
+[D2*             ](https://forth-standard.org/standard/double/DTwoTimes),
+[D2/             ](https://forth-standard.org/standard/double/DTwoDiv),
+[DABS            ](https://forth-standard.org/standard/double/DABS),
+[DNEGATE         ](https://forth-standard.org/standard/double/DNEGATE),
+[D-              ](https://forth-standard.org/standard/double/DMinus),
+[M+              ](https://forth-standard.org/standard/double/MPlus),
+[D+              ](https://forth-standard.org/standard/double/DPlus),
+[DU<             ](https://forth-standard.org/standard/double/DUless),
+[D<              ](https://forth-standard.org/standard/double/Dless),
+[D=              ](https://forth-standard.org/standard/double/DEqual),
+[D0<             ](https://forth-standard.org/standard/double/DZeroless),
+[D0=             ](https://forth-standard.org/standard/double/DZeroEqual),
+[D>S             ](https://forth-standard.org/standard/double/DtoS),
+[2ROT            ](https://forth-standard.org/standard/double/TwoROT),
+[D.              ](https://forth-standard.org/standard/double/Dd),
+[2R>             ](https://forth-standard.org/standard/core/TwoRfrom),
+[2R@             ](https://forth-standard.org/standard/core/TwoRFetch),
+[2>R             ](https://forth-standard.org/standard/core/TwotoR)
+
+
+## IDE for linux UBUNTU 
+
+First search from ti.com: [MSP430Flasher](http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430Flasher/latest/index_FDS.html)
+
+untar in a home folder then:
+* set executable flag in permission of this file
+* open MSPFlasher-1.3.16-linux-x64-installer.run
+* install in MSP430Flasher (under home)
+
+open a terminal in MSP430Flasher/Drivers: 
+    sudo ./msp430uif_install.sh
+    
+copy MSP430Flasher/MSP430Flasher to /usr/local/bin/MSP430Flasher 
+copy MSP430Flasher/libmsp430.so  to /usr/local/lib/MSP430Flasher/libmsp430.so
 
-ANNEXE
---
+open an editor as superuser in /etc/ld.so.conf.d/
+     write on first line (of new file): /usr/local/lib/msp430flasher/
+     save this new file as libmsp430.conf
+then in a terminal: sudo /sbin/ldconfig
 
-The embedded assembler don't recognize the (useless) TI's symbolic addressing mode: ADD.B EDE,TONI.
 
-REGISTERS correspondence (the preprocessor gema.exe allow you to use FASTFORTH or TI registers's names).
+#### install the package srecord
 
-    embedded ASM    TI      FASTFORTH   comment 
-                             
-        R0          PC      PC          Program Counter
-        R1          SP      RSP         Return Stack Pointer
-        R2          SR/CG1              Status Register/Constant Generator 1
-        R3          CG2                 Constant Generator 2
-        R4          R4      R (rDODOES) contents address of xdodoes   
-        R5          R5      Q (rDOCON)  contents address of xdocon    
-        R6          R6      P (rDOVAR)  contents address of RFROM           
-        R7          R7      M (rDOCOL)  contents address of xDOCOL (DTC=1|2)            
-        R8          R8      Y           scratch register
-        R9          R9      X           scratch register
-        R10         R10     W           scratch register
-        R11         R11     T           scratch register
-        R12         R12     S           scratch register      
-        R13         R13     IP          Interpretation Pointer
-        R14         R14     TOS         Top Of parameters Stack
-        R15         R15     PSP         Parameters Stack Pointer
+install the package scite
+as super user, edit /etc/scite/SciTEGlobal.properties
+uncomment (line 18): position.maximize=1
+uncomment (line 257): properties.directory.enable=1
+add line 7: PLAT_WIN=0
+add line 8: PLAT_GTK=1
+save file
 
-REGISTERS use
+at the end of your ~.profile file, add these two lines:
+FF="/the_root_of_your_FastForth_local_copy"
+export FF
 
-    The FASTFORTH registers rDOCOL, rDOVAR, rDOCON and rDODOES must be preserved. 
-    If you use them you can either PUSHM #4,M before and POPM #4,M after,
-    or by restoring after use their FastForth default values:
-    xdocol, xdovar, xdocon, xdodoes. See device.pat.
-    
-    But if you use this registers you must not at the same time use any FORTH words
-    created by them! 
-    
-    don't use R3 and use R2 only with BIC, BIT, BIS instructions in register mode.
+https://sourceforge.net/projects/gema/files/gema/gema-1.4-RC/gema-1.4RC-src.tgz/download
+untar in a home folder then:
+make (ignore warnings)
+sudo make install (ignore warnings)
+make clean
+result in: /usr/local/bin/gema
 
+http://john.ccac.rwth-aachen.de:8000/ftp/as/source/c_version/asl-current.tar.gz
+untar in a home folder then:
+copy /Makefile.def-samples/Makefile.def-i386-unknown-linux2.x,x to ../Makefile.def
+edit this Makefile.def to remove "-march=i586" option from line 7 (if any)
+make
+make test
+sudo make install
+make clean
+result: asl files are in /usr/local
 
-PARAMETERS STACK use
 
-    The register TOS (Top Of Stack) is the first cell of the Parameters stack. 
-    The register PSP (Parameters Stack Pointer) points the second cell.
-    
-    to push one cell on the PSP stack :
-    
-        SUB #2,PSP                  \ insert a empty 2th cell
-        MOV TOS,0(PSP)              \ fill this 2th cell with first cell
-        MOV <what you want>,TOS     \ MOV or MOV.B <what you want>,TOS ; i.e. update first cell
-    
-    to pop one cell from the PSP stack :
-    
-        MOV @PSP+,TOS               \ first cell TOS is lost and replaced by the 2th.
-    
-    don't never pop a byte with instruction MOV.B @PSP+, because generates a stack misalignement...
+#### install minicom package
 
-RETURN STACK use
 
-    register RSP is the Return Stack Pointer (SP).
-    
-    to push one cell on the RSP stack :
-    
-        PUSH <what you want>        \
-    
-    to pop one cell from the RSP stack :
-    
-        MOV @RSP+,<where you want>   \
-    
-    don't never pop a byte with instruction MOV.B @RSP+, ...
+sudo gpasswd --add ${USER} dialout
 
+copy /config/msp430/.minirc.dfl in your home directory.
 
-    to push multiple registers on the RSP stack :
-    
-        PUSHM #n,Rx                 \  with 0 <= x-(n-1) < 16
-    
-    to pop multiple registers from the RSP stack :
-    
-        POPM #n,Rx                  \  with 0 <= x-(n-1) < 16
-    
-    PUSHM order : PSP,TOS, IP,  S,  T,  W,  X,  Y, rEXIT,rDOVAR,rDOCON, rDODOES, R3, SR,RSP, PC
-    PUSHM order : R15,R14,R13,R12,R11,R10, R9, R8,  R7  ,  R6  ,  R5  ,   R4   , R3, R2, R1, R0
-    
-    example : PUSHM #6,IP pushes IP,S,T,W,X,Y registers to return stack
-    
-    POPM  order :  PC,RSP, SR, R3, rDODOES,rDOCON,rDOVAR, rEXIT,  Y,  X,  W,  T,  S, IP,TOS,PSP
-    POPM  order :  R0, R1, R2, R3,   R4   ,  R5  ,  R6  ,   R7 , R8, R9,R10,R11,R12,R13,R14,R15
-    
-    example : POPM #6,IP   pulls Y,X,W,T,S,IP registers from return stack
-    
-    error occurs if n is out of bounds
+In /inc/RemoveComments.pat, deselect windows part, select linux part. 
 
 
-CPUx instructions RRCM,RRAM,RLAM,RRUM
-    
-    example : RRUM #3,Y      \ Y (R8) register is Unsigned Right shifted by n=3
-    
-    error occurs if 1 > n > 4
+With scite editor you can 
+   - assemble FastForth then download it to eZFET target, 
+   - edit your source files
+   - preprocess file.f to file.4th 
 
+With minicom you can send a file.4th to your target via dev/ttyUSB0, up to 4Mbauds:
+CTRL_A + Y to send a file
 
-conditionnal jumps use with symbolic assembler
 
-    0=    with IF UNTIL WHILE ?JMP ?GOTO
-    0<>   with IF UNTIL WHILE ?JMP ?GOTO   
-    U>=   with IF UNTIL WHILE ?JMP ?GOTO   
-    U<    with IF UNTIL WHILE ?JMP ?GOTO    
-    S<    with IF UNTIL WHILE ?JMP ?GOTO    
-    S>=   with IF UNTIL WHILE ?JMP ?GOTO   
-    0>=   with IF UNTIL WHILE
-    0<    with ?JMP ?GOTO